220 lines
22 KiB
Java
220 lines
22 KiB
Java
![]() |
"use strict";
|
||
|
|
||
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
||
|
|
||
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
||
|
|
||
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||
|
|
||
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||
|
|
||
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
||
|
|
||
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
||
|
|
||
|
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
|
||
|
|
||
|
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
|
||
|
|
||
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
||
|
|
||
|
/**
|
||
|
* @fileOverview the class of Polar Coordinate
|
||
|
* @author sima.zhang
|
||
|
*/
|
||
|
var MatrixUtil = require('@antv/util/lib/matrix/');
|
||
|
|
||
|
var isNumberEqual = require('@antv/util/lib/math/is-number-equal');
|
||
|
|
||
|
var mix = require('@antv/util/lib/mix');
|
||
|
|
||
|
var Base = require('./base');
|
||
|
|
||
|
var mat3 = MatrixUtil.mat3;
|
||
|
var vec2 = MatrixUtil.vec2;
|
||
|
var vec3 = MatrixUtil.vec3;
|
||
|
|
||
|
var Polar =
|
||
|
/*#__PURE__*/
|
||
|
function (_Base) {
|
||
|
_inherits(Polar, _Base);
|
||
|
|
||
|
_createClass(Polar, [{
|
||
|
key: "getDefaultCfg",
|
||
|
value: function getDefaultCfg() {
|
||
|
var cfg = _get(_getPrototypeOf(Polar.prototype), "getDefaultCfg", this).call(this);
|
||
|
|
||
|
return mix({}, cfg, {
|
||
|
startAngle: -Math.PI / 2,
|
||
|
endAngle: Math.PI * 3 / 2,
|
||
|
innerRadius: 0,
|
||
|
type: 'polar',
|
||
|
isPolar: true
|
||
|
});
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
function Polar(cfg) {
|
||
|
var _this;
|
||
|
|
||
|
_classCallCheck(this, Polar);
|
||
|
|
||
|
_this = _possibleConstructorReturn(this, _getPrototypeOf(Polar).call(this, cfg));
|
||
|
|
||
|
_this._init();
|
||
|
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(Polar, [{
|
||
|
key: "_init",
|
||
|
value: function _init() {
|
||
|
var radius = this.radius;
|
||
|
var innerRadius = this.innerRadius;
|
||
|
var center = this.center;
|
||
|
var startAngle = this.startAngle;
|
||
|
var endAngle = this.endAngle;
|
||
|
|
||
|
while (endAngle < startAngle) {
|
||
|
endAngle += Math.PI * 2;
|
||
|
}
|
||
|
|
||
|
this.endAngle = endAngle;
|
||
|
var oneBox = this.getOneBox();
|
||
|
var oneWidth = oneBox.maxX - oneBox.minX;
|
||
|
var oneHeight = oneBox.maxY - oneBox.minY;
|
||
|
var left = Math.abs(oneBox.minX) / oneWidth;
|
||
|
var top = Math.abs(oneBox.minY) / oneHeight;
|
||
|
var width = this.width;
|
||
|
var height = this.height;
|
||
|
var maxRadius;
|
||
|
var circleCentre;
|
||
|
|
||
|
if (height / oneHeight > width / oneWidth) {
|
||
|
// width为主
|
||
|
maxRadius = width / oneWidth;
|
||
|
circleCentre = {
|
||
|
x: center.x - (0.5 - left) * width,
|
||
|
y: center.y - (0.5 - top) * maxRadius * oneHeight
|
||
|
};
|
||
|
} else {
|
||
|
// height为主
|
||
|
maxRadius = height / oneHeight;
|
||
|
circleCentre = {
|
||
|
x: center.x - (0.5 - left) * maxRadius * oneWidth,
|
||
|
y: center.y - (0.5 - top) * height
|
||
|
};
|
||
|
}
|
||
|
|
||
|
if (!radius) {
|
||
|
radius = maxRadius;
|
||
|
} else if (radius > 0 && radius <= 1) {
|
||
|
radius = maxRadius * radius;
|
||
|
} else if (radius <= 0 || radius > maxRadius) {
|
||
|
radius = maxRadius;
|
||
|
}
|
||
|
|
||
|
var x = {
|
||
|
start: startAngle,
|
||
|
end: endAngle
|
||
|
};
|
||
|
var y = {
|
||
|
start: innerRadius * radius,
|
||
|
end: radius
|
||
|
};
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
this.radius = radius;
|
||
|
this.circleCentre = circleCentre;
|
||
|
this.center = circleCentre;
|
||
|
}
|
||
|
}, {
|
||
|
key: "getCenter",
|
||
|
value: function getCenter() {
|
||
|
return this.circleCentre;
|
||
|
}
|
||
|
}, {
|
||
|
key: "getOneBox",
|
||
|
value: function getOneBox() {
|
||
|
var startAngle = this.startAngle;
|
||
|
var endAngle = this.endAngle;
|
||
|
|
||
|
if (Math.abs(endAngle - startAngle) >= Math.PI * 2) {
|
||
|
return {
|
||
|
minX: -1,
|
||
|
maxX: 1,
|
||
|
minY: -1,
|
||
|
maxY: 1
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var xs = [0, Math.cos(startAngle), Math.cos(endAngle)];
|
||
|
var ys = [0, Math.sin(startAngle), Math.sin(endAngle)];
|
||
|
|
||
|
for (var i = Math.min(startAngle, endAngle); i < Math.max(startAngle, endAngle); i += Math.PI / 18) {
|
||
|
xs.push(Math.cos(i));
|
||
|
ys.push(Math.sin(i));
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
minX: Math.min.apply(Math, xs),
|
||
|
maxX: Math.max.apply(Math, xs),
|
||
|
minY: Math.min.apply(Math, ys),
|
||
|
maxY: Math.max.apply(Math, ys)
|
||
|
};
|
||
|
}
|
||
|
}, {
|
||
|
key: "getRadius",
|
||
|
value: function getRadius() {
|
||
|
return this.radius;
|
||
|
}
|
||
|
}, {
|
||
|
key: "convertPoint",
|
||
|
value: function convertPoint(point) {
|
||
|
var center = this.getCenter();
|
||
|
var x = this.isTransposed ? point.y : point.x;
|
||
|
var y = this.isTransposed ? point.x : point.y;
|
||
|
x = this.convertDim(x, 'x');
|
||
|
y = this.convertDim(y, 'y');
|
||
|
return {
|
||
|
x: center.x + Math.cos(x) * y,
|
||
|
y: center.y + Math.sin(x) * y
|
||
|
};
|
||
|
}
|
||
|
}, {
|
||
|
key: "invertPoint",
|
||
|
value: function invertPoint(point) {
|
||
|
var center = this.getCenter();
|
||
|
var vPoint = [point.x - center.x, point.y - center.y];
|
||
|
var x = this.x;
|
||
|
var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];
|
||
|
mat3.rotate(m, m, x.start);
|
||
|
var vStart = [1, 0, 0];
|
||
|
vec3.transformMat3(vStart, vStart, m);
|
||
|
vStart = [vStart[0], vStart[1]];
|
||
|
var angle = vec2.angleTo(vStart, vPoint, x.end < x.start);
|
||
|
|
||
|
if (isNumberEqual(angle, Math.PI * 2)) {
|
||
|
angle = 0;
|
||
|
}
|
||
|
|
||
|
var radius = vec2.length(vPoint);
|
||
|
var xPercent = angle / (x.end - x.start);
|
||
|
xPercent = x.end - x.start > 0 ? xPercent : -xPercent;
|
||
|
var yPercent = this.invertDim(radius, 'y');
|
||
|
var rst = {};
|
||
|
rst.x = this.isTransposed ? yPercent : xPercent;
|
||
|
rst.y = this.isTransposed ? xPercent : yPercent;
|
||
|
return rst;
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return Polar;
|
||
|
}(Base);
|
||
|
|
||
|
module.exports = Polar;
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wb2xhci5qcyJdLCJuYW1lcyI6WyJNYXRyaXhVdGlsIiwicmVxdWlyZSIsImlzTnVtYmVyRXF1YWwiLCJtaXgiLCJCYXNlIiwibWF0MyIsInZlYzIiLCJ2ZWMzIiwiUG9sYXIiLCJjZmciLCJzdGFydEFuZ2xlIiwiTWF0aCIsIlBJIiwiZW5kQW5nbGUiLCJpbm5lclJhZGl1cyIsInR5cGUiLCJpc1BvbGFyIiwiX2luaXQiLCJyYWRpdXMiLCJjZW50ZXIiLCJvbmVCb3giLCJnZXRPbmVCb3giLCJvbmVXaWR0aCIsIm1heFgiLCJtaW5YIiwib25lSGVpZ2h0IiwibWF4WSIsIm1pblkiLCJsZWZ0IiwiYWJzIiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJtYXhSYWRpdXMiLCJjaXJjbGVDZW50cmUiLCJ4IiwieSIsInN0YXJ0IiwiZW5kIiwieHMiLCJjb3MiLCJ5cyIsInNpbiIsImkiLCJtaW4iLCJtYXgiLCJwdXNoIiwiYXBwbHkiLCJwb2ludCIsImdldENlbnRlciIsImlzVHJhbnNwb3NlZCIsImNvbnZlcnREaW0iLCJ2UG9pbnQiLCJtIiwicm90YXRlIiwidlN0YXJ0IiwidHJhbnNmb3JtTWF0MyIsImFuZ2xlIiwiYW5nbGVUbyIsImxlbmd0aCIsInhQZXJjZW50IiwieVBlcmNlbnQiLCJpbnZlcnREaW0iLCJyc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUlBLElBQU1BLFVBQVUsR0FBR0MsT0FBTyxDQUFDLHdCQUFELENBQTFCOztBQUNBLElBQU1DLGFBQWEsR0FBR0QsT0FBTyxDQUFDLHFDQUFELENBQTdCOztBQUNBLElBQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLG9CQUFELENBQW5COztBQUNBLElBQU1HLElBQUksR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBcEI7O0FBRUEsSUFBTUksSUFBSSxHQUFHTCxVQUFVLENBQUNLLElBQXhCO0FBQ0EsSUFBTUMsSUFB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
|