curvy 0.3.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/dist/curve/cubic2d.d.mts +27 -0
- package/dist/curve/cubic2d.d.ts +27 -0
- package/dist/curve/cubic2d.mjs +85 -0
- package/dist/curve/linear2d.d.mts +27 -0
- package/dist/curve/linear2d.d.ts +27 -0
- package/dist/curve/linear2d.mjs +46 -0
- package/dist/curve/quadratic2d.d.mts +27 -0
- package/dist/curve/quadratic2d.d.ts +27 -0
- package/dist/curve/quadratic2d.mjs +74 -0
- package/dist/interval.d.mts +58 -0
- package/dist/interval.d.ts +58 -0
- package/dist/interval.mjs +88 -0
- package/dist/matrix/matrix2x2.d.mts +49 -0
- package/dist/matrix/matrix2x2.d.ts +49 -0
- package/dist/matrix/matrix2x2.mjs +23 -0
- package/dist/matrix/matrix3x3.d.mts +63 -0
- package/dist/matrix/matrix3x3.d.ts +63 -0
- package/dist/matrix/matrix3x3.mjs +26 -0
- package/dist/matrix/matrix4x4.d.mts +72 -0
- package/dist/matrix/matrix4x4.d.ts +72 -0
- package/dist/matrix/matrix4x4.mjs +214 -0
- package/dist/path/cubic2d.d.mts +29 -0
- package/dist/path/cubic2d.d.ts +29 -0
- package/dist/path/cubic2d.mjs +60 -0
- package/dist/path/linear2d.d.mts +29 -0
- package/dist/path/linear2d.d.ts +29 -0
- package/dist/path/linear2d.mjs +54 -0
- package/dist/path/quadratic2d.d.mts +29 -0
- package/dist/path/quadratic2d.d.ts +29 -0
- package/dist/path/quadratic2d.mjs +60 -0
- package/dist/polynomial/cubic.d.mts +7 -0
- package/dist/polynomial/cubic.d.ts +7 -0
- package/dist/polynomial/cubic.mjs +139 -0
- package/dist/polynomial/linear.d.mts +7 -0
- package/dist/polynomial/linear.d.ts +7 -0
- package/dist/polynomial/linear.mjs +19 -0
- package/dist/polynomial/quadratic.d.mts +7 -0
- package/dist/polynomial/quadratic.d.ts +7 -0
- package/dist/polynomial/quadratic.mjs +22 -0
- package/dist/shared/curvy.BAW_cKLu.mjs +123 -0
- package/dist/shared/curvy.BN-oFBsc.d.mts +26 -0
- package/dist/shared/curvy.BN-oFBsc.d.ts +26 -0
- package/dist/shared/curvy.Bxxwly94.d.mts +144 -0
- package/dist/shared/curvy.C-sUk7ux.mjs +119 -0
- package/dist/shared/curvy.CLzGuqek.mjs +124 -0
- package/dist/shared/curvy.CO0Wclt0.d.ts +144 -0
- package/dist/shared/curvy.CT38g_II.d.mts +22 -0
- package/dist/shared/curvy.CT38g_II.d.ts +22 -0
- package/dist/shared/curvy.ChkqgKuv.mjs +119 -0
- package/dist/shared/curvy.Cty3LrOR.mjs +70 -0
- package/dist/shared/curvy.D7bhnwZy.mjs +52 -0
- package/dist/shared/curvy.DOLqYbKE.mjs +48 -0
- package/dist/shared/curvy.DgRsieUW.mjs +76 -0
- package/dist/shared/curvy.DmVFTi0N.mjs +34 -0
- package/dist/splines/bezier2d.d.mts +35 -0
- package/dist/splines/bezier2d.d.ts +35 -0
- package/dist/splines/bezier2d.mjs +122 -0
- package/dist/vector/vector2.d.mts +37 -0
- package/dist/vector/vector2.d.ts +37 -0
- package/dist/vector/vector2.mjs +16 -0
- package/dist/vector/vector3.d.mts +38 -0
- package/dist/vector/vector3.d.ts +38 -0
- package/dist/vector/vector3.mjs +16 -0
- package/dist/vector/vector4.d.mts +39 -0
- package/dist/vector/vector4.d.ts +39 -0
- package/dist/vector/vector4.mjs +16 -0
- package/package.json +81 -38
- package/dist/axis.cjs +0 -325
- package/dist/axis.d.cts +0 -20
- package/dist/axis.d.mts +0 -20
- package/dist/axis.d.ts +0 -20
- package/dist/axis.mjs +0 -314
- package/dist/convert.cjs +0 -74
- package/dist/convert.d.cts +0 -6
- package/dist/convert.d.mts +0 -6
- package/dist/convert.d.ts +0 -6
- package/dist/convert.mjs +0 -68
- package/dist/curve.cjs +0 -194
- package/dist/curve.d.cts +0 -18
- package/dist/curve.d.mts +0 -18
- package/dist/curve.d.ts +0 -18
- package/dist/curve.mjs +0 -184
- package/dist/shared/curvy.262f6070.cjs +0 -16
- package/dist/shared/curvy.9cd8b44c.mjs +0 -13
- package/dist/shared/curvy.df73166c.d.cts +0 -38
- package/dist/shared/curvy.df73166c.d.mts +0 -38
- package/dist/shared/curvy.df73166c.d.ts +0 -38
- package/dist/splines.cjs +0 -150
- package/dist/splines.d.cts +0 -27
- package/dist/splines.d.mts +0 -27
- package/dist/splines.d.ts +0 -27
- package/dist/splines.mjs +0 -138
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { g as ThreeDimensional } from '../shared/curvy.CT38g_II.mjs';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.mjs';
|
|
3
|
+
|
|
4
|
+
declare const Vector3TypeId: unique symbol;
|
|
5
|
+
type Vector3TypeId = typeof Vector3TypeId;
|
|
6
|
+
|
|
7
|
+
interface Vector3 extends Pipeable, ThreeDimensional<number> {
|
|
8
|
+
readonly [Vector3TypeId]: Vector3TypeId;
|
|
9
|
+
}
|
|
10
|
+
declare const isVector3: (v: unknown) => v is Vector3;
|
|
11
|
+
declare const make: {
|
|
12
|
+
(xyz: number): Vector3;
|
|
13
|
+
(x: number, yz: number): Vector3;
|
|
14
|
+
(x: number, y: number, z: number): Vector3;
|
|
15
|
+
};
|
|
16
|
+
declare const magnitude: (vector: Vector3) => number;
|
|
17
|
+
declare const normalize: (vector: Vector3) => Vector3;
|
|
18
|
+
declare const dot: {
|
|
19
|
+
(a: Vector3, b: Vector3): number;
|
|
20
|
+
(b: Vector3): (a: Vector3) => number;
|
|
21
|
+
};
|
|
22
|
+
declare const components: (v: Vector3) => [number, number, number];
|
|
23
|
+
declare const softmax: (v: Vector3) => Vector3;
|
|
24
|
+
declare const zero: Vector3;
|
|
25
|
+
declare const add: {
|
|
26
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
27
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
28
|
+
};
|
|
29
|
+
declare const subtract: {
|
|
30
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
31
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
32
|
+
};
|
|
33
|
+
declare const hadamard: {
|
|
34
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
35
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { type Vector3, add, components, dot, hadamard, isVector3, magnitude, make, normalize, softmax, subtract, zero };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { g as ThreeDimensional } from '../shared/curvy.CT38g_II.js';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.js';
|
|
3
|
+
|
|
4
|
+
declare const Vector3TypeId: unique symbol;
|
|
5
|
+
type Vector3TypeId = typeof Vector3TypeId;
|
|
6
|
+
|
|
7
|
+
interface Vector3 extends Pipeable, ThreeDimensional<number> {
|
|
8
|
+
readonly [Vector3TypeId]: Vector3TypeId;
|
|
9
|
+
}
|
|
10
|
+
declare const isVector3: (v: unknown) => v is Vector3;
|
|
11
|
+
declare const make: {
|
|
12
|
+
(xyz: number): Vector3;
|
|
13
|
+
(x: number, yz: number): Vector3;
|
|
14
|
+
(x: number, y: number, z: number): Vector3;
|
|
15
|
+
};
|
|
16
|
+
declare const magnitude: (vector: Vector3) => number;
|
|
17
|
+
declare const normalize: (vector: Vector3) => Vector3;
|
|
18
|
+
declare const dot: {
|
|
19
|
+
(a: Vector3, b: Vector3): number;
|
|
20
|
+
(b: Vector3): (a: Vector3) => number;
|
|
21
|
+
};
|
|
22
|
+
declare const components: (v: Vector3) => [number, number, number];
|
|
23
|
+
declare const softmax: (v: Vector3) => Vector3;
|
|
24
|
+
declare const zero: Vector3;
|
|
25
|
+
declare const add: {
|
|
26
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
27
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
28
|
+
};
|
|
29
|
+
declare const subtract: {
|
|
30
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
31
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
32
|
+
};
|
|
33
|
+
declare const hadamard: {
|
|
34
|
+
(a: Vector3, b: Vector3): Vector3;
|
|
35
|
+
(b: Vector3): (a: Vector3) => Vector3;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { type Vector3, add, components, dot, hadamard, isVector3, magnitude, make, normalize, softmax, subtract, zero };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { i as isVector3$1, m as make$1, a as magnitude$1, n as normalize$1, d as dot$1, c as components$1, s as softmax$1, b as add$1, e as subtract$1, h as hadamard$1 } from '../shared/curvy.D7bhnwZy.mjs';
|
|
2
|
+
import '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
|
|
4
|
+
const isVector3 = isVector3$1;
|
|
5
|
+
const make = make$1;
|
|
6
|
+
const magnitude = magnitude$1;
|
|
7
|
+
const normalize = normalize$1;
|
|
8
|
+
const dot = dot$1;
|
|
9
|
+
const components = components$1;
|
|
10
|
+
const softmax = softmax$1;
|
|
11
|
+
const zero = make(0);
|
|
12
|
+
const add = add$1;
|
|
13
|
+
const subtract = subtract$1;
|
|
14
|
+
const hadamard = hadamard$1;
|
|
15
|
+
|
|
16
|
+
export { add, components, dot, hadamard, isVector3, magnitude, make, normalize, softmax, subtract, zero };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { f as FourDimensional } from '../shared/curvy.CT38g_II.mjs';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.mjs';
|
|
3
|
+
|
|
4
|
+
declare const Vector4TypeId: unique symbol;
|
|
5
|
+
type Vector4TypeId = typeof Vector4TypeId;
|
|
6
|
+
|
|
7
|
+
interface Vector4 extends Pipeable, FourDimensional<number> {
|
|
8
|
+
readonly [Vector4TypeId]: Vector4TypeId;
|
|
9
|
+
}
|
|
10
|
+
declare const isVector4: (v: unknown) => v is Vector4;
|
|
11
|
+
declare const make: {
|
|
12
|
+
(xyzw: number): Vector4;
|
|
13
|
+
(x: number, yzw: number): Vector4;
|
|
14
|
+
(x: number, y: number, zw: number): Vector4;
|
|
15
|
+
(x: number, y: number, z: number, w: number): Vector4;
|
|
16
|
+
};
|
|
17
|
+
declare const magnitude: (vector: Vector4) => number;
|
|
18
|
+
declare const normalize: (vector: Vector4) => Vector4;
|
|
19
|
+
declare const dot: {
|
|
20
|
+
(a: Vector4, b: Vector4): number;
|
|
21
|
+
(b: Vector4): (a: Vector4) => number;
|
|
22
|
+
};
|
|
23
|
+
declare const components: (v: Vector4) => [number, number, number, number];
|
|
24
|
+
declare const softmax: (v: Vector4) => Vector4;
|
|
25
|
+
declare const zero: Vector4;
|
|
26
|
+
declare const add: {
|
|
27
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
28
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
29
|
+
};
|
|
30
|
+
declare const subtract: {
|
|
31
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
32
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
33
|
+
};
|
|
34
|
+
declare const hadamard: {
|
|
35
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
36
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { type Vector4, add, components, dot, hadamard, isVector4, magnitude, make, normalize, softmax, subtract, zero };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { f as FourDimensional } from '../shared/curvy.CT38g_II.js';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.js';
|
|
3
|
+
|
|
4
|
+
declare const Vector4TypeId: unique symbol;
|
|
5
|
+
type Vector4TypeId = typeof Vector4TypeId;
|
|
6
|
+
|
|
7
|
+
interface Vector4 extends Pipeable, FourDimensional<number> {
|
|
8
|
+
readonly [Vector4TypeId]: Vector4TypeId;
|
|
9
|
+
}
|
|
10
|
+
declare const isVector4: (v: unknown) => v is Vector4;
|
|
11
|
+
declare const make: {
|
|
12
|
+
(xyzw: number): Vector4;
|
|
13
|
+
(x: number, yzw: number): Vector4;
|
|
14
|
+
(x: number, y: number, zw: number): Vector4;
|
|
15
|
+
(x: number, y: number, z: number, w: number): Vector4;
|
|
16
|
+
};
|
|
17
|
+
declare const magnitude: (vector: Vector4) => number;
|
|
18
|
+
declare const normalize: (vector: Vector4) => Vector4;
|
|
19
|
+
declare const dot: {
|
|
20
|
+
(a: Vector4, b: Vector4): number;
|
|
21
|
+
(b: Vector4): (a: Vector4) => number;
|
|
22
|
+
};
|
|
23
|
+
declare const components: (v: Vector4) => [number, number, number, number];
|
|
24
|
+
declare const softmax: (v: Vector4) => Vector4;
|
|
25
|
+
declare const zero: Vector4;
|
|
26
|
+
declare const add: {
|
|
27
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
28
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
29
|
+
};
|
|
30
|
+
declare const subtract: {
|
|
31
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
32
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
33
|
+
};
|
|
34
|
+
declare const hadamard: {
|
|
35
|
+
(a: Vector4, b: Vector4): Vector4;
|
|
36
|
+
(b: Vector4): (a: Vector4) => Vector4;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { type Vector4, add, components, dot, hadamard, isVector4, magnitude, make, normalize, softmax, subtract, zero };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { i as isVector4$1, m as make$1, a as magnitude$1, n as normalize$1, d as dot$1, c as components$1, s as softmax$1, b as add$1, e as subtract$1, h as hadamard$1 } from '../shared/curvy.Cty3LrOR.mjs';
|
|
2
|
+
import '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
|
|
4
|
+
const isVector4 = isVector4$1;
|
|
5
|
+
const make = make$1;
|
|
6
|
+
const magnitude = magnitude$1;
|
|
7
|
+
const normalize = normalize$1;
|
|
8
|
+
const dot = dot$1;
|
|
9
|
+
const components = components$1;
|
|
10
|
+
const softmax = softmax$1;
|
|
11
|
+
const zero = make(0);
|
|
12
|
+
const add = add$1;
|
|
13
|
+
const subtract = subtract$1;
|
|
14
|
+
const hadamard = hadamard$1;
|
|
15
|
+
|
|
16
|
+
export { add, components, dot, hadamard, isVector4, magnitude, make, normalize, softmax, subtract, zero };
|
package/package.json
CHANGED
|
@@ -1,38 +1,85 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "curvy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Spline and Curve utilities",
|
|
5
5
|
"author": "Tim Morris <timthewebguy@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/tkofh/curvy#readme",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"type": "module",
|
|
10
|
-
"main": "./dist/curve.cjs",
|
|
11
|
-
"module": "./dist/curve.mjs",
|
|
12
|
-
"types": "./dist/curve.d.ts",
|
|
13
10
|
"exports": {
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"import": "./dist/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"types": "./dist/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
11
|
+
"./vector2": {
|
|
12
|
+
"types": "./dist/vector/vector2.d.ts",
|
|
13
|
+
"import": "./dist/vector/vector2.mjs"
|
|
14
|
+
},
|
|
15
|
+
"./vector3": {
|
|
16
|
+
"types": "./dist/vector/vector3.d.ts",
|
|
17
|
+
"import": "./dist/vector/vector3.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./vector4": {
|
|
20
|
+
"types": "./dist/vector/vector4.d.ts",
|
|
21
|
+
"import": "./dist/vector/vector4.mjs"
|
|
22
|
+
},
|
|
23
|
+
"./matrix2x2": {
|
|
24
|
+
"types": "./dist/matrix/matrix2x2.d.ts",
|
|
25
|
+
"import": "./dist/matrix/matrix2x2.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./matrix3x3": {
|
|
28
|
+
"types": "./dist/matrix/matrix3x3.d.ts",
|
|
29
|
+
"import": "./dist/matrix/matrix3x3.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./matrix4x4": {
|
|
32
|
+
"types": "./dist/matrix/matrix4x4.d.ts",
|
|
33
|
+
"import": "./dist/matrix/matrix4x4.mjs"
|
|
34
|
+
},
|
|
35
|
+
"./curve/linear2d": {
|
|
36
|
+
"types": "./dist/curve/linear2d.d.ts",
|
|
37
|
+
"import": "./dist/curve/linear2d.mjs"
|
|
38
|
+
},
|
|
39
|
+
"./curve/quadratic2d": {
|
|
40
|
+
"types": "./dist/curve/quadratic2d.d.ts",
|
|
41
|
+
"import": "./dist/curve/quadratic2d.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./curve/cubic2d": {
|
|
44
|
+
"types": "./dist/curve/cubic2d.d.ts",
|
|
45
|
+
"import": "./dist/curve/cubic2d.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./polynomial/linear": {
|
|
48
|
+
"types": "./dist/polynomial/linear.d.ts",
|
|
49
|
+
"import": "./dist/polynomial/linear.mjs"
|
|
50
|
+
},
|
|
51
|
+
"./polynomial/quadratic": {
|
|
52
|
+
"types": "./dist/polynomial/quadratic.d.ts",
|
|
53
|
+
"import": "./dist/polynomial/quadratic.mjs"
|
|
54
|
+
},
|
|
55
|
+
"./polynomial/cubic": {
|
|
56
|
+
"types": "./dist/polynomial/cubic.d.ts",
|
|
57
|
+
"import": "./dist/polynomial/cubic.mjs"
|
|
58
|
+
},
|
|
59
|
+
"./interval": {
|
|
60
|
+
"types": "./dist/interval.d.ts",
|
|
61
|
+
"import": "./dist/interval.mjs"
|
|
62
|
+
},
|
|
63
|
+
"./path/linear2d": {
|
|
64
|
+
"types": "./dist/path/linear2d.d.ts",
|
|
65
|
+
"import": "./dist/path/linear2d.mjs"
|
|
66
|
+
},
|
|
67
|
+
"./path/quadratic2d": {
|
|
68
|
+
"types": "./dist/path/quadratic2d.d.ts",
|
|
69
|
+
"import": "./dist/path/quadratic2d.mjs"
|
|
70
|
+
},
|
|
71
|
+
"./path/cubic2d": {
|
|
72
|
+
"types": "./dist/path/cubic2d.d.ts",
|
|
73
|
+
"import": "./dist/path/cubic2d.mjs"
|
|
74
|
+
},
|
|
75
|
+
"./splines/bezier2d": {
|
|
76
|
+
"types": "./dist/splines/bezier2d.d.ts",
|
|
77
|
+
"import": "./dist/splines/bezier2d.mjs"
|
|
33
78
|
}
|
|
34
79
|
},
|
|
35
|
-
"files": [
|
|
80
|
+
"files": [
|
|
81
|
+
"dist"
|
|
82
|
+
],
|
|
36
83
|
"publishConfig": {
|
|
37
84
|
"access": "public"
|
|
38
85
|
},
|
|
@@ -40,23 +87,19 @@
|
|
|
40
87
|
"type": "git",
|
|
41
88
|
"url": "git+https://github.com/tkofh/curvy.git"
|
|
42
89
|
},
|
|
43
|
-
"scripts": {
|
|
44
|
-
"build": "unbuild",
|
|
45
|
-
"test": "vitest",
|
|
46
|
-
"test:run": "vitest run",
|
|
47
|
-
"test:ui": "vitest --ui --coverage",
|
|
48
|
-
"prepublish": "pnpm test:run && pnpm build"
|
|
49
|
-
},
|
|
50
90
|
"bugs": {
|
|
51
91
|
"url": "https://github.com/tkofh/curvy/issues"
|
|
52
92
|
},
|
|
53
93
|
"devDependencies": {
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
94
|
+
"typescript": "^5.7.2",
|
|
95
|
+
"unbuild": "3.0.0-rc.8",
|
|
96
|
+
"vitest": "^2.1.6",
|
|
97
|
+
"@repo/tsconfig": "1.0.0"
|
|
58
98
|
},
|
|
59
|
-
"
|
|
60
|
-
"
|
|
99
|
+
"scripts": {
|
|
100
|
+
"build": "unbuild",
|
|
101
|
+
"test": "vitest run",
|
|
102
|
+
"test:watch": "vitest",
|
|
103
|
+
"typecheck": "tsc --noEmit"
|
|
61
104
|
}
|
|
62
|
-
}
|
|
105
|
+
}
|
package/dist/axis.cjs
DELETED
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const invariant = require('tiny-invariant');
|
|
4
|
-
const splines = require('./splines.cjs');
|
|
5
|
-
|
|
6
|
-
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
7
|
-
|
|
8
|
-
const invariant__default = /*#__PURE__*/_interopDefaultCompat(invariant);
|
|
9
|
-
|
|
10
|
-
const UNIT_INTERVAL = [0, 1];
|
|
11
|
-
function createLinearPolynomial(coefficients, domain = UNIT_INTERVAL) {
|
|
12
|
-
const [a, b] = coefficients;
|
|
13
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
14
|
-
let root = a === 0 ? null : b === 0 ? 0 : -b / a;
|
|
15
|
-
if (root !== null && (root < domain[0] || root > domain[1])) {
|
|
16
|
-
root = null;
|
|
17
|
-
}
|
|
18
|
-
const range = a >= 0 ? [a * domain[0] + b, a * domain[1] + b] : [a * domain[1] + b, a * domain[0] + b];
|
|
19
|
-
const solve = (x) => {
|
|
20
|
-
invariant__default(x >= domain[0] && x <= domain[1], "x out of domain");
|
|
21
|
-
return a * x + b;
|
|
22
|
-
};
|
|
23
|
-
const solveInverse = (y) => {
|
|
24
|
-
invariant__default(y >= range[0] && y <= range[1], "y out of range");
|
|
25
|
-
return a === 0 ? 0 : (y - b) / a;
|
|
26
|
-
};
|
|
27
|
-
return {
|
|
28
|
-
domain,
|
|
29
|
-
range,
|
|
30
|
-
monotonicity: a === 0 ? "constant" : a > 0 ? "increasing" : "decreasing",
|
|
31
|
-
coefficients,
|
|
32
|
-
root,
|
|
33
|
-
solve,
|
|
34
|
-
solveInverse
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function createQuadraticRootSolver(coefficients, defaultDomain, range) {
|
|
38
|
-
const [a, b, c] = coefficients;
|
|
39
|
-
if (a !== 0) {
|
|
40
|
-
return function solveInverse(y, domain = defaultDomain) {
|
|
41
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
42
|
-
invariant__default(y >= range[0] && y <= range[1], "y out of range");
|
|
43
|
-
const discriminant = b ** 2 - 4 * a * (c - y);
|
|
44
|
-
if (discriminant < 0) {
|
|
45
|
-
return [];
|
|
46
|
-
}
|
|
47
|
-
if (discriminant === 0) {
|
|
48
|
-
const root = -b / (2 * a);
|
|
49
|
-
return root < domain[0] || root > domain[1] ? [] : [root];
|
|
50
|
-
}
|
|
51
|
-
const sqrtDiscriminant = Math.sqrt(discriminant);
|
|
52
|
-
const denominator = 2 * a;
|
|
53
|
-
const left = (-b - sqrtDiscriminant) / denominator;
|
|
54
|
-
const right = (-b + sqrtDiscriminant) / denominator;
|
|
55
|
-
const leftInDomain = left >= domain[0] && left <= domain[1];
|
|
56
|
-
const rightInDomain = right >= domain[0] && right <= domain[1];
|
|
57
|
-
if (leftInDomain && rightInDomain) {
|
|
58
|
-
return left < right ? [left, right] : [right, left];
|
|
59
|
-
}
|
|
60
|
-
if (leftInDomain) {
|
|
61
|
-
return [left];
|
|
62
|
-
}
|
|
63
|
-
if (rightInDomain) {
|
|
64
|
-
return [right];
|
|
65
|
-
}
|
|
66
|
-
return [];
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
if (b !== 0) {
|
|
70
|
-
return function solveInverse(y, domain = defaultDomain) {
|
|
71
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
72
|
-
invariant__default(y >= range[0] && y <= range[1], "y out of range");
|
|
73
|
-
const root = -(c - y) / b;
|
|
74
|
-
return root < domain[0] || root > domain[1] ? [] : [root];
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
return function solveInverse() {
|
|
78
|
-
return [];
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
function createQuadraticPolynomial(coefficients, domain = UNIT_INTERVAL) {
|
|
82
|
-
const [a, b, c] = coefficients;
|
|
83
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
84
|
-
const derivative = createLinearPolynomial([2 * a, b], domain);
|
|
85
|
-
const extreme = derivative.root;
|
|
86
|
-
const solve = (x) => {
|
|
87
|
-
invariant__default(x >= domain[0] && x <= domain[1], "x out of domain");
|
|
88
|
-
return a * x ** 2 + b * x + c;
|
|
89
|
-
};
|
|
90
|
-
const rangeCandidates = extreme === null ? [solve(domain[0]), solve(domain[1])] : [solve(domain[0]), solve(extreme), solve(domain[1])];
|
|
91
|
-
const range = [
|
|
92
|
-
Math.min(...rangeCandidates),
|
|
93
|
-
Math.max(...rangeCandidates)
|
|
94
|
-
];
|
|
95
|
-
const solveInverse = createQuadraticRootSolver(coefficients, domain, range);
|
|
96
|
-
const roots = range[0] > 0 || range[1] < 0 ? [] : solveInverse(0);
|
|
97
|
-
return {
|
|
98
|
-
domain,
|
|
99
|
-
range,
|
|
100
|
-
coefficients,
|
|
101
|
-
monotonicity: a !== 0 ? "none" : b === 0 ? "constant" : b > 0 ? "increasing" : "decreasing",
|
|
102
|
-
extreme,
|
|
103
|
-
roots,
|
|
104
|
-
derivative,
|
|
105
|
-
solve,
|
|
106
|
-
solveInverse
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
const TWO_THIRDS_PI = 2 * Math.PI / 3;
|
|
110
|
-
function createCubicRootSolver(coefficients, defaultDomain, range) {
|
|
111
|
-
if (coefficients[0] === 0) {
|
|
112
|
-
return createQuadraticRootSolver(
|
|
113
|
-
[coefficients[1], coefficients[2], coefficients[3]],
|
|
114
|
-
defaultDomain,
|
|
115
|
-
range
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
const oneOverA = 1 / coefficients[0];
|
|
119
|
-
const a0 = coefficients[1] * oneOverA;
|
|
120
|
-
const a1 = coefficients[2] * oneOverA;
|
|
121
|
-
const a2OverThree = a0 / 3;
|
|
122
|
-
const q = a1 / 3 - a0 ** 2 / 9;
|
|
123
|
-
const r0 = a1 * a0 / 6 - a0 ** 3 / 27;
|
|
124
|
-
return function solveInverse(y, domain = defaultDomain) {
|
|
125
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
126
|
-
invariant__default(y >= range[0] && y <= range[1], "y out of range");
|
|
127
|
-
const a02 = (coefficients[3] - y) * oneOverA;
|
|
128
|
-
const r = r0 - a02 * 0.5;
|
|
129
|
-
const discriminant = q ** 3 + r ** 2;
|
|
130
|
-
if (discriminant > 0) {
|
|
131
|
-
const a = Math.cbrt(Math.abs(r) + Math.sqrt(discriminant));
|
|
132
|
-
const root = (r < 0 ? q / a - a : a - q / a) - a2OverThree;
|
|
133
|
-
return root < domain[0] || root > domain[1] ? [] : [root];
|
|
134
|
-
}
|
|
135
|
-
const theta = Math.acos(r / Math.sqrt((-q) ** 3)) / 3;
|
|
136
|
-
const twoRootQ = 2 * Math.sqrt(-q);
|
|
137
|
-
const root1 = twoRootQ * Math.cos(theta - TWO_THIRDS_PI) - a2OverThree;
|
|
138
|
-
const root2 = twoRootQ * Math.cos(theta) - a2OverThree;
|
|
139
|
-
const root3 = twoRootQ * Math.cos(theta + TWO_THIRDS_PI) - a2OverThree;
|
|
140
|
-
const candidates = [root1, root2, root3];
|
|
141
|
-
const roots = [];
|
|
142
|
-
for (const candidate of candidates) {
|
|
143
|
-
if (candidate >= domain[0] && candidate <= domain[1] && !roots.includes(candidate)) {
|
|
144
|
-
roots.push(candidate);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
roots.sort((a, b) => a - b);
|
|
148
|
-
return roots;
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
function getMonotonicity(extrema, derivative, domain) {
|
|
152
|
-
if (derivative.coefficients[0] === 0 && derivative.coefficients[1] === 0 && derivative.coefficients[2] === 0) {
|
|
153
|
-
return "constant";
|
|
154
|
-
}
|
|
155
|
-
let hasInnerExtrema = false;
|
|
156
|
-
for (const extreme of extrema) {
|
|
157
|
-
if (extreme > domain[0] && extreme > domain[1]) {
|
|
158
|
-
hasInnerExtrema = true;
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (hasInnerExtrema) {
|
|
163
|
-
return "none";
|
|
164
|
-
}
|
|
165
|
-
let test = derivative.solve(domain[0]);
|
|
166
|
-
if (test === 0) {
|
|
167
|
-
test = derivative.solve((domain[0] + domain[1]) * 0.5);
|
|
168
|
-
}
|
|
169
|
-
return Math.sign(test) > 0 ? "increasing" : "decreasing";
|
|
170
|
-
}
|
|
171
|
-
function createCubicPolynomial(coefficients, domain = UNIT_INTERVAL) {
|
|
172
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
173
|
-
const [a, b, c, d] = coefficients;
|
|
174
|
-
const derivative = createQuadraticPolynomial([3 * a, 2 * b, c], domain);
|
|
175
|
-
const extrema = derivative.roots.length === 1 && derivative.coefficients[0] !== 0 ? [] : derivative.roots;
|
|
176
|
-
const solve = (x) => {
|
|
177
|
-
invariant__default(x >= domain[0] && x <= domain[1], "x out of domain");
|
|
178
|
-
return a * x ** 3 + b * x ** 2 + c * x + d;
|
|
179
|
-
};
|
|
180
|
-
const rangeCandidates = [
|
|
181
|
-
solve(domain[0]),
|
|
182
|
-
...extrema.map((extreme) => solve(extreme)),
|
|
183
|
-
solve(domain[1])
|
|
184
|
-
];
|
|
185
|
-
const range = [
|
|
186
|
-
Math.min(...rangeCandidates),
|
|
187
|
-
Math.max(...rangeCandidates)
|
|
188
|
-
];
|
|
189
|
-
const solveInverse = createCubicRootSolver(coefficients, domain, range);
|
|
190
|
-
const roots = range[0] > 0 || range[1] < 0 ? [] : solveInverse(0, domain);
|
|
191
|
-
const monotonicity = getMonotonicity(extrema, derivative, domain);
|
|
192
|
-
return {
|
|
193
|
-
domain,
|
|
194
|
-
range,
|
|
195
|
-
monotonicity,
|
|
196
|
-
coefficients,
|
|
197
|
-
extrema,
|
|
198
|
-
roots,
|
|
199
|
-
derivative,
|
|
200
|
-
solve,
|
|
201
|
-
solveInverse
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function getCurveExtrema(lookup) {
|
|
206
|
-
const extremaLookup = new Map(lookup);
|
|
207
|
-
const extremaCandidates = Array.from(extremaLookup.keys());
|
|
208
|
-
for (const [index, t] of extremaCandidates.entries()) {
|
|
209
|
-
if (index === 0 || index === extremaCandidates.length - 1) {
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const previous = extremaLookup.get(extremaCandidates[index - 1]);
|
|
213
|
-
const current = extremaLookup.get(t);
|
|
214
|
-
const next = extremaLookup.get(extremaCandidates[index + 1]);
|
|
215
|
-
if (previous <= current && current < next || previous >= current && current > next) {
|
|
216
|
-
extremaLookup.delete(t);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
const extrema = Array.from(extremaLookup.keys());
|
|
220
|
-
return extrema;
|
|
221
|
-
}
|
|
222
|
-
function createCurveAxis(coefficients) {
|
|
223
|
-
invariant__default(coefficients.length > 0, "Curve must have at least one segment");
|
|
224
|
-
const segments = [];
|
|
225
|
-
const extremaLookup = /* @__PURE__ */ new Map();
|
|
226
|
-
let monotonicity = "none";
|
|
227
|
-
const normalizedToCurve = coefficients.length;
|
|
228
|
-
const curveToNormalized = 1 / coefficients.length;
|
|
229
|
-
for (let i = 0; i < coefficients.length; i++) {
|
|
230
|
-
const segment = createCubicPolynomial(coefficients[i], UNIT_INTERVAL);
|
|
231
|
-
segments.push(segment);
|
|
232
|
-
extremaLookup.set(i * curveToNormalized, segment.solve(0));
|
|
233
|
-
for (const extreme of segment.extrema) {
|
|
234
|
-
extremaLookup.set(
|
|
235
|
-
(i + extreme) * curveToNormalized,
|
|
236
|
-
segment.solve(extreme)
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
if (i === 0) {
|
|
240
|
-
monotonicity = segment.monotonicity;
|
|
241
|
-
} else if (monotonicity !== segment.monotonicity) {
|
|
242
|
-
monotonicity = "none";
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
extremaLookup.set(1, segments[segments.length - 1].solve(1));
|
|
246
|
-
const extrema = getCurveExtrema(extremaLookup);
|
|
247
|
-
const range = [
|
|
248
|
-
Math.min(...extremaLookup.values()),
|
|
249
|
-
Math.max(...extremaLookup.values())
|
|
250
|
-
];
|
|
251
|
-
const getSegmentAndInput = (t) => {
|
|
252
|
-
invariant__default(t >= 0 && t <= 1, "t out of range");
|
|
253
|
-
if (t === 1) {
|
|
254
|
-
return { segment: segments[segments.length - 1], input: 1 };
|
|
255
|
-
}
|
|
256
|
-
const curveT = t * normalizedToCurve;
|
|
257
|
-
const index = Math.floor(curveT);
|
|
258
|
-
const segment = segments[index];
|
|
259
|
-
const input = curveT - index;
|
|
260
|
-
return { segment, input };
|
|
261
|
-
};
|
|
262
|
-
const solvePosition = (t) => {
|
|
263
|
-
const { segment, input } = getSegmentAndInput(t);
|
|
264
|
-
return segment.solve(input);
|
|
265
|
-
};
|
|
266
|
-
const solveVelocity = (t) => {
|
|
267
|
-
const { segment, input } = getSegmentAndInput(t);
|
|
268
|
-
return segment.derivative.solve(input);
|
|
269
|
-
};
|
|
270
|
-
const solveT = (position, domain) => {
|
|
271
|
-
invariant__default(
|
|
272
|
-
position >= range[0] && position <= range[1],
|
|
273
|
-
"position out of range"
|
|
274
|
-
);
|
|
275
|
-
invariant__default(domain[0] <= domain[1], "invalid domain");
|
|
276
|
-
const result = [];
|
|
277
|
-
for (const [index, segment] of segments.entries()) {
|
|
278
|
-
if (position >= segment.range[0] && position <= segment.range[1]) {
|
|
279
|
-
const t = segment.solveInverse(position, domain);
|
|
280
|
-
for (const tValue of t) {
|
|
281
|
-
result.push((index + tValue) * curveToNormalized);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return result;
|
|
286
|
-
};
|
|
287
|
-
return {
|
|
288
|
-
domain: UNIT_INTERVAL,
|
|
289
|
-
range,
|
|
290
|
-
monotonicity,
|
|
291
|
-
extrema,
|
|
292
|
-
segments,
|
|
293
|
-
solvePosition,
|
|
294
|
-
solveVelocity,
|
|
295
|
-
solveT
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
function createBasisAxis(parameters, triplicateEndpoints = true) {
|
|
299
|
-
return createCurveAxis(
|
|
300
|
-
splines.splines.basis(triplicateEndpoints).chunkCoefficients(parameters)
|
|
301
|
-
);
|
|
302
|
-
}
|
|
303
|
-
function createBezierAxis(parameters) {
|
|
304
|
-
return createCurveAxis(splines.splines.bezier.chunkCoefficients(parameters));
|
|
305
|
-
}
|
|
306
|
-
function createCardinalAxis(parameters, a = 0.5, duplicateEndpoints = true) {
|
|
307
|
-
return createCurveAxis(
|
|
308
|
-
splines.splines.cardinal(a, duplicateEndpoints).chunkCoefficients(parameters)
|
|
309
|
-
);
|
|
310
|
-
}
|
|
311
|
-
function createCatmullRomAxis(parameters, duplicateEndpoints = true) {
|
|
312
|
-
return createCurveAxis(
|
|
313
|
-
splines.splines.catmullRom(duplicateEndpoints).chunkCoefficients(parameters)
|
|
314
|
-
);
|
|
315
|
-
}
|
|
316
|
-
function createHermiteAxis(parameters) {
|
|
317
|
-
return createCurveAxis(splines.splines.hermite.chunkCoefficients(parameters));
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
exports.createBasisAxis = createBasisAxis;
|
|
321
|
-
exports.createBezierAxis = createBezierAxis;
|
|
322
|
-
exports.createCardinalAxis = createCardinalAxis;
|
|
323
|
-
exports.createCatmullRomAxis = createCatmullRomAxis;
|
|
324
|
-
exports.createCurveAxis = createCurveAxis;
|
|
325
|
-
exports.createHermiteAxis = createHermiteAxis;
|
package/dist/axis.d.cts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { I as Interval, M as Monotonicity, C as CubicPolynomial, a as CubicCoefficients } from './shared/curvy.df73166c.cjs';
|
|
2
|
-
|
|
3
|
-
type CurveAxis = {
|
|
4
|
-
readonly domain: Interval;
|
|
5
|
-
readonly range: Interval;
|
|
6
|
-
readonly monotonicity: Monotonicity;
|
|
7
|
-
readonly extrema: ReadonlyArray<number>;
|
|
8
|
-
readonly segments: ReadonlyArray<CubicPolynomial>;
|
|
9
|
-
readonly solvePosition: (t: number) => number;
|
|
10
|
-
readonly solveVelocity: (t: number) => number;
|
|
11
|
-
readonly solveT: (position: number, domain: Interval) => ReadonlyArray<number>;
|
|
12
|
-
};
|
|
13
|
-
declare function createCurveAxis(coefficients: ReadonlyArray<CubicCoefficients>): CurveAxis;
|
|
14
|
-
declare function createBasisAxis(parameters: ReadonlyArray<number>, triplicateEndpoints?: boolean): CurveAxis;
|
|
15
|
-
declare function createBezierAxis(parameters: ReadonlyArray<number>): CurveAxis;
|
|
16
|
-
declare function createCardinalAxis(parameters: ReadonlyArray<number>, a?: number, duplicateEndpoints?: boolean): CurveAxis;
|
|
17
|
-
declare function createCatmullRomAxis(parameters: ReadonlyArray<number>, duplicateEndpoints?: boolean): CurveAxis;
|
|
18
|
-
declare function createHermiteAxis(parameters: ReadonlyArray<number>): CurveAxis;
|
|
19
|
-
|
|
20
|
-
export { type CurveAxis, createBasisAxis, createBezierAxis, createCardinalAxis, createCatmullRomAxis, createCurveAxis, createHermiteAxis };
|