| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | var Path = require("../Path");/** * 内外旋轮曲线 * @module zrender/graphic/shape/Trochold */var cos = Math.cos;var sin = Math.sin;var _default = Path.extend({  type: 'trochoid',  shape: {    cx: 0,    cy: 0,    r: 0,    r0: 0,    d: 0,    location: 'out'  },  style: {    stroke: '#000',    fill: null  },  buildPath: function (ctx, shape) {    var x1;    var y1;    var x2;    var y2;    var R = shape.r;    var r = shape.r0;    var d = shape.d;    var offsetX = shape.cx;    var offsetY = shape.cy;    var delta = shape.location === 'out' ? 1 : -1;    if (shape.location && R <= r) {      return;    }    var num = 0;    var i = 1;    var theta;    x1 = (R + delta * r) * cos(0) - delta * d * cos(0) + offsetX;    y1 = (R + delta * r) * sin(0) - d * sin(0) + offsetY;    ctx.moveTo(x1, y1); // 计算结束时的i    do {      num++;    } while (r * num % (R + delta * r) !== 0);    do {      theta = Math.PI / 180 * i;      x2 = (R + delta * r) * cos(theta) - delta * d * cos((R / r + delta) * theta) + offsetX;      y2 = (R + delta * r) * sin(theta) - d * sin((R / r + delta) * theta) + offsetY;      ctx.lineTo(x2, y2);      i++;    } while (i <= r * num / (R + delta * r) * 360);  }});module.exports = _default;
 |