72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
|
import { __extends } from "tslib";
|
||
|
import Path from '../Path.js';
|
||
|
var cos = Math.cos;
|
||
|
var sin = Math.sin;
|
||
|
var TrochoidShape = (function () {
|
||
|
function TrochoidShape() {
|
||
|
this.cx = 0;
|
||
|
this.cy = 0;
|
||
|
this.r = 0;
|
||
|
this.r0 = 0;
|
||
|
this.d = 0;
|
||
|
this.location = 'out';
|
||
|
}
|
||
|
return TrochoidShape;
|
||
|
}());
|
||
|
export { TrochoidShape };
|
||
|
var Trochoid = (function (_super) {
|
||
|
__extends(Trochoid, _super);
|
||
|
function Trochoid(opts) {
|
||
|
return _super.call(this, opts) || this;
|
||
|
}
|
||
|
Trochoid.prototype.getDefaultStyle = function () {
|
||
|
return {
|
||
|
stroke: '#000',
|
||
|
fill: null
|
||
|
};
|
||
|
};
|
||
|
Trochoid.prototype.getDefaultShape = function () {
|
||
|
return new TrochoidShape();
|
||
|
};
|
||
|
Trochoid.prototype.buildPath = function (ctx, shape) {
|
||
|
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;
|
||
|
var x1;
|
||
|
var y1;
|
||
|
var x2;
|
||
|
var y2;
|
||
|
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);
|
||
|
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);
|
||
|
};
|
||
|
return Trochoid;
|
||
|
}(Path));
|
||
|
Trochoid.prototype.type = 'trochoid';
|
||
|
export default Trochoid;
|