suoqiu-f2
Version:
Charts for mobile visualization.
115 lines (114 loc) • 3.85 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = void 0;
var _base = _interopRequireDefault(require("./base"));
var _vector = _interopRequireDefault(require("../graphic/util/vector2"));
var _matrix = _interopRequireDefault(require("../graphic/util/matrix"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
var Polar = /*#__PURE__*/function (_Base) {
function Polar() {
return _Base.apply(this, arguments) || this;
}
_inheritsLoose(Polar, _Base);
var _proto = Polar.prototype;
_proto._initDefaultCfg = function _initDefaultCfg() {
this.type = 'polar';
this.startAngle = -Math.PI / 2;
this.endAngle = Math.PI * 3 / 2;
this.inner = 0;
this.innerRadius = 0; // alias
this.isPolar = true;
this.transposed = false;
this.center = null;
this.radius = null; // relative, 0 ~ 1
};
_proto.init = function init(start, end) {
_Base.prototype.init.call(this, start, end);
var self = this;
var inner = self.inner || self.innerRadius;
var width = Math.abs(end.x - start.x);
var height = Math.abs(end.y - start.y);
var maxRadius;
var center;
if (self.startAngle === -Math.PI && self.endAngle === 0) {
maxRadius = Math.min(width / 2, height);
center = {
x: (start.x + end.x) / 2,
y: start.y
};
} else {
maxRadius = Math.min(width, height) / 2;
center = {
x: (start.x + end.x) / 2,
y: (start.y + end.y) / 2
};
}
var radius = self.radius;
if (radius > 0 && radius <= 1) {
maxRadius = maxRadius * radius;
}
this.x = {
start: self.startAngle,
end: self.endAngle
};
this.y = {
start: maxRadius * inner,
end: maxRadius
};
this.center = center;
this.circleRadius = maxRadius; // the radius value in px
};
_proto._convertPoint = function _convertPoint(point) {
var self = this;
var center = self.center;
var transposed = self.transposed;
var xDim = transposed ? 'y' : 'x';
var yDim = transposed ? 'x' : 'y';
var x = self.x;
var y = self.y;
var angle = x.start + (x.end - x.start) * point[xDim];
var radius = y.start + (y.end - y.start) * point[yDim];
return {
x: center.x + Math.cos(angle) * radius,
y: center.y + Math.sin(angle) * radius
};
};
_proto._invertPoint = function _invertPoint(point) {
var self = this;
var center = self.center,
transposed = self.transposed,
x = self.x,
y = self.y;
var xDim = transposed ? 'y' : 'x';
var yDim = transposed ? 'x' : 'y';
var m = [1, 0, 0, 1, 0, 0];
_matrix["default"].rotate(m, m, x.start);
var startV = [1, 0];
_vector["default"].transformMat2d(startV, startV, m);
startV = [startV[0], startV[1]];
var pointV = [point.x - center.x, point.y - center.y];
if (_vector["default"].zero(pointV)) {
return {
x: 0,
y: 0
};
}
var theta = _vector["default"].angleTo(startV, pointV, x.end < x.start);
if (Math.abs(theta - Math.PI * 2) < 0.001) {
theta = 0;
}
var l = _vector["default"].length(pointV);
var percentX = theta / (x.end - x.start);
percentX = x.end - x.start > 0 ? percentX : -percentX;
var percentY = (l - y.start) / (y.end - y.start);
var rst = {};
rst[xDim] = percentX;
rst[yDim] = percentY;
return rst;
};
return Polar;
}(_base["default"]);
_base["default"].Polar = Polar;
var _default = exports["default"] = Polar;