blob: 558a0085174dfa8c088ba5e5841a971f348996a0 [file] [log] [blame]
/**
* 内外旋轮曲线
* @module zrender/graphic/shape/Trochold
*/
import Path from '../Path';
var cos = Math.cos;
var sin = Math.sin;
export 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);
}
});