curvy 0.3.3 → 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 +78 -37
- package/dist/axis.cjs +0 -14
- 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 -3
- 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 -365
- package/dist/curve.d.cts +0 -20
- package/dist/curve.d.mts +0 -20
- package/dist/curve.d.ts +0 -20
- package/dist/curve.mjs +0 -354
- package/dist/shared/curvy.262f6070.cjs +0 -16
- package/dist/shared/curvy.7876e09e.mjs +0 -323
- package/dist/shared/curvy.9cd8b44c.mjs +0 -13
- package/dist/shared/curvy.db103082.cjs +0 -335
- 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,60 @@
|
|
|
1
|
+
import { length as length$2, solve as solve$2 } from '../curve/cubic2d.mjs';
|
|
2
|
+
import { d as dual, r as round, P as Pipeable } from '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
import { unit } from '../interval.mjs';
|
|
4
|
+
import '../shared/curvy.DmVFTi0N.mjs';
|
|
5
|
+
import '../polynomial/cubic.mjs';
|
|
6
|
+
import '../shared/curvy.CLzGuqek.mjs';
|
|
7
|
+
import '../shared/curvy.DgRsieUW.mjs';
|
|
8
|
+
import '../polynomial/quadratic.mjs';
|
|
9
|
+
import '../vector/vector2.mjs';
|
|
10
|
+
import '../shared/curvy.DOLqYbKE.mjs';
|
|
11
|
+
import '../curve/quadratic2d.mjs';
|
|
12
|
+
import '../polynomial/linear.mjs';
|
|
13
|
+
import '../curve/linear2d.mjs';
|
|
14
|
+
|
|
15
|
+
const CubicPath2dTypeId = Symbol("curvy/path/cubic2d");
|
|
16
|
+
class CubicPath2dImpl extends Pipeable {
|
|
17
|
+
[CubicPath2dTypeId] = CubicPath2dTypeId;
|
|
18
|
+
curves;
|
|
19
|
+
constructor(curves) {
|
|
20
|
+
super();
|
|
21
|
+
this.curves = curves;
|
|
22
|
+
}
|
|
23
|
+
[Symbol.iterator]() {
|
|
24
|
+
return this.curves[Symbol.iterator]();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const isCubicPath2d$1 = (p) => typeof p === "object" && p !== null && CubicPath2dTypeId in p;
|
|
28
|
+
const fromCurves$1 = (...curves) => new CubicPath2dImpl(curves);
|
|
29
|
+
const fromCurveArray$1 = (curves) => new CubicPath2dImpl(curves);
|
|
30
|
+
const append$1 = dual(
|
|
31
|
+
2,
|
|
32
|
+
(p, c) => fromCurveArray$1([...p, c])
|
|
33
|
+
);
|
|
34
|
+
const length$1 = (p) => {
|
|
35
|
+
let length2 = 0;
|
|
36
|
+
for (const curve of p) {
|
|
37
|
+
length2 += length$2(curve, unit);
|
|
38
|
+
}
|
|
39
|
+
return round(length2);
|
|
40
|
+
};
|
|
41
|
+
const solve$1 = dual(2, (p, u) => {
|
|
42
|
+
const curves = p instanceof CubicPath2dImpl ? p.curves : [...p];
|
|
43
|
+
if (u === 1) {
|
|
44
|
+
const last = curves.at(-1);
|
|
45
|
+
return solve$2(last, 1);
|
|
46
|
+
}
|
|
47
|
+
const t = u * curves.length;
|
|
48
|
+
const i = Math.floor(t);
|
|
49
|
+
const curve = curves[i];
|
|
50
|
+
return solve$2(curve, t - i);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const fromCurves = fromCurves$1;
|
|
54
|
+
const fromCurveArray = fromCurveArray$1;
|
|
55
|
+
const isCubicPath2d = isCubicPath2d$1;
|
|
56
|
+
const append = append$1;
|
|
57
|
+
const length = length$1;
|
|
58
|
+
const solve = solve$1;
|
|
59
|
+
|
|
60
|
+
export { append, fromCurveArray, fromCurves, isCubicPath2d, length, solve };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LinearCurve2d } from '../curve/linear2d.mjs';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.mjs';
|
|
3
|
+
import { Vector2 } from '../vector/vector2.mjs';
|
|
4
|
+
import '../shared/curvy.CT38g_II.mjs';
|
|
5
|
+
import '../interval.mjs';
|
|
6
|
+
import '../shared/curvy.Bxxwly94.mjs';
|
|
7
|
+
import '../vector/vector3.mjs';
|
|
8
|
+
import '../vector/vector4.mjs';
|
|
9
|
+
|
|
10
|
+
declare const LinearPath2dTypeId: unique symbol;
|
|
11
|
+
type LinearPath2dTypeId = typeof LinearPath2dTypeId;
|
|
12
|
+
|
|
13
|
+
interface LinearPath2d extends Pipeable, Iterable<LinearCurve2d> {
|
|
14
|
+
readonly [LinearPath2dTypeId]: LinearPath2dTypeId;
|
|
15
|
+
}
|
|
16
|
+
declare const fromCurves: (...curves: ReadonlyArray<LinearCurve2d>) => LinearPath2d;
|
|
17
|
+
declare const fromCurveArray: (curves: ReadonlyArray<LinearCurve2d>) => LinearPath2d;
|
|
18
|
+
declare const isLinearPath2d: (p: unknown) => p is LinearPath2d;
|
|
19
|
+
declare const append: {
|
|
20
|
+
(c: LinearCurve2d): (p: LinearPath2d) => LinearPath2d;
|
|
21
|
+
(p: LinearPath2d, c: LinearCurve2d): LinearPath2d;
|
|
22
|
+
};
|
|
23
|
+
declare const length: (p: LinearPath2d) => number;
|
|
24
|
+
declare const solve: {
|
|
25
|
+
(u: number): (p: LinearPath2d) => Vector2;
|
|
26
|
+
(p: LinearPath2d, u: number): Vector2;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type LinearPath2d, append, fromCurveArray, fromCurves, isLinearPath2d, length, solve };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LinearCurve2d } from '../curve/linear2d.js';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.js';
|
|
3
|
+
import { Vector2 } from '../vector/vector2.js';
|
|
4
|
+
import '../shared/curvy.CT38g_II.js';
|
|
5
|
+
import '../interval.js';
|
|
6
|
+
import '../shared/curvy.CO0Wclt0.js';
|
|
7
|
+
import '../vector/vector3.js';
|
|
8
|
+
import '../vector/vector4.js';
|
|
9
|
+
|
|
10
|
+
declare const LinearPath2dTypeId: unique symbol;
|
|
11
|
+
type LinearPath2dTypeId = typeof LinearPath2dTypeId;
|
|
12
|
+
|
|
13
|
+
interface LinearPath2d extends Pipeable, Iterable<LinearCurve2d> {
|
|
14
|
+
readonly [LinearPath2dTypeId]: LinearPath2dTypeId;
|
|
15
|
+
}
|
|
16
|
+
declare const fromCurves: (...curves: ReadonlyArray<LinearCurve2d>) => LinearPath2d;
|
|
17
|
+
declare const fromCurveArray: (curves: ReadonlyArray<LinearCurve2d>) => LinearPath2d;
|
|
18
|
+
declare const isLinearPath2d: (p: unknown) => p is LinearPath2d;
|
|
19
|
+
declare const append: {
|
|
20
|
+
(c: LinearCurve2d): (p: LinearPath2d) => LinearPath2d;
|
|
21
|
+
(p: LinearPath2d, c: LinearCurve2d): LinearPath2d;
|
|
22
|
+
};
|
|
23
|
+
declare const length: (p: LinearPath2d) => number;
|
|
24
|
+
declare const solve: {
|
|
25
|
+
(u: number): (p: LinearPath2d) => Vector2;
|
|
26
|
+
(p: LinearPath2d, u: number): Vector2;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type LinearPath2d, append, fromCurveArray, fromCurves, isLinearPath2d, length, solve };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { length as length$2, solve as solve$2 } from '../curve/linear2d.mjs';
|
|
2
|
+
import { d as dual, r as round, P as Pipeable } from '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
import { unit } from '../interval.mjs';
|
|
4
|
+
import '../polynomial/linear.mjs';
|
|
5
|
+
import '../shared/curvy.DgRsieUW.mjs';
|
|
6
|
+
import '../vector/vector2.mjs';
|
|
7
|
+
import '../shared/curvy.DOLqYbKE.mjs';
|
|
8
|
+
|
|
9
|
+
const LinearPath2dTypeId = Symbol("curvy/path/linear2d");
|
|
10
|
+
class LinearPath2dImpl extends Pipeable {
|
|
11
|
+
[LinearPath2dTypeId] = LinearPath2dTypeId;
|
|
12
|
+
curves;
|
|
13
|
+
constructor(curves) {
|
|
14
|
+
super();
|
|
15
|
+
this.curves = curves;
|
|
16
|
+
}
|
|
17
|
+
[Symbol.iterator]() {
|
|
18
|
+
return this.curves[Symbol.iterator]();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const isLinearPath2d$1 = (p) => typeof p === "object" && p !== null && LinearPath2dTypeId in p;
|
|
22
|
+
const fromCurves$1 = (...curves) => new LinearPath2dImpl(curves);
|
|
23
|
+
const fromCurveArray$1 = (curves) => new LinearPath2dImpl(curves);
|
|
24
|
+
const append$1 = dual(
|
|
25
|
+
2,
|
|
26
|
+
(p, c) => fromCurveArray$1([...p, c])
|
|
27
|
+
);
|
|
28
|
+
const length$1 = (p) => {
|
|
29
|
+
let length2 = 0;
|
|
30
|
+
for (const curve of p) {
|
|
31
|
+
length2 += length$2(curve, unit);
|
|
32
|
+
}
|
|
33
|
+
return round(length2);
|
|
34
|
+
};
|
|
35
|
+
const solve$1 = dual(2, (p, u) => {
|
|
36
|
+
const curves = p instanceof LinearPath2dImpl ? p.curves : [...p];
|
|
37
|
+
if (u === 1) {
|
|
38
|
+
const last = curves.at(-1);
|
|
39
|
+
return solve$2(last, 1);
|
|
40
|
+
}
|
|
41
|
+
const t = u * curves.length;
|
|
42
|
+
const i = Math.floor(t);
|
|
43
|
+
const curve = curves[i];
|
|
44
|
+
return solve$2(curve, t - i);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const fromCurves = fromCurves$1;
|
|
48
|
+
const fromCurveArray = fromCurveArray$1;
|
|
49
|
+
const isLinearPath2d = isLinearPath2d$1;
|
|
50
|
+
const append = append$1;
|
|
51
|
+
const length = length$1;
|
|
52
|
+
const solve = solve$1;
|
|
53
|
+
|
|
54
|
+
export { append, fromCurveArray, fromCurves, isLinearPath2d, length, solve };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { QuadraticCurve2d } from '../curve/quadratic2d.mjs';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.mjs';
|
|
3
|
+
import { Vector2 } from '../vector/vector2.mjs';
|
|
4
|
+
import '../shared/curvy.CT38g_II.mjs';
|
|
5
|
+
import '../interval.mjs';
|
|
6
|
+
import '../shared/curvy.Bxxwly94.mjs';
|
|
7
|
+
import '../vector/vector3.mjs';
|
|
8
|
+
import '../vector/vector4.mjs';
|
|
9
|
+
|
|
10
|
+
declare const QuadraticPath2dTypeId: unique symbol;
|
|
11
|
+
type QuadraticPath2dTypeId = typeof QuadraticPath2dTypeId;
|
|
12
|
+
|
|
13
|
+
interface QuadraticPath2d extends Pipeable, Iterable<QuadraticCurve2d> {
|
|
14
|
+
readonly [QuadraticPath2dTypeId]: QuadraticPath2dTypeId;
|
|
15
|
+
}
|
|
16
|
+
declare const fromCurves: (...curves: ReadonlyArray<QuadraticCurve2d>) => QuadraticPath2d;
|
|
17
|
+
declare const fromCurveArray: (curves: ReadonlyArray<QuadraticCurve2d>) => QuadraticPath2d;
|
|
18
|
+
declare const isQuadraticPath2d: (p: unknown) => p is QuadraticPath2d;
|
|
19
|
+
declare const append: {
|
|
20
|
+
(c: QuadraticCurve2d): (p: QuadraticPath2d) => QuadraticPath2d;
|
|
21
|
+
(p: QuadraticPath2d, c: QuadraticCurve2d): QuadraticPath2d;
|
|
22
|
+
};
|
|
23
|
+
declare const length: (p: QuadraticPath2d) => number;
|
|
24
|
+
declare const solve: {
|
|
25
|
+
(u: number): (p: QuadraticPath2d) => Vector2;
|
|
26
|
+
(p: QuadraticPath2d, u: number): Vector2;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type QuadraticPath2d, append, fromCurveArray, fromCurves, isQuadraticPath2d, length, solve };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { QuadraticCurve2d } from '../curve/quadratic2d.js';
|
|
2
|
+
import { P as Pipeable } from '../shared/curvy.BN-oFBsc.js';
|
|
3
|
+
import { Vector2 } from '../vector/vector2.js';
|
|
4
|
+
import '../shared/curvy.CT38g_II.js';
|
|
5
|
+
import '../interval.js';
|
|
6
|
+
import '../shared/curvy.CO0Wclt0.js';
|
|
7
|
+
import '../vector/vector3.js';
|
|
8
|
+
import '../vector/vector4.js';
|
|
9
|
+
|
|
10
|
+
declare const QuadraticPath2dTypeId: unique symbol;
|
|
11
|
+
type QuadraticPath2dTypeId = typeof QuadraticPath2dTypeId;
|
|
12
|
+
|
|
13
|
+
interface QuadraticPath2d extends Pipeable, Iterable<QuadraticCurve2d> {
|
|
14
|
+
readonly [QuadraticPath2dTypeId]: QuadraticPath2dTypeId;
|
|
15
|
+
}
|
|
16
|
+
declare const fromCurves: (...curves: ReadonlyArray<QuadraticCurve2d>) => QuadraticPath2d;
|
|
17
|
+
declare const fromCurveArray: (curves: ReadonlyArray<QuadraticCurve2d>) => QuadraticPath2d;
|
|
18
|
+
declare const isQuadraticPath2d: (p: unknown) => p is QuadraticPath2d;
|
|
19
|
+
declare const append: {
|
|
20
|
+
(c: QuadraticCurve2d): (p: QuadraticPath2d) => QuadraticPath2d;
|
|
21
|
+
(p: QuadraticPath2d, c: QuadraticCurve2d): QuadraticPath2d;
|
|
22
|
+
};
|
|
23
|
+
declare const length: (p: QuadraticPath2d) => number;
|
|
24
|
+
declare const solve: {
|
|
25
|
+
(u: number): (p: QuadraticPath2d) => Vector2;
|
|
26
|
+
(p: QuadraticPath2d, u: number): Vector2;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type QuadraticPath2d, append, fromCurveArray, fromCurves, isQuadraticPath2d, length, solve };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { length as length$2, solve as solve$2 } from '../curve/quadratic2d.mjs';
|
|
2
|
+
import { d as dual, r as round, P as Pipeable } from '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
import { unit } from '../interval.mjs';
|
|
4
|
+
import '../shared/curvy.DmVFTi0N.mjs';
|
|
5
|
+
import '../polynomial/linear.mjs';
|
|
6
|
+
import '../shared/curvy.DgRsieUW.mjs';
|
|
7
|
+
import '../polynomial/quadratic.mjs';
|
|
8
|
+
import '../shared/curvy.CLzGuqek.mjs';
|
|
9
|
+
import '../vector/vector2.mjs';
|
|
10
|
+
import '../shared/curvy.DOLqYbKE.mjs';
|
|
11
|
+
import '../curve/linear2d.mjs';
|
|
12
|
+
|
|
13
|
+
const QuadraticPath2dTypeId = Symbol(
|
|
14
|
+
"curvy/path/quadratic2d"
|
|
15
|
+
);
|
|
16
|
+
class QuadraticPath2dImpl extends Pipeable {
|
|
17
|
+
[QuadraticPath2dTypeId] = QuadraticPath2dTypeId;
|
|
18
|
+
curves;
|
|
19
|
+
constructor(curves) {
|
|
20
|
+
super();
|
|
21
|
+
this.curves = curves;
|
|
22
|
+
}
|
|
23
|
+
[Symbol.iterator]() {
|
|
24
|
+
return this.curves[Symbol.iterator]();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const isQuadraticPath2d$1 = (p) => typeof p === "object" && p !== null && QuadraticPath2dTypeId in p;
|
|
28
|
+
const fromCurves$1 = (...curves) => new QuadraticPath2dImpl(curves);
|
|
29
|
+
const fromCurveArray$1 = (curves) => new QuadraticPath2dImpl(curves);
|
|
30
|
+
const append$1 = dual(
|
|
31
|
+
2,
|
|
32
|
+
(p, c) => fromCurveArray$1([...p, c])
|
|
33
|
+
);
|
|
34
|
+
const length$1 = (p) => {
|
|
35
|
+
let length2 = 0;
|
|
36
|
+
for (const curve of p) {
|
|
37
|
+
length2 += length$2(curve, unit);
|
|
38
|
+
}
|
|
39
|
+
return round(length2);
|
|
40
|
+
};
|
|
41
|
+
const solve$1 = dual(2, (p, u) => {
|
|
42
|
+
const curves = p instanceof QuadraticPath2dImpl ? p.curves : [...p];
|
|
43
|
+
if (u === 1) {
|
|
44
|
+
const last = curves.at(-1);
|
|
45
|
+
return solve$2(last, 1);
|
|
46
|
+
}
|
|
47
|
+
const t = u * curves.length;
|
|
48
|
+
const i = Math.floor(t);
|
|
49
|
+
const curve = curves[i];
|
|
50
|
+
return solve$2(curve, t - i);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const fromCurves = fromCurves$1;
|
|
54
|
+
const fromCurveArray = fromCurveArray$1;
|
|
55
|
+
const isQuadraticPath2d = isQuadraticPath2d$1;
|
|
56
|
+
const append = append$1;
|
|
57
|
+
const length = length$1;
|
|
58
|
+
const solve = solve$1;
|
|
59
|
+
|
|
60
|
+
export { append, fromCurveArray, fromCurves, isQuadraticPath2d, length, solve };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.mjs';
|
|
2
|
+
import '../interval.mjs';
|
|
3
|
+
import '../vector/vector4.mjs';
|
|
4
|
+
export { C as CubicPolynomial, d as derivative, g as domain, e as extrema, f as fromVector, i as isCubicPolynomial, l as length, m as make, c as monotonicity, h as range, r as roots, s as solve, a as solveInverse, b as toInverseSolver, t as toSolver } from '../shared/curvy.Bxxwly94.mjs';
|
|
5
|
+
import '../shared/curvy.CT38g_II.mjs';
|
|
6
|
+
import '../vector/vector2.mjs';
|
|
7
|
+
import '../vector/vector3.mjs';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.js';
|
|
2
|
+
import '../interval.js';
|
|
3
|
+
import '../vector/vector4.js';
|
|
4
|
+
export { C as CubicPolynomial, d as derivative, g as domain, e as extrema, f as fromVector, i as isCubicPolynomial, l as length, m as make, c as monotonicity, h as range, r as roots, s as solve, a as solveInverse, b as toInverseSolver, t as toSolver } from '../shared/curvy.CO0Wclt0.js';
|
|
5
|
+
import '../shared/curvy.CT38g_II.js';
|
|
6
|
+
import '../vector/vector2.js';
|
|
7
|
+
import '../vector/vector3.js';
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { d as dual, r as round } from '../shared/curvy.ChkqgKuv.mjs';
|
|
2
|
+
import { size, filter, fromMinMax, scaleShift, biunit } from '../interval.mjs';
|
|
3
|
+
import { G as GL32_W0, a as GL32_X0, b as GL32_W1, c as GL32_X1, d as GL32_W2, e as GL32_X2, f as GL32_W3, g as GL32_X3, h as GL32_W4, i as GL32_X4, j as GL32_W5, k as GL32_X5, l as GL32_W6, m as GL32_X6, n as GL32_W7, o as GL32_X7, p as GL32_W8, q as GL32_X8, r as GL32_W9, s as GL32_X9, t as GL32_W10, u as GL32_X10, v as GL32_W11, w as GL32_X11, x as GL32_W12, y as GL32_X12, z as GL32_W13, A as GL32_X13, B as GL32_W14, C as GL32_X14, D as GL32_W15, E as GL32_X15 } from '../shared/curvy.DmVFTi0N.mjs';
|
|
4
|
+
import { C as CubicPolynomialImpl, a as CubicPolynomialTypeId, s as solveInverse$2, m as make$2, r as roots$2, b as monotonicity$3, g as guaranteedMonotonicityFromComparison, l as length$3, c as solve$2 } from '../shared/curvy.CLzGuqek.mjs';
|
|
5
|
+
import { m as monotonicity$2, a as make$3, l as length$2 } from '../shared/curvy.DgRsieUW.mjs';
|
|
6
|
+
|
|
7
|
+
const make$1 = (c0 = 0, c1 = 0, c2 = 0, c3 = 0) => new CubicPolynomialImpl(c0, c1, c2, c3);
|
|
8
|
+
const isCubicPolynomial$1 = (v) => typeof v === "object" && v !== null && CubicPolynomialTypeId in v;
|
|
9
|
+
const fromVector$1 = (v) => new CubicPolynomialImpl(v.x, v.y, v.z, v.w);
|
|
10
|
+
const solve$1 = dual(
|
|
11
|
+
2,
|
|
12
|
+
(p, x) => round(p.c0 + x * p.c1 + x ** 2 * p.c2 + x ** 3 * p.c3)
|
|
13
|
+
);
|
|
14
|
+
const toSolver$1 = (p) => (x) => solve$1(p, x);
|
|
15
|
+
const solveInverse$1 = dual(2, (self, y) => {
|
|
16
|
+
if (self.c3 === 0) {
|
|
17
|
+
return solveInverse$2(
|
|
18
|
+
make$2(self.c0, self.c1, self.c2),
|
|
19
|
+
0
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
const shift = self.c2 / (3 * self.c3);
|
|
23
|
+
const d0 = self.c2 ** 2 - 3 * self.c3 * self.c1;
|
|
24
|
+
const d1 = 2 * self.c2 ** 3 - 9 * self.c3 * self.c2 * self.c1 + 27 * self.c3 ** 2 * (self.c0 - y);
|
|
25
|
+
const p = -d0 / (3 * self.c3 ** 2);
|
|
26
|
+
const q = d1 / (27 * self.c3 ** 3);
|
|
27
|
+
const discriminant = round(-(4 * p ** 3 + 27 * q ** 2), 12);
|
|
28
|
+
const roots2 = /* @__PURE__ */ new Set();
|
|
29
|
+
if (discriminant > 0) {
|
|
30
|
+
const r = 2 * Math.sqrt(-p / 3);
|
|
31
|
+
const theta = Math.acos(3 * q / (2 * p) * Math.sqrt(-3 / p)) / 3;
|
|
32
|
+
const offset = 2 * Math.PI / 3;
|
|
33
|
+
roots2.add(round(r * Math.cos(theta + offset) - shift));
|
|
34
|
+
roots2.add(round(r * Math.cos(theta) - shift));
|
|
35
|
+
roots2.add(round(r * Math.cos(theta - offset) - shift));
|
|
36
|
+
} else if (discriminant < 0) {
|
|
37
|
+
const u = Math.sqrt(q ** 2 / 4 + p ** 3 / 27);
|
|
38
|
+
const u1 = Math.cbrt(-q / 2 + u);
|
|
39
|
+
const u2 = Math.cbrt(-q / 2 - u);
|
|
40
|
+
roots2.add(round(u1 + u2 - shift));
|
|
41
|
+
} else if (d0 === 0) {
|
|
42
|
+
roots2.add(round(-shift));
|
|
43
|
+
} else {
|
|
44
|
+
roots2.add(
|
|
45
|
+
round((9 * self.c3 * (self.c0 - y) - self.c2 * self.c1) / (2 * d0))
|
|
46
|
+
);
|
|
47
|
+
roots2.add(
|
|
48
|
+
round(
|
|
49
|
+
(4 * self.c3 * self.c2 * self.c1 - 9 * self.c3 ** 2 * (self.c0 - y) - self.c2 ** 3) / (self.c3 * d0)
|
|
50
|
+
)
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
return Array.from(roots2).toSorted(
|
|
54
|
+
(a, b) => a - b
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
const toInverseSolver$1 = (p) => (y) => solveInverse$1(p, y);
|
|
58
|
+
const derivative$1 = (p) => make$2(p.c1, p.c2 * 2, p.c3 * 3);
|
|
59
|
+
const roots$1 = (p) => solveInverse$1(p, 0);
|
|
60
|
+
const extrema$1 = (p) => roots$2(derivative$1(p));
|
|
61
|
+
const monotonicity$1 = dual(
|
|
62
|
+
(args) => isCubicPolynomial$1(args[0]),
|
|
63
|
+
(p, i) => {
|
|
64
|
+
if (p.c3 === 0 && p.c2 === 0 && p.c1 === 0) {
|
|
65
|
+
return "constant";
|
|
66
|
+
}
|
|
67
|
+
if (p.c3 === 0 && p.c2 === 0) {
|
|
68
|
+
return monotonicity$2(make$3(p.c0, p.c1));
|
|
69
|
+
}
|
|
70
|
+
if (i === void 0) {
|
|
71
|
+
return "none";
|
|
72
|
+
}
|
|
73
|
+
if (size(i) === 0) {
|
|
74
|
+
return "constant";
|
|
75
|
+
}
|
|
76
|
+
if (p.c3 === 0) {
|
|
77
|
+
return monotonicity$3(make$2(p.c0, p.c1, p.c2), i);
|
|
78
|
+
}
|
|
79
|
+
const e = filter(i, extrema$1(p), {
|
|
80
|
+
includeStart: false,
|
|
81
|
+
includeEnd: false
|
|
82
|
+
});
|
|
83
|
+
if (e.length > 0) {
|
|
84
|
+
return "none";
|
|
85
|
+
}
|
|
86
|
+
return guaranteedMonotonicityFromComparison(
|
|
87
|
+
solve$1(p, i.start),
|
|
88
|
+
solve$1(p, i.end)
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
const domain$1 = dual(
|
|
93
|
+
2,
|
|
94
|
+
(p, range2) => fromMinMax(
|
|
95
|
+
...solveInverse$1(p, range2.start),
|
|
96
|
+
...solveInverse$1(p, range2.end)
|
|
97
|
+
)
|
|
98
|
+
);
|
|
99
|
+
const range$1 = dual(
|
|
100
|
+
2,
|
|
101
|
+
(p, domain2) => fromMinMax(
|
|
102
|
+
solve$1(p, domain2.start),
|
|
103
|
+
solve$1(p, domain2.end),
|
|
104
|
+
...filter(domain2, extrema$1(p)).map((e) => solve$1(p, e))
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
const length$1 = dual(2, (p, domain2) => {
|
|
108
|
+
if (size(domain2) === 0) {
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
if (p.c3 === 0) {
|
|
112
|
+
if (p.c2 === 0) {
|
|
113
|
+
return length$2(make$3(p.c0, p.c1), domain2);
|
|
114
|
+
}
|
|
115
|
+
return length$3(make$2(p.c0, p.c1, p.c2), domain2);
|
|
116
|
+
}
|
|
117
|
+
const d = derivative$1(p);
|
|
118
|
+
const { scale, shift } = scaleShift(biunit, domain2);
|
|
119
|
+
return round(
|
|
120
|
+
(GL32_W0 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X0) ** 2) + GL32_W0 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X0) ** 2) + GL32_W1 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X1) ** 2) + GL32_W1 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X1) ** 2) + GL32_W2 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X2) ** 2) + GL32_W2 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X2) ** 2) + GL32_W3 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X3) ** 2) + GL32_W3 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X3) ** 2) + GL32_W4 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X4) ** 2) + GL32_W4 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X4) ** 2) + GL32_W5 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X5) ** 2) + GL32_W5 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X5) ** 2) + GL32_W6 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X6) ** 2) + GL32_W6 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X6) ** 2) + GL32_W7 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X7) ** 2) + GL32_W7 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X7) ** 2) + GL32_W8 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X8) ** 2) + GL32_W8 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X8) ** 2) + GL32_W9 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X9) ** 2) + GL32_W9 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X9) ** 2) + GL32_W10 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X10) ** 2) + GL32_W10 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X10) ** 2) + GL32_W11 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X11) ** 2) + GL32_W11 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X11) ** 2) + GL32_W12 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X12) ** 2) + GL32_W12 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X12) ** 2) + GL32_W13 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X13) ** 2) + GL32_W13 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X13) ** 2) + GL32_W14 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X14) ** 2) + GL32_W14 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X14) ** 2) + GL32_W15 * Math.sqrt(1 + solve$2(d, shift + scale * -GL32_X15) ** 2) + GL32_W15 * Math.sqrt(1 + solve$2(d, shift + scale * GL32_X15) ** 2)) * scale
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const isCubicPolynomial = isCubicPolynomial$1;
|
|
125
|
+
const make = make$1;
|
|
126
|
+
const fromVector = fromVector$1;
|
|
127
|
+
const solve = solve$1;
|
|
128
|
+
const toSolver = toSolver$1;
|
|
129
|
+
const solveInverse = solveInverse$1;
|
|
130
|
+
const toInverseSolver = toInverseSolver$1;
|
|
131
|
+
const derivative = derivative$1;
|
|
132
|
+
const roots = roots$1;
|
|
133
|
+
const extrema = extrema$1;
|
|
134
|
+
const monotonicity = monotonicity$1;
|
|
135
|
+
const domain = domain$1;
|
|
136
|
+
const range = range$1;
|
|
137
|
+
const length = length$1;
|
|
138
|
+
|
|
139
|
+
export { derivative, domain, extrema, fromVector, isCubicPolynomial, length, make, monotonicity, range, roots, solve, solveInverse, toInverseSolver, toSolver };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.mjs';
|
|
2
|
+
import '../interval.mjs';
|
|
3
|
+
import '../vector/vector2.mjs';
|
|
4
|
+
export { L as LinearPolynomial, O as antiderivative, P as domain, G as fromVector, E as isLinearPolynomial, S as length, F as make, N as monotonicity, R as range, M as root, H as solve, J as solveInverse, K as toInverseSolver, I as toSolver } from '../shared/curvy.Bxxwly94.mjs';
|
|
5
|
+
import '../shared/curvy.CT38g_II.mjs';
|
|
6
|
+
import '../vector/vector3.mjs';
|
|
7
|
+
import '../vector/vector4.mjs';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.js';
|
|
2
|
+
import '../interval.js';
|
|
3
|
+
import '../vector/vector2.js';
|
|
4
|
+
export { L as LinearPolynomial, O as antiderivative, P as domain, G as fromVector, E as isLinearPolynomial, S as length, F as make, N as monotonicity, R as range, M as root, H as solve, J as solveInverse, K as toInverseSolver, I as toSolver } from '../shared/curvy.CO0Wclt0.js';
|
|
5
|
+
import '../shared/curvy.CT38g_II.js';
|
|
6
|
+
import '../vector/vector3.js';
|
|
7
|
+
import '../vector/vector4.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { i as isLinearPolynomial$1, a as make$1, f as fromVector$1, c as solve$1, t as toSolver$1, s as solveInverse$1, d as toInverseSolver$1, m as monotonicity$1, e as antiderivative$1, g as domain$1, r as range$1, l as length$1 } from '../shared/curvy.DgRsieUW.mjs';
|
|
2
|
+
import '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
import '../interval.mjs';
|
|
4
|
+
|
|
5
|
+
const isLinearPolynomial = isLinearPolynomial$1;
|
|
6
|
+
const make = make$1;
|
|
7
|
+
const fromVector = fromVector$1;
|
|
8
|
+
const solve = solve$1;
|
|
9
|
+
const toSolver = toSolver$1;
|
|
10
|
+
const solveInverse = solveInverse$1;
|
|
11
|
+
const toInverseSolver = toInverseSolver$1;
|
|
12
|
+
const root = (p) => solveInverse$1(p, 0);
|
|
13
|
+
const monotonicity = monotonicity$1;
|
|
14
|
+
const antiderivative = antiderivative$1;
|
|
15
|
+
const domain = domain$1;
|
|
16
|
+
const range = range$1;
|
|
17
|
+
const length = length$1;
|
|
18
|
+
|
|
19
|
+
export { antiderivative, domain, fromVector, isLinearPolynomial, length, make, monotonicity, range, root, solve, solveInverse, toInverseSolver, toSolver };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.mjs';
|
|
2
|
+
import '../interval.mjs';
|
|
3
|
+
import '../vector/vector3.mjs';
|
|
4
|
+
export { Q as QuadraticPolynomial, z as antiderivative, v as derivative, A as domain, x as extreme, n as fromVector, j as isQuadraticPolynomial, D as length, k as make, y as monotonicity, B as range, w as roots, o as solve, q as solveInverse, u as toInverseSolver, p as toSolver } from '../shared/curvy.Bxxwly94.mjs';
|
|
5
|
+
import '../shared/curvy.CT38g_II.mjs';
|
|
6
|
+
import '../vector/vector2.mjs';
|
|
7
|
+
import '../vector/vector4.mjs';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import '../shared/curvy.BN-oFBsc.js';
|
|
2
|
+
import '../interval.js';
|
|
3
|
+
import '../vector/vector3.js';
|
|
4
|
+
export { Q as QuadraticPolynomial, z as antiderivative, v as derivative, A as domain, x as extreme, n as fromVector, j as isQuadraticPolynomial, D as length, k as make, y as monotonicity, B as range, w as roots, o as solve, q as solveInverse, u as toInverseSolver, p as toSolver } from '../shared/curvy.CO0Wclt0.js';
|
|
5
|
+
import '../shared/curvy.CT38g_II.js';
|
|
6
|
+
import '../vector/vector2.js';
|
|
7
|
+
import '../vector/vector4.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { i as isQuadraticPolynomial$1, m as make$1, f as fromVector$1, c as solve$1, t as toSolver$1, s as solveInverse$1, d as toInverseSolver$1, e as derivative$1, r as roots$1, h as extreme$1, b as monotonicity$1, j as antiderivative$1, k as domain$1, n as range$1, l as length$1 } from '../shared/curvy.CLzGuqek.mjs';
|
|
2
|
+
import '../shared/curvy.ChkqgKuv.mjs';
|
|
3
|
+
import '../interval.mjs';
|
|
4
|
+
import '../shared/curvy.DgRsieUW.mjs';
|
|
5
|
+
|
|
6
|
+
const isQuadraticPolynomial = isQuadraticPolynomial$1;
|
|
7
|
+
const make = make$1;
|
|
8
|
+
const fromVector = fromVector$1;
|
|
9
|
+
const solve = solve$1;
|
|
10
|
+
const toSolver = toSolver$1;
|
|
11
|
+
const solveInverse = solveInverse$1;
|
|
12
|
+
const toInverseSolver = toInverseSolver$1;
|
|
13
|
+
const derivative = derivative$1;
|
|
14
|
+
const roots = roots$1;
|
|
15
|
+
const extreme = extreme$1;
|
|
16
|
+
const monotonicity = monotonicity$1;
|
|
17
|
+
const antiderivative = antiderivative$1;
|
|
18
|
+
const domain = domain$1;
|
|
19
|
+
const range = range$1;
|
|
20
|
+
const length = length$1;
|
|
21
|
+
|
|
22
|
+
export { antiderivative, derivative, domain, extreme, fromVector, isQuadraticPolynomial, length, make, monotonicity, range, roots, solve, solveInverse, toInverseSolver, toSolver };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { o as toThreeDimensionalIndex, d as determinant$1, m as make$1 } from './curvy.C-sUk7ux.mjs';
|
|
2
|
+
import { d as dual, r as round, i as invariant, P as Pipeable } from './curvy.ChkqgKuv.mjs';
|
|
3
|
+
import { c as components, m as make$2, d as dot } from './curvy.D7bhnwZy.mjs';
|
|
4
|
+
|
|
5
|
+
const Matrix3x3TypeId = Symbol.for("curvy/matrix3x3");
|
|
6
|
+
class Matrix3x3Impl extends Pipeable {
|
|
7
|
+
[Matrix3x3TypeId] = Matrix3x3TypeId;
|
|
8
|
+
m00;
|
|
9
|
+
m01;
|
|
10
|
+
m02;
|
|
11
|
+
m10;
|
|
12
|
+
m11;
|
|
13
|
+
m12;
|
|
14
|
+
m20;
|
|
15
|
+
m21;
|
|
16
|
+
m22;
|
|
17
|
+
constructor(m00 = 0, m01 = 0, m02 = 0, m10 = 0, m11 = 0, m12 = 0, m20 = 0, m21 = 0, m22 = 0) {
|
|
18
|
+
super();
|
|
19
|
+
this.m00 = round(m00);
|
|
20
|
+
this.m01 = round(m01);
|
|
21
|
+
this.m02 = round(m02);
|
|
22
|
+
this.m10 = round(m10);
|
|
23
|
+
this.m11 = round(m11);
|
|
24
|
+
this.m12 = round(m12);
|
|
25
|
+
this.m20 = round(m20);
|
|
26
|
+
this.m21 = round(m21);
|
|
27
|
+
this.m22 = round(m22);
|
|
28
|
+
}
|
|
29
|
+
get [Symbol.toStringTag]() {
|
|
30
|
+
return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
|
|
31
|
+
}
|
|
32
|
+
get [Symbol.for("nodejs.util.inspect.custom")]() {
|
|
33
|
+
return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
|
|
34
|
+
}
|
|
35
|
+
[Symbol.hasInstance](m) {
|
|
36
|
+
return isMatrix3x3(m);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const isMatrix3x3 = (m) => typeof m === "object" && m !== null && Matrix3x3TypeId in m;
|
|
40
|
+
const make = (m00 = 0, m01 = m00, m02 = m01, m10 = m02, m11 = m10, m12 = m11, m20 = m12, m21 = m20, m22 = m21) => {
|
|
41
|
+
return new Matrix3x3Impl(m00, m01, m02, m10, m11, m12, m20, m21, m22);
|
|
42
|
+
};
|
|
43
|
+
const fromRows = (v0, v1, v2) => new Matrix3x3Impl(v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, v2.x, v2.y, v2.z);
|
|
44
|
+
const fromColumns = (v0, v1, v2) => new Matrix3x3Impl(v0.x, v1.x, v2.x, v0.y, v1.y, v2.y, v0.z, v1.z, v2.z);
|
|
45
|
+
const setRow = dual(
|
|
46
|
+
3,
|
|
47
|
+
(m, row, v) => fromRows(
|
|
48
|
+
...toRows(m).with(toThreeDimensionalIndex(row), v)
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
const setColumn = dual(
|
|
52
|
+
3,
|
|
53
|
+
(m, column, v) => fromColumns(
|
|
54
|
+
...toColumns(m).with(toThreeDimensionalIndex(column), v)
|
|
55
|
+
)
|
|
56
|
+
);
|
|
57
|
+
const determinant = (m) => round(
|
|
58
|
+
m.m00 * determinant$1(minor(m, 0, 0)) - m.m01 * determinant$1(minor(m, 0, 1)) + m.m02 * determinant$1(minor(m, 0, 2))
|
|
59
|
+
);
|
|
60
|
+
const minor = dual(3, (m, row, column) => {
|
|
61
|
+
const [v0, v1] = toRows(m).toSpliced(toThreeDimensionalIndex(row), 1);
|
|
62
|
+
const columnIndex = toThreeDimensionalIndex(column);
|
|
63
|
+
const [m00, m01] = components(v0).toSpliced(columnIndex, 1);
|
|
64
|
+
const [m10, m11] = components(v1).toSpliced(columnIndex, 1);
|
|
65
|
+
return make$1(m00, m01, m10, m11);
|
|
66
|
+
});
|
|
67
|
+
const vectorProductLeft = dual(2, (m, v) => {
|
|
68
|
+
const [v0, v1, v2] = toRows(m);
|
|
69
|
+
return make$2(
|
|
70
|
+
dot(v0, v),
|
|
71
|
+
dot(v1, v),
|
|
72
|
+
dot(v2, v)
|
|
73
|
+
);
|
|
74
|
+
});
|
|
75
|
+
const vectorProductRight = dual(2, (m, v) => {
|
|
76
|
+
const [v0, v1, v2] = toColumns(m);
|
|
77
|
+
return make$2(
|
|
78
|
+
dot(v, v0),
|
|
79
|
+
dot(v, v1),
|
|
80
|
+
dot(v, v2)
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
const solveSystem = dual(2, (m, v) => {
|
|
84
|
+
const inverseDeterminant = 1 / determinant(m);
|
|
85
|
+
invariant(
|
|
86
|
+
Number.isFinite(inverseDeterminant),
|
|
87
|
+
"cannot solve system when coefficient matrix determinant is zero"
|
|
88
|
+
);
|
|
89
|
+
return make$2(
|
|
90
|
+
determinant(setColumn(m, 0, v)) * inverseDeterminant,
|
|
91
|
+
determinant(setColumn(m, 1, v)) * inverseDeterminant,
|
|
92
|
+
determinant(setColumn(m, 2, v)) * inverseDeterminant
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
const toRows = (m) => [
|
|
96
|
+
make$2(m.m00, m.m01, m.m02),
|
|
97
|
+
make$2(m.m10, m.m11, m.m12),
|
|
98
|
+
make$2(m.m20, m.m21, m.m22)
|
|
99
|
+
];
|
|
100
|
+
const toColumns = (m) => [
|
|
101
|
+
make$2(m.m00, m.m10, m.m20),
|
|
102
|
+
make$2(m.m01, m.m11, m.m21),
|
|
103
|
+
make$2(m.m02, m.m12, m.m22)
|
|
104
|
+
];
|
|
105
|
+
const rowVector = dual(
|
|
106
|
+
2,
|
|
107
|
+
(m, row) => toRows(m)[toThreeDimensionalIndex(row)]
|
|
108
|
+
);
|
|
109
|
+
const columnVector = dual(
|
|
110
|
+
2,
|
|
111
|
+
(m, column) => toColumns(m)[toThreeDimensionalIndex(column)]
|
|
112
|
+
);
|
|
113
|
+
const transpose = (m) => fromColumns(...toRows(m));
|
|
114
|
+
const reverseRows = (m) => {
|
|
115
|
+
const [v0, v1, v2] = toRows(m);
|
|
116
|
+
return fromRows(v2, v1, v0);
|
|
117
|
+
};
|
|
118
|
+
const reverseColumns = (m) => {
|
|
119
|
+
const [v0, v1, v2] = toColumns(m);
|
|
120
|
+
return fromColumns(v2, v1, v0);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export { fromColumns as a, setColumn as b, minor as c, determinant as d, vectorProductRight as e, fromRows as f, solveSystem as g, toColumns as h, isMatrix3x3 as i, columnVector as j, transpose as k, reverseRows as l, make as m, reverseColumns as n, rowVector as r, setRow as s, toRows as t, vectorProductLeft as v };
|