61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
|
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;
|