@antv/f2
Version:
Charts for mobile visualization.
117 lines (116 loc) • 3.54 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _tslib = require("tslib");
var _base = _interopRequireDefault(require("./base"));
var _glMatrix = require("gl-matrix");
var _vector = require("../util/vector");
var Polar = /** @class */function (_super) {
(0, _tslib.__extends)(Polar, _super);
function Polar() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.type = 'polar';
_this.isPolar = true;
return _this;
}
Polar.prototype.update = function (option) {
_super.prototype.update.call(this, option);
if (!this.option) {
this.option = option;
}
var _a = this.option,
_b = _a.radius,
radiusRatio = _b === void 0 ? 1 : _b,
_c = _a.innerRadius,
innerRadiusRatio = _c === void 0 ? 0 : _c;
var _d = this,
width = _d.width,
height = _d.height,
_e = _d.startAngle,
startAngle = _e === void 0 ? -Math.PI / 2 : _e,
_f = _d.endAngle,
endAngle = _f === void 0 ? Math.PI * 3 / 2 : _f;
// 半径取宽高的最小值
var radius = radiusRatio * (Math.min(width, height) / 2);
// 极坐标下 x 表示弧度, y 代表 半径
var x = [startAngle, endAngle];
var y = [innerRadiusRatio * radius, radius];
this.x = x;
this.y = y;
this.startAngle = startAngle;
this.endAngle = endAngle;
this.radius = radius;
this.innnerRadius = innerRadiusRatio * radius;
return this;
};
Polar.prototype.isCyclic = function () {
var _a = this,
startAngle = _a.startAngle,
endAngle = _a.endAngle;
if (endAngle - startAngle < Math.PI * 2) {
return false;
}
return true;
};
Polar.prototype.convertPoint = function (point) {
var _a = this,
center = _a.center,
transposed = _a.transposed,
x = _a.x,
y = _a.y;
var xDim = transposed ? 'y' : 'x';
var yDim = transposed ? 'x' : 'y';
var xStart = x[0],
xEnd = x[1];
var yStart = y[0],
yEnd = y[1];
var angle = xStart + (xEnd - xStart) * point[xDim];
var radius = yStart + (yEnd - yStart) * point[yDim];
return {
x: center.x + Math.cos(angle) * radius,
y: center.y + Math.sin(angle) * radius
};
};
Polar.prototype.invertPoint = function (point) {
var _a = this,
center = _a.center,
transposed = _a.transposed,
x = _a.x,
y = _a.y;
var xDim = transposed ? 'y' : 'x';
var yDim = transposed ? 'x' : 'y';
var xStart = x[0],
xEnd = x[1];
var yStart = y[0],
yEnd = y[1];
var m = [1, 0, 0, 1, 0, 0];
_glMatrix.mat2d.rotate(m, m, xStart);
var startV = [1, 0];
_glMatrix.vec2.transformMat2d(startV, startV, m);
startV = [startV[0], startV[1]];
var pointV = [point.x - center.x, point.y - center.y];
if ((0, _vector.vec2Zero)(pointV)) {
return {
x: 0,
y: 0
};
}
var theta = (0, _vector.vec2AngleTo)(startV, pointV, xEnd < xStart);
if (Math.abs(theta - Math.PI * 2) < 0.001) {
theta = 0;
}
var l = _glMatrix.vec2.length(pointV);
var percentX = theta / (xEnd - xStart);
percentX = xEnd - xStart > 0 ? percentX : -percentX;
var percentY = (l - yStart) / (yEnd - yStart);
var rst = {};
rst[xDim] = percentX;
rst[yDim] = percentY;
return rst;
};
return Polar;
}(_base.default);
var _default = exports.default = Polar;
;