Trochoid.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { __extends } from "tslib";
  2. import Path from '../Path.js';
  3. var cos = Math.cos;
  4. var sin = Math.sin;
  5. var TrochoidShape = (function () {
  6. function TrochoidShape() {
  7. this.cx = 0;
  8. this.cy = 0;
  9. this.r = 0;
  10. this.r0 = 0;
  11. this.d = 0;
  12. this.location = 'out';
  13. }
  14. return TrochoidShape;
  15. }());
  16. export { TrochoidShape };
  17. var Trochoid = (function (_super) {
  18. __extends(Trochoid, _super);
  19. function Trochoid(opts) {
  20. return _super.call(this, opts) || this;
  21. }
  22. Trochoid.prototype.getDefaultStyle = function () {
  23. return {
  24. stroke: '#000',
  25. fill: null
  26. };
  27. };
  28. Trochoid.prototype.getDefaultShape = function () {
  29. return new TrochoidShape();
  30. };
  31. Trochoid.prototype.buildPath = function (ctx, shape) {
  32. var R = shape.r;
  33. var r = shape.r0;
  34. var d = shape.d;
  35. var offsetX = shape.cx;
  36. var offsetY = shape.cy;
  37. var delta = shape.location === 'out' ? 1 : -1;
  38. var x1;
  39. var y1;
  40. var x2;
  41. var y2;
  42. if (shape.location && R <= r) {
  43. return;
  44. }
  45. var num = 0;
  46. var i = 1;
  47. var theta;
  48. x1 = (R + delta * r) * cos(0)
  49. - delta * d * cos(0) + offsetX;
  50. y1 = (R + delta * r) * sin(0)
  51. - d * sin(0) + offsetY;
  52. ctx.moveTo(x1, y1);
  53. do {
  54. num++;
  55. } while ((r * num) % (R + delta * r) !== 0);
  56. do {
  57. theta = Math.PI / 180 * i;
  58. x2 = (R + delta * r) * cos(theta)
  59. - delta * d * cos((R / r + delta) * theta)
  60. + offsetX;
  61. y2 = (R + delta * r) * sin(theta)
  62. - d * sin((R / r + delta) * theta)
  63. + offsetY;
  64. ctx.lineTo(x2, y2);
  65. i++;
  66. } while (i <= (r * num) / (R + delta * r) * 360);
  67. };
  68. return Trochoid;
  69. }(Path));
  70. Trochoid.prototype.type = 'trochoid';
  71. export default Trochoid;