Spaces:
Running
Running
File size: 1,152 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | /**
* Bezier Curves formulas obtained from
* https://en.wikipedia.org/wiki/B%C3%A9zier_curve
*/
function CatmullRom(t, p0, p1, p2, p3) {
const v0 = (p2 - p0) * 0.5;
const v1 = (p3 - p1) * 0.5;
const t2 = t * t;
const t3 = t * t2;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
//
function QuadraticBezierP0(t, p) {
const k = 1 - t;
return k * k * p;
}
function QuadraticBezierP1(t, p) {
return 2 * (1 - t) * t * p;
}
function QuadraticBezierP2(t, p) {
return t * t * p;
}
function QuadraticBezier(t, p0, p1, p2) {
return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2);
}
//
function CubicBezierP0(t, p) {
const k = 1 - t;
return k * k * k * p;
}
function CubicBezierP1(t, p) {
const k = 1 - t;
return 3 * k * k * t * p;
}
function CubicBezierP2(t, p) {
return 3 * (1 - t) * t * t * p;
}
function CubicBezierP3(t, p) {
return t * t * t * p;
}
function CubicBezier(t, p0, p1, p2, p3) {
return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3);
}
export { CatmullRom, QuadraticBezier, CubicBezier };
|