|
|
@ -47,11 +47,10 @@ export const circOut = (t: number) => Math.sin(Math.acos(1.0 - t));
|
|
|
|
export const circInOut = (t: number) =>
|
|
|
|
export const circInOut = (t: number) =>
|
|
|
|
0.5 * (t >= 0.5 ? 2.0 - Math.sin(Math.acos(1.0 - 2.0 * (1.0 - t))) : Math.sin(Math.acos(1.0 - 2.0 * t)));
|
|
|
|
0.5 * (t >= 0.5 ? 2.0 - Math.sin(Math.acos(1.0 - 2.0 * (1.0 - t))) : Math.sin(Math.acos(1.0 - 2.0 * t)));
|
|
|
|
export const cubicBezier = (x1: number, y1: number, x2: number, y2: number) => {
|
|
|
|
export const cubicBezier = (x1: number, y1: number, x2: number, y2: number) => {
|
|
|
|
if (!(x1 >= 0 && x1 <= 1 && x2 >= 0 && x2 <= 1)) {
|
|
|
|
if (!(x1 >= 0 && x1 <= 1 && x2 >= 0 && x2 <= 1))
|
|
|
|
throw new Error(`CubicBezier x1 & x2 values must be { 0 < x < 1 }, got { x1 : ${x1}, x2: ${x2} }`);
|
|
|
|
throw new Error(`CubicBezier x1 & x2 values must be { 0 < x < 1 }, got { x1 : ${x1}, x2: ${x2} }`);
|
|
|
|
}
|
|
|
|
const ax = 1.0 - (x2 = 3.0 * (x2 - x1) - (x1 *= 3.0)) - x1,
|
|
|
|
const ax = 1.0 - (x2 = 3.0 * (x2 - x1) - (x1 = 3.0 * x1)) - x1,
|
|
|
|
ay = 1.0 - (y2 = 3.0 * (y2 - y1) - (y1 *= 3.0)) - y1;
|
|
|
|
ay = 1.0 - (y2 = 3.0 * (y2 - y1) - (y1 = 3.0 * y1)) - y1;
|
|
|
|
|
|
|
|
let i = 0,
|
|
|
|
let i = 0,
|
|
|
|
r = 0.0,
|
|
|
|
r = 0.0,
|
|
|
|
s = 0.0,
|
|
|
|
s = 0.0,
|
|
|
@ -59,11 +58,11 @@ export const cubicBezier = (x1: number, y1: number, x2: number, y2: number) => {
|
|
|
|
x = 0.0;
|
|
|
|
x = 0.0;
|
|
|
|
return (t: number) => {
|
|
|
|
return (t: number) => {
|
|
|
|
for (r = t, i = 0; 32 > i; i++)
|
|
|
|
for (r = t, i = 0; 32 > i; i++)
|
|
|
|
if (1e-5 > Math.abs((x = r * r * (r * ax + x1 + x2) - t))) return r * (r * (r * ay + y2) + y1);
|
|
|
|
if (1e-5 > Math.abs((x = r * (r * (r * ax + x2) + x1) - t))) return r * (r * (r * ay + y2) + y1);
|
|
|
|
else if (1e-5 > Math.abs((d = r * (r * ax * 3.0 + x2 * 2.0) + x1))) break;
|
|
|
|
else if (1e-5 > Math.abs((d = r * (r * ax * 3.0 + x2 * 2.0) + x1))) break;
|
|
|
|
else r = r - x / d;
|
|
|
|
else r -= x / d;
|
|
|
|
if ((s = 0.0) > (r = t)) return 0;
|
|
|
|
if ((s = 0.0) > (r = t)) return 0;
|
|
|
|
else if ((d = 1.0) > r) return 1;
|
|
|
|
else if ((d = 1.0) < r) return 1;
|
|
|
|
while (d > s)
|
|
|
|
while (d > s)
|
|
|
|
if (1e-5 > Math.abs((x = r * (r * (r * ax + x2) + x1)) - t)) break;
|
|
|
|
if (1e-5 > Math.abs((x = r * (r * (r * ax + x2) + x1)) - t)) break;
|
|
|
|
else t > x ? (s = r) : (d = r), (r = 0.5 * (d - s) + s);
|
|
|
|
else t > x ? (s = r) : (d = r), (r = 0.5 * (d - s) + s);
|
|
|
|