polar.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. "use strict";
  2. exports.__esModule = true;
  3. exports["default"] = void 0;
  4. var _base = _interopRequireDefault(require("./base"));
  5. var _vector = _interopRequireDefault(require("../graphic/util/vector2"));
  6. var _matrix = _interopRequireDefault(require("../graphic/util/matrix"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  8. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  9. var Polar = /*#__PURE__*/function (_Base) {
  10. _inheritsLoose(Polar, _Base);
  11. function Polar() {
  12. return _Base.apply(this, arguments) || this;
  13. }
  14. var _proto = Polar.prototype;
  15. _proto._initDefaultCfg = function _initDefaultCfg() {
  16. this.type = 'polar';
  17. this.startAngle = -Math.PI / 2;
  18. this.endAngle = Math.PI * 3 / 2;
  19. this.inner = 0;
  20. this.innerRadius = 0; // alias
  21. this.isPolar = true;
  22. this.transposed = false;
  23. this.center = null;
  24. this.radius = null; // relative, 0 ~ 1
  25. };
  26. _proto.init = function init(start, end) {
  27. _Base.prototype.init.call(this, start, end);
  28. var self = this;
  29. var inner = self.inner || self.innerRadius;
  30. var width = Math.abs(end.x - start.x);
  31. var height = Math.abs(end.y - start.y);
  32. var maxRadius;
  33. var center;
  34. if (self.startAngle === -Math.PI && self.endAngle === 0) {
  35. maxRadius = Math.min(width / 2, height);
  36. center = {
  37. x: (start.x + end.x) / 2,
  38. y: start.y
  39. };
  40. } else {
  41. maxRadius = Math.min(width, height) / 2;
  42. center = {
  43. x: (start.x + end.x) / 2,
  44. y: (start.y + end.y) / 2
  45. };
  46. }
  47. var radius = self.radius;
  48. if (radius > 0 && radius <= 1) {
  49. maxRadius = maxRadius * radius;
  50. }
  51. this.x = {
  52. start: self.startAngle,
  53. end: self.endAngle
  54. };
  55. this.y = {
  56. start: maxRadius * inner,
  57. end: maxRadius
  58. };
  59. this.center = center;
  60. this.circleRadius = maxRadius; // the radius value in px
  61. };
  62. _proto._convertPoint = function _convertPoint(point) {
  63. var self = this;
  64. var center = self.center;
  65. var transposed = self.transposed;
  66. var xDim = transposed ? 'y' : 'x';
  67. var yDim = transposed ? 'x' : 'y';
  68. var x = self.x;
  69. var y = self.y;
  70. var angle = x.start + (x.end - x.start) * point[xDim];
  71. var radius = y.start + (y.end - y.start) * point[yDim];
  72. return {
  73. x: center.x + Math.cos(angle) * radius,
  74. y: center.y + Math.sin(angle) * radius
  75. };
  76. };
  77. _proto._invertPoint = function _invertPoint(point) {
  78. var self = this;
  79. var center = self.center,
  80. transposed = self.transposed,
  81. x = self.x,
  82. y = self.y;
  83. var xDim = transposed ? 'y' : 'x';
  84. var yDim = transposed ? 'x' : 'y';
  85. var m = [1, 0, 0, 1, 0, 0];
  86. _matrix["default"].rotate(m, m, x.start);
  87. var startV = [1, 0];
  88. _vector["default"].transformMat2d(startV, startV, m);
  89. startV = [startV[0], startV[1]];
  90. var pointV = [point.x - center.x, point.y - center.y];
  91. if (_vector["default"].zero(pointV)) {
  92. return {
  93. x: 0,
  94. y: 0
  95. };
  96. }
  97. var theta = _vector["default"].angleTo(startV, pointV, x.end < x.start);
  98. if (Math.abs(theta - Math.PI * 2) < 0.001) {
  99. theta = 0;
  100. }
  101. var l = _vector["default"].length(pointV);
  102. var percentX = theta / (x.end - x.start);
  103. percentX = x.end - x.start > 0 ? percentX : -percentX;
  104. var percentY = (l - y.start) / (y.end - y.start);
  105. var rst = {};
  106. rst[xDim] = percentX;
  107. rst[yDim] = percentY;
  108. return rst;
  109. };
  110. return Polar;
  111. }(_base["default"]);
  112. _base["default"].Polar = Polar;
  113. var _default = Polar;
  114. exports["default"] = _default;