polar.js 4.3 KB

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