56 lines
1.1 KiB
JavaScript
56 lines
1.1 KiB
JavaScript
import {Basis} from "./basis.js";
|
|
|
|
function Bundle(context, beta) {
|
|
this._basis = new Basis(context);
|
|
this._beta = beta;
|
|
}
|
|
|
|
Bundle.prototype = {
|
|
lineStart: function() {
|
|
this._x = [];
|
|
this._y = [];
|
|
this._basis.lineStart();
|
|
},
|
|
lineEnd: function() {
|
|
var x = this._x,
|
|
y = this._y,
|
|
j = x.length - 1;
|
|
|
|
if (j > 0) {
|
|
var x0 = x[0],
|
|
y0 = y[0],
|
|
dx = x[j] - x0,
|
|
dy = y[j] - y0,
|
|
i = -1,
|
|
t;
|
|
|
|
while (++i <= j) {
|
|
t = i / j;
|
|
this._basis.point(
|
|
this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
|
|
this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
|
|
);
|
|
}
|
|
}
|
|
|
|
this._x = this._y = null;
|
|
this._basis.lineEnd();
|
|
},
|
|
point: function(x, y) {
|
|
this._x.push(+x);
|
|
this._y.push(+y);
|
|
}
|
|
};
|
|
|
|
export default (function custom(beta) {
|
|
|
|
function bundle(context) {
|
|
return beta === 1 ? new Basis(context) : new Bundle(context, beta);
|
|
}
|
|
|
|
bundle.beta = function(beta) {
|
|
return custom(+beta);
|
|
};
|
|
|
|
return bundle;
|
|
})(0.85);
|