curvy 2.0.0-alpha.13 → 2.0.0-alpha.14

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.
Files changed (93) hide show
  1. package/dist/characteristic/index.mjs +1 -1
  2. package/dist/curve/cubic2d.d.ts +102 -3
  3. package/dist/curve/curve2d.d.ts +81 -0
  4. package/dist/curve/index.mjs +1 -1
  5. package/dist/curve/linear2d.d.ts +122 -3
  6. package/dist/curve/quadratic2d.d.ts +103 -3
  7. package/dist/curve/rationalCubic2d.d.ts +100 -38
  8. package/dist/interval/index.mjs +2 -2
  9. package/dist/matrix/index.mjs +47 -1
  10. package/dist/matrix/index.mjs.map +1 -1
  11. package/dist/matrix/matrix3x3.d.ts +87 -1
  12. package/dist/matrix/matrix4x4.d.ts +57 -6
  13. package/dist/matrix/traits.d.ts +34 -0
  14. package/dist/monotonicity/index.mjs +1 -1
  15. package/dist/monotonicity/monotonicity.d.ts +25 -0
  16. package/dist/number.d.ts +53 -0
  17. package/dist/number.mjs +56 -1
  18. package/dist/number.mjs.map +1 -1
  19. package/dist/path/cubic2d.d.ts +22 -0
  20. package/dist/path/index.mjs +25 -149
  21. package/dist/path/index.mjs.map +1 -1
  22. package/dist/path/linear2d.d.ts +24 -0
  23. package/dist/path/path2d.d.ts +54 -0
  24. package/dist/path/quadratic2d.d.ts +22 -0
  25. package/dist/path/rationalCubic2d.d.ts +21 -0
  26. package/dist/polynomial/index.mjs +2 -2
  27. package/dist/shared/affine2d-Dvna84gc.mjs +332 -0
  28. package/dist/shared/affine2d-Dvna84gc.mjs.map +1 -0
  29. package/dist/shared/{characteristic-BkEr-rr8.mjs → characteristic--7nC4Q_a.mjs} +4 -5
  30. package/dist/shared/characteristic--7nC4Q_a.mjs.map +1 -0
  31. package/dist/shared/{cubic-BL6dpuHh.mjs → cubic-BiGuAnZ0.mjs} +56 -27
  32. package/dist/shared/cubic-BiGuAnZ0.mjs.map +1 -0
  33. package/dist/shared/{interval-Dm35Xhy4.mjs → interval-Dcqpo73t.mjs} +5 -5
  34. package/dist/shared/interval-Dcqpo73t.mjs.map +1 -0
  35. package/dist/shared/{interval2d-AtneyI45.mjs → interval2d-C2Pk66-2.mjs} +3 -3
  36. package/dist/shared/{interval2d-AtneyI45.mjs.map → interval2d-C2Pk66-2.mjs.map} +1 -1
  37. package/dist/shared/matrix3x3.internal-Cod-r7H3.mjs +233 -0
  38. package/dist/shared/matrix3x3.internal-Cod-r7H3.mjs.map +1 -0
  39. package/dist/shared/{matrix4x4-BWmf4lZM.mjs → matrix4x4-BrqgYZCD.mjs} +72 -223
  40. package/dist/shared/matrix4x4-BrqgYZCD.mjs.map +1 -0
  41. package/dist/shared/monotonicity-DNxBoC7F.mjs +64 -0
  42. package/dist/shared/monotonicity-DNxBoC7F.mjs.map +1 -0
  43. package/dist/shared/{quadratic-DPrUsFCp.mjs → quadratic-BmMqkvxx.mjs} +2 -2
  44. package/dist/shared/{quadratic-DPrUsFCp.mjs.map → quadratic-BmMqkvxx.mjs.map} +1 -1
  45. package/dist/shared/{rationalCubic2d-CeHgpNht.mjs → rationalCubic2d-CZSwwKtS.mjs} +591 -125
  46. package/dist/shared/rationalCubic2d-CZSwwKtS.mjs.map +1 -0
  47. package/dist/shared/{rationalCubic2d-H1J2Fjyy.mjs → rationalCubic2d-bveuGqBZ.mjs} +282 -326
  48. package/dist/shared/rationalCubic2d-bveuGqBZ.mjs.map +1 -0
  49. package/dist/shared/{solution-B2JdOZpe.mjs → solution-BW0BBMXI.mjs} +22 -6
  50. package/dist/shared/solution-BW0BBMXI.mjs.map +1 -0
  51. package/dist/shared/{vector2-CSkaMXvp.mjs → vector2-DuA3EmfL.mjs} +5 -3
  52. package/dist/shared/vector2-DuA3EmfL.mjs.map +1 -0
  53. package/dist/shared/{vector2.internal-DP1nTBdS.mjs → vector2.internal-rPnW0RCx.mjs} +10 -5
  54. package/dist/shared/vector2.internal-rPnW0RCx.mjs.map +1 -0
  55. package/dist/shared/{vector3-CR2LPV03.mjs → vector3-oxtggkDp.mjs} +2 -2
  56. package/dist/shared/{vector3-CR2LPV03.mjs.map → vector3-oxtggkDp.mjs.map} +1 -1
  57. package/dist/shared/vector3.internal-CfWHl9SG.mjs +135 -0
  58. package/dist/shared/vector3.internal-CfWHl9SG.mjs.map +1 -0
  59. package/dist/shared/{vector4-PO_7EYd-.mjs → vector4-DGHuCvTV.mjs} +2 -2
  60. package/dist/shared/{vector4-PO_7EYd-.mjs.map → vector4-DGHuCvTV.mjs.map} +1 -1
  61. package/dist/shared/vector4.internal-DH5DzNYO.mjs +116 -0
  62. package/dist/shared/vector4.internal-DH5DzNYO.mjs.map +1 -0
  63. package/dist/solution/index.mjs +1 -1
  64. package/dist/solution/solution.d.ts +16 -0
  65. package/dist/splines/basis2d.d.ts +64 -0
  66. package/dist/splines/bezier2d.d.ts +72 -0
  67. package/dist/splines/cardinal2d.d.ts +78 -0
  68. package/dist/splines/hermite2d.d.ts +76 -0
  69. package/dist/splines/index.mjs +109 -15
  70. package/dist/splines/index.mjs.map +1 -1
  71. package/dist/splines/linear2d.d.ts +65 -0
  72. package/dist/splines/rationalBezier2d.d.ts +76 -0
  73. package/dist/transform/affine2d.d.ts +339 -0
  74. package/dist/transform/affine2d.internal.d.ts +2 -0
  75. package/dist/transform/index.d.ts +3 -0
  76. package/dist/transform/index.mjs +2 -0
  77. package/dist/transform/traits.d.ts +19 -0
  78. package/dist/vector/index.mjs +3 -3
  79. package/dist/vector/vector2.d.ts +49 -0
  80. package/package.json +5 -1
  81. package/dist/shared/characteristic-BkEr-rr8.mjs.map +0 -1
  82. package/dist/shared/cubic-BL6dpuHh.mjs.map +0 -1
  83. package/dist/shared/interval-Dm35Xhy4.mjs.map +0 -1
  84. package/dist/shared/matrix4x4-BWmf4lZM.mjs.map +0 -1
  85. package/dist/shared/monotonicity-BdebFOtv.mjs +0 -34
  86. package/dist/shared/monotonicity-BdebFOtv.mjs.map +0 -1
  87. package/dist/shared/rationalCubic2d-CeHgpNht.mjs.map +0 -1
  88. package/dist/shared/rationalCubic2d-H1J2Fjyy.mjs.map +0 -1
  89. package/dist/shared/solution-B2JdOZpe.mjs.map +0 -1
  90. package/dist/shared/vector2-CSkaMXvp.mjs.map +0 -1
  91. package/dist/shared/vector2.internal-DP1nTBdS.mjs.map +0 -1
  92. package/dist/shared/vector4.internal-BJ1QN2Ck.mjs +0 -246
  93. package/dist/shared/vector4.internal-BJ1QN2Ck.mjs.map +0 -1
@@ -0,0 +1,233 @@
1
+ import { Pipeable, dual, invariant } from "../utils.mjs";
2
+ import { RELATIVE_TOLERANCE, coincident } from "../number.mjs";
3
+ import { g as make$2, i as dot } from "./vector2.internal-rPnW0RCx.mjs";
4
+ import { g as make$3, i as dot$1, n as components } from "./vector3.internal-CfWHl9SG.mjs";
5
+ import { c as one, s as none } from "./solution-BW0BBMXI.mjs";
6
+ //#region src/dimensions.ts
7
+ function toIndex(input) {
8
+ if (typeof input === "number") {
9
+ invariant(input >= 0 && input <= 3, "Index out of bounds");
10
+ return input;
11
+ }
12
+ if (input === "x") return 0;
13
+ if (input === "y") return 1;
14
+ if (input === "z") return 2;
15
+ if (input === "w") return 3;
16
+ invariant(false, "Invalid component");
17
+ }
18
+ const toTwoDimensionalIndex = toIndex;
19
+ const toThreeDimensionalIndex = toIndex;
20
+ const toFourDimensionalIndex = toIndex;
21
+ //#endregion
22
+ //#region src/matrix/matrix2x2.internal.ts
23
+ const Matrix2x2TypeId = Symbol.for("curvy/matrix2x2");
24
+ var Matrix2x2Impl = class extends Pipeable {
25
+ [Matrix2x2TypeId] = Matrix2x2TypeId;
26
+ m00;
27
+ m01;
28
+ m10;
29
+ m11;
30
+ constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {
31
+ super();
32
+ this.m00 = m00;
33
+ this.m01 = m01;
34
+ this.m10 = m10;
35
+ this.m11 = m11;
36
+ }
37
+ get [Symbol.toStringTag]() {
38
+ return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
39
+ }
40
+ get [Symbol.for("nodejs.util.inspect.custom")]() {
41
+ return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
42
+ }
43
+ [Symbol.hasInstance](m) {
44
+ return isMatrix2x2(m);
45
+ }
46
+ };
47
+ /** @internal */
48
+ const isMatrix2x2 = (m) => typeof m === "object" && m !== null && Matrix2x2TypeId in m;
49
+ /** @internal */
50
+ const equals$1 = dual(2, (a, b) => coincident(a.m00, b.m00) && coincident(a.m01, b.m01) && coincident(a.m10, b.m10) && coincident(a.m11, b.m11));
51
+ /** @internal */
52
+ const make$1 = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) => new Matrix2x2Impl(m00, m01, m10, m11);
53
+ /** @internal */
54
+ const fromRows$1 = (v0, v1) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y);
55
+ /** @internal */
56
+ const fromColumns$1 = (v0, v1) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y);
57
+ /** @internal */
58
+ const setRow$1 = dual(3, (m, row, v) => fromRows$1(...toRows$1(m).with(toTwoDimensionalIndex(row), v)));
59
+ /** @internal */
60
+ const setColumn$1 = dual(3, (m, column, v) => fromColumns$1(...toColumns$1(m).with(toTwoDimensionalIndex(column), v)));
61
+ /** @internal */
62
+ const determinant$1 = (m) => m.m00 * m.m11 - m.m01 * m.m10;
63
+ /** @internal */
64
+ const vectorProductLeft$1 = dual(2, (m, v) => make$2(dot(rowVector$1(m, 0), v), dot(rowVector$1(m, 1), v)));
65
+ /** @internal */
66
+ const vectorProductRight$1 = dual(2, (m, v) => make$2(dot(columnVector$1(m, 0), v), dot(columnVector$1(m, 1), v)));
67
+ /** @internal */
68
+ const solveSystem$1 = dual(2, (m, v) => {
69
+ const inverseDeterminant = 1 / determinant$1(m);
70
+ invariant(Number.isFinite(inverseDeterminant), "cannot solve system when coefficient matrix determinant is zero");
71
+ return make$2(determinant$1(setColumn$1(m, 0, v)) * inverseDeterminant, determinant$1(setColumn$1(m, 1, v)) * inverseDeterminant);
72
+ });
73
+ /** @internal */
74
+ const toRows$1 = (m) => [make$2(m.m00, m.m01), make$2(m.m10, m.m11)];
75
+ /** @internal */
76
+ const toColumns$1 = (m) => [make$2(m.m00, m.m10), make$2(m.m01, m.m11)];
77
+ /** @internal */
78
+ const rowVector$1 = dual(2, (m, row) => toRows$1(m)[toTwoDimensionalIndex(row)]);
79
+ /** @internal */
80
+ const columnVector$1 = dual(2, (m, column) => toColumns$1(m)[toTwoDimensionalIndex(column)]);
81
+ /** @internal */
82
+ const transpose$1 = (m) => fromColumns$1(...toRows$1(m));
83
+ /** @internal */
84
+ const reverseRows$1 = (m) => {
85
+ const [r0, r1] = toRows$1(m);
86
+ return fromRows$1(r1, r0);
87
+ };
88
+ /** @internal */
89
+ const reverseColumns$1 = (m) => {
90
+ const [c0, c1] = toColumns$1(m);
91
+ return fromColumns$1(c1, c0);
92
+ };
93
+ //#endregion
94
+ //#region src/matrix/matrix3x3.internal.ts
95
+ const Matrix3x3TypeId = Symbol.for("curvy/matrix3x3");
96
+ var Matrix3x3Impl = class extends Pipeable {
97
+ [Matrix3x3TypeId] = Matrix3x3TypeId;
98
+ m00;
99
+ m01;
100
+ m02;
101
+ m10;
102
+ m11;
103
+ m12;
104
+ m20;
105
+ m21;
106
+ m22;
107
+ constructor(m00 = 0, m01 = 0, m02 = 0, m10 = 0, m11 = 0, m12 = 0, m20 = 0, m21 = 0, m22 = 0) {
108
+ super();
109
+ this.m00 = m00;
110
+ this.m01 = m01;
111
+ this.m02 = m02;
112
+ this.m10 = m10;
113
+ this.m11 = m11;
114
+ this.m12 = m12;
115
+ this.m20 = m20;
116
+ this.m21 = m21;
117
+ this.m22 = m22;
118
+ }
119
+ get [Symbol.toStringTag]() {
120
+ return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
121
+ }
122
+ get [Symbol.for("nodejs.util.inspect.custom")]() {
123
+ return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`;
124
+ }
125
+ [Symbol.hasInstance](m) {
126
+ return isMatrix3x3(m);
127
+ }
128
+ };
129
+ /** @internal */
130
+ const isMatrix3x3 = (m) => typeof m === "object" && m !== null && Matrix3x3TypeId in m;
131
+ /** @internal */
132
+ const equals = dual(2, (a, b) => coincident(a.m00, b.m00) && coincident(a.m01, b.m01) && coincident(a.m02, b.m02) && coincident(a.m10, b.m10) && coincident(a.m11, b.m11) && coincident(a.m12, b.m12) && coincident(a.m20, b.m20) && coincident(a.m21, b.m21) && coincident(a.m22, b.m22));
133
+ /** @internal */
134
+ const make = (m00 = 0, m01 = m00, m02 = m01, m10 = m02, m11 = m10, m12 = m11, m20 = m12, m21 = m20, m22 = m21) => {
135
+ return new Matrix3x3Impl(m00, m01, m02, m10, m11, m12, m20, m21, m22);
136
+ };
137
+ /** @internal */
138
+ 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);
139
+ /** @internal */
140
+ 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);
141
+ /** @internal */
142
+ const setRow = dual(3, (m, row, v) => fromRows(...toRows(m).with(toThreeDimensionalIndex(row), v)));
143
+ /** @internal */
144
+ const setColumn = dual(3, (m, column, v) => fromColumns(...toColumns(m).with(toThreeDimensionalIndex(column), v)));
145
+ /** @internal */
146
+ const determinant = (m) => m.m00 * determinant$1(minor(m, 0, 0)) - m.m01 * determinant$1(minor(m, 0, 1)) + m.m02 * determinant$1(minor(m, 0, 2));
147
+ /** @internal */
148
+ const minor = dual(3, (m, row, column) => {
149
+ const [v0, v1] = toRows(m).toSpliced(toThreeDimensionalIndex(row), 1);
150
+ const columnIndex = toThreeDimensionalIndex(column);
151
+ const [m00, m01] = components(v0).toSpliced(columnIndex, 1);
152
+ const [m10, m11] = components(v1).toSpliced(columnIndex, 1);
153
+ return make$1(m00, m01, m10, m11);
154
+ });
155
+ /** @internal */
156
+ const vectorProductLeft = dual(2, (m, v) => {
157
+ const [v0, v1, v2] = toRows(m);
158
+ return make$3(dot$1(v0, v), dot$1(v1, v), dot$1(v2, v));
159
+ });
160
+ /** @internal */
161
+ const vectorProductRight = dual(2, (m, v) => {
162
+ const [v0, v1, v2] = toColumns(m);
163
+ return make$3(dot$1(v, v0), dot$1(v, v1), dot$1(v, v2));
164
+ });
165
+ /** @internal */
166
+ const solveSystem = dual(2, (m, v) => {
167
+ const inverseDeterminant = 1 / determinant(m);
168
+ invariant(Number.isFinite(inverseDeterminant), "cannot solve system when coefficient matrix determinant is zero");
169
+ return make$3(determinant(setColumn(m, 0, v)) * inverseDeterminant, determinant(setColumn(m, 1, v)) * inverseDeterminant, determinant(setColumn(m, 2, v)) * inverseDeterminant);
170
+ });
171
+ /** @internal */
172
+ const toRows = (m) => [
173
+ make$3(m.m00, m.m01, m.m02),
174
+ make$3(m.m10, m.m11, m.m12),
175
+ make$3(m.m20, m.m21, m.m22)
176
+ ];
177
+ /** @internal */
178
+ const toColumns = (m) => [
179
+ make$3(m.m00, m.m10, m.m20),
180
+ make$3(m.m01, m.m11, m.m21),
181
+ make$3(m.m02, m.m12, m.m22)
182
+ ];
183
+ /** @internal */
184
+ const rowVector = dual(2, (m, row) => toRows(m)[toThreeDimensionalIndex(row)]);
185
+ /** @internal */
186
+ const columnVector = dual(2, (m, column) => toColumns(m)[toThreeDimensionalIndex(column)]);
187
+ /** @internal */
188
+ const transpose = (m) => fromColumns(...toRows(m));
189
+ /** @internal */
190
+ const reverseRows = (m) => {
191
+ const [v0, v1, v2] = toRows(m);
192
+ return fromRows(v2, v1, v0);
193
+ };
194
+ /** @internal */
195
+ const reverseColumns = (m) => {
196
+ const [v0, v1, v2] = toColumns(m);
197
+ return fromColumns(v2, v1, v0);
198
+ };
199
+ /** @internal */
200
+ const identity = new Matrix3x3Impl(1, 0, 0, 0, 1, 0, 0, 0, 1);
201
+ /** @internal */
202
+ const multiply = dual(2, (a, b) => new Matrix3x3Impl(a.m00 * b.m00 + a.m01 * b.m10 + a.m02 * b.m20, a.m00 * b.m01 + a.m01 * b.m11 + a.m02 * b.m21, a.m00 * b.m02 + a.m01 * b.m12 + a.m02 * b.m22, a.m10 * b.m00 + a.m11 * b.m10 + a.m12 * b.m20, a.m10 * b.m01 + a.m11 * b.m11 + a.m12 * b.m21, a.m10 * b.m02 + a.m11 * b.m12 + a.m12 * b.m22, a.m20 * b.m00 + a.m21 * b.m10 + a.m22 * b.m20, a.m20 * b.m01 + a.m21 * b.m11 + a.m22 * b.m21, a.m20 * b.m02 + a.m21 * b.m12 + a.m22 * b.m22));
203
+ const singularityThreshold = (m) => RELATIVE_TOLERANCE * Math.hypot(m.m00, m.m01, m.m02) * Math.hypot(m.m10, m.m11, m.m12) * Math.hypot(m.m20, m.m21, m.m22);
204
+ /** @internal */
205
+ const isInvertible = (m) => Math.abs(determinant(m)) > singularityThreshold(m);
206
+ /** @internal */
207
+ const asInvertible = (m) => {
208
+ invariant(isInvertible(m), "matrix3x3 is not invertible");
209
+ return m;
210
+ };
211
+ const buildInverse = (m, det) => {
212
+ const inv = 1 / det;
213
+ const cof = (row, col) => {
214
+ return ((row + col) % 2 === 0 ? 1 : -1) * determinant$1(minor(m, row, col)) * inv;
215
+ };
216
+ return new Matrix3x3Impl(cof(0, 0), cof(1, 0), cof(2, 0), cof(0, 1), cof(1, 1), cof(2, 1), cof(0, 2), cof(1, 2), cof(2, 2));
217
+ };
218
+ /** @internal */
219
+ const inverse = (m) => {
220
+ const det = determinant(m);
221
+ if (Math.abs(det) <= singularityThreshold(m)) return none;
222
+ return one(buildInverse(m, det));
223
+ };
224
+ /** @internal */
225
+ const inverseUnsafe = (m) => {
226
+ const det = determinant(m);
227
+ invariant(Math.abs(det) > singularityThreshold(m), "cannot invert singular matrix");
228
+ return buildInverse(m, det);
229
+ };
230
+ //#endregion
231
+ export { fromRows$1 as A, toRows$1 as B, transpose as C, determinant$1 as D, columnVector$1 as E, rowVector$1 as F, vectorProductLeft$1 as H, setColumn$1 as I, setRow$1 as L, make$1 as M, reverseColumns$1 as N, equals$1 as O, reverseRows$1 as P, solveSystem$1 as R, toRows as S, vectorProductRight as T, vectorProductRight$1 as U, transpose$1 as V, toFourDimensionalIndex as W, rowVector as _, fromColumns as a, solveSystem as b, inverse as c, isMatrix3x3 as d, make as f, reverseRows as g, reverseColumns as h, equals as i, isMatrix2x2 as j, fromColumns$1 as k, inverseUnsafe as l, multiply as m, columnVector as n, fromRows as o, minor as p, determinant as r, identity as s, asInvertible as t, isInvertible as u, setColumn as v, vectorProductLeft as w, toColumns as x, setRow as y, toColumns$1 as z };
232
+
233
+ //# sourceMappingURL=matrix3x3.internal-Cod-r7H3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix3x3.internal-Cod-r7H3.mjs","names":["equals","make","fromRows","fromColumns","setRow","toRows","setColumn","toColumns","determinant","vectorProductLeft","vector2.make","vector2.dot","rowVector","vectorProductRight","columnVector","solveSystem","transpose","reverseRows","reverseColumns","matrix2x2.determinant","vector3.components","matrix2x2.make","vector3.make","vector3.dot","Solution.none","Solution.one"],"sources":["../../src/dimensions.ts","../../src/matrix/matrix2x2.internal.ts","../../src/matrix/matrix3x3.internal.ts"],"sourcesContent":["import { invariant } from './utils.ts'\n\nexport type TwoDimensionalIndex = 0 | 1\nexport type TwoDimensionalComponent = 'x' | 'y'\n\nexport interface TwoDimensional<out T1, out T2 = T1> {\n readonly x: T1\n readonly y: T2\n\n readonly 0: T1\n readonly 1: T2\n}\n\nexport type ThreeDimensionalIndex = TwoDimensionalIndex | 2\nexport type ThreeDimensionalComponent = TwoDimensionalComponent | 'z'\n\nexport interface ThreeDimensional<out T1, out T2 = T1, out T3 = T2> extends TwoDimensional<T1, T2> {\n readonly z: T3\n readonly 2: T3\n}\n\nexport type FourDimensionalIndex = ThreeDimensionalIndex | 3\nexport type FourDimensionalComponent = ThreeDimensionalComponent | 'w'\n\nexport interface FourDimensional<\n out T1,\n out T2 = T1,\n out T3 = T2,\n out T4 = T3,\n> extends ThreeDimensional<T1, T2, T3> {\n readonly w: T4\n readonly 3: T4\n}\n\nfunction toIndex(input: string | number): number {\n if (typeof input === 'number') {\n invariant(input >= 0 && input <= 3, 'Index out of bounds')\n\n return input\n }\n\n if (input === 'x') {\n return 0\n }\n\n if (input === 'y') {\n return 1\n }\n\n if (input === 'z') {\n return 2\n }\n\n if (input === 'w') {\n return 3\n }\n\n invariant(false, 'Invalid component')\n}\n\nexport const toTwoDimensionalIndex = toIndex as (\n input: TwoDimensionalIndex | TwoDimensionalComponent,\n) => TwoDimensionalIndex\nexport const toThreeDimensionalIndex = toIndex as (\n input: ThreeDimensionalIndex | ThreeDimensionalComponent,\n) => ThreeDimensionalIndex\nexport const toFourDimensionalIndex = toIndex as (\n input: FourDimensionalIndex | FourDimensionalComponent,\n) => FourDimensionalIndex\n","import { toTwoDimensionalIndex } from '../dimensions.ts'\nimport { dual, Pipeable } from '../utils.ts'\nimport { invariant } from '../utils.ts'\nimport { coincident } from '../number.ts'\nimport type { Vector2 } from '../vector/vector2.ts'\nimport * as vector2 from '../vector/vector2.internal.ts'\nimport type { Matrix2x2, Matrix2x2Coordinate } from './matrix2x2.ts'\n\nexport const Matrix2x2TypeId: unique symbol = Symbol.for('curvy/matrix2x2')\nexport type Matrix2x2TypeId = typeof Matrix2x2TypeId\n\nclass Matrix2x2Impl extends Pipeable implements Matrix2x2 {\n readonly [Matrix2x2TypeId]: Matrix2x2TypeId = Matrix2x2TypeId\n\n readonly m00: number\n readonly m01: number\n\n readonly m10: number\n readonly m11: number\n\n constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {\n super()\n this.m00 = m00\n this.m01 = m01\n this.m10 = m10\n this.m11 = m11\n }\n\n get [Symbol.toStringTag]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n [Symbol.hasInstance](m: unknown): m is Matrix2x2 {\n return isMatrix2x2(m)\n }\n}\n\n/** @internal */\nexport const isMatrix2x2 = (m: unknown): m is Matrix2x2 =>\n typeof m === 'object' && m !== null && Matrix2x2TypeId in m\n\n/** @internal */\nexport const equals = dual<\n (b: Matrix2x2) => (a: Matrix2x2) => boolean,\n (a: Matrix2x2, b: Matrix2x2) => boolean\n>(\n 2,\n (a: Matrix2x2, b: Matrix2x2) =>\n coincident(a.m00, b.m00) &&\n coincident(a.m01, b.m01) &&\n coincident(a.m10, b.m10) &&\n coincident(a.m11, b.m11),\n)\n\n/** @internal */\nexport const make = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) =>\n new Matrix2x2Impl(m00, m01, m10, m11)\n\n/** @internal */\nexport const fromRows = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y)\n\n/** @internal */\nexport const fromColumns = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y)\n\n/** @internal */\nexport const setRow = dual<\n (row: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) =>\n fromRows(...(toRows(m).with(toTwoDimensionalIndex(row), v) as [Vector2, Vector2])),\n)\n\n/** @internal */\nexport const setColumn = dual<\n (column: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) =>\n fromColumns(...(toColumns(m).with(toTwoDimensionalIndex(column), v) as [Vector2, Vector2])),\n)\n\n/** @internal */\nexport const determinant = (m: Matrix2x2): number => m.m00 * m.m11 - m.m01 * m.m10\n\n// (a: Vector2, b: Vector2) => a.x * b.x + a.y * b.y\n\n/*\n * {\n * x: first row dot v -> fr.x\n * y: second row dot v\n * }\n * */\n\n/** @internal */\nexport const vectorProductLeft = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(rowVector(m, 0), v), vector2.dot(rowVector(m, 1), v)),\n)\n\n/** @internal */\nexport const vectorProductRight = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(columnVector(m, 0), v), vector2.dot(columnVector(m, 1), v)),\n)\n\n/** @internal */\nexport const solveSystem = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) => {\n const inverseDeterminant = 1 / determinant(m)\n\n invariant(\n Number.isFinite(inverseDeterminant),\n 'cannot solve system when coefficient matrix determinant is zero',\n )\n\n return vector2.make(\n determinant(setColumn(m, 0, v)) * inverseDeterminant,\n determinant(setColumn(m, 1, v)) * inverseDeterminant,\n )\n})\n\n/** @internal */\nexport const toRows = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m01),\n vector2.make(m.m10, m.m11),\n]\n\n/** @internal */\nexport const toColumns = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m10),\n vector2.make(m.m01, m.m11),\n]\n\n/** @internal */\nexport const rowVector = dual<\n (row: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, row: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, row: Matrix2x2Coordinate) => toRows(m)[toTwoDimensionalIndex(row)])\n\n/** @internal */\nexport const columnVector = dual<\n (column: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, column: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, column: Matrix2x2Coordinate) => toColumns(m)[toTwoDimensionalIndex(column)])\n\n/** @internal */\nexport const transpose = (m: Matrix2x2) => fromColumns(...toRows(m))\n\n/** @internal */\nexport const reverseRows = (m: Matrix2x2) => {\n const [r0, r1] = toRows(m)\n return fromRows(r1, r0)\n}\n\n/** @internal */\nexport const reverseColumns = (m: Matrix2x2) => {\n const [c0, c1] = toColumns(m)\n return fromColumns(c1, c0)\n}\n","import { toThreeDimensionalIndex } from '../dimensions.ts'\nimport { dual, Pipeable } from '../utils.ts'\nimport { invariant } from '../utils.ts'\nimport { coincident, RELATIVE_TOLERANCE } from '../number.ts'\nimport * as Solution from '../solution/solution.ts'\nimport type { Vector3 } from '../vector/vector3.ts'\nimport * as vector3 from '../vector/vector3.internal.ts'\nimport type { Matrix2x2 } from './matrix2x2.ts'\nimport * as matrix2x2 from './matrix2x2.internal.ts'\nimport type { Matrix3x3, Matrix3x3Coordinate } from './matrix3x3.ts'\nimport type { Invertible } from './traits.ts'\nimport { MatrixTraits } from './traits.ts'\n\nexport const Matrix3x3TypeId: unique symbol = Symbol.for('curvy/matrix3x3')\nexport type Matrix3x3TypeId = typeof Matrix3x3TypeId\n\nclass Matrix3x3Impl extends Pipeable implements Matrix3x3<unknown> {\n readonly [Matrix3x3TypeId]: Matrix3x3TypeId = Matrix3x3TypeId\n declare readonly [MatrixTraits]: unknown\n\n readonly m00: number\n readonly m01: number\n readonly m02: number\n\n readonly m10: number\n readonly m11: number\n readonly m12: number\n\n readonly m20: number\n readonly m21: number\n readonly m22: number\n\n constructor(m00 = 0, m01 = 0, m02 = 0, m10 = 0, m11 = 0, m12 = 0, m20 = 0, m21 = 0, m22 = 0) {\n super()\n this.m00 = m00\n this.m01 = m01\n this.m02 = m02\n this.m10 = m10\n this.m11 = m11\n this.m12 = m12\n this.m20 = m20\n this.m21 = m21\n this.m22 = m22\n }\n\n get [Symbol.toStringTag]() {\n return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Matrix3x3(${this.m00}, ${this.m01}, ${this.m02}, ${this.m10}, ${this.m11}, ${this.m12}, ${this.m20}, ${this.m21}, ${this.m22})`\n }\n\n [Symbol.hasInstance](m: unknown): m is Matrix3x3 {\n return isMatrix3x3(m)\n }\n}\n\nexport type { Matrix3x3 }\n\n/** @internal */\nexport const isMatrix3x3 = (m: unknown): m is Matrix3x3 =>\n typeof m === 'object' && m !== null && Matrix3x3TypeId in m\n\n/** @internal */\nexport const equals = dual<\n (b: Matrix3x3) => (a: Matrix3x3) => boolean,\n (a: Matrix3x3, b: Matrix3x3) => boolean\n>(\n 2,\n (a: Matrix3x3, b: Matrix3x3) =>\n coincident(a.m00, b.m00) &&\n coincident(a.m01, b.m01) &&\n coincident(a.m02, b.m02) &&\n coincident(a.m10, b.m10) &&\n coincident(a.m11, b.m11) &&\n coincident(a.m12, b.m12) &&\n coincident(a.m20, b.m20) &&\n coincident(a.m21, b.m21) &&\n coincident(a.m22, b.m22),\n)\n\n/** @internal */\nexport const make = (\n m00 = 0,\n m01 = m00,\n m02 = m01,\n m10 = m02,\n m11 = m10,\n m12 = m11,\n m20 = m12,\n m21 = m20,\n m22 = m21,\n): Matrix3x3 => {\n return new Matrix3x3Impl(m00, m01, m02, m10, m11, m12, m20, m21, m22)\n}\n\n/** @internal */\nexport const fromRows = (v0: Vector3, v1: Vector3, v2: Vector3): Matrix3x3 =>\n new Matrix3x3Impl(v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, v2.x, v2.y, v2.z)\n\n/** @internal */\nexport const fromColumns = (v0: Vector3, v1: Vector3, v2: Vector3): Matrix3x3 =>\n new Matrix3x3Impl(v0.x, v1.x, v2.x, v0.y, v1.y, v2.y, v0.z, v1.z, v2.z)\n\n/** @internal */\nexport const setRow = dual<\n (row: Matrix3x3Coordinate, v: Vector3) => (m: Matrix3x3) => Matrix3x3,\n (m: Matrix3x3, row: Matrix3x3Coordinate, v: Vector3) => Matrix3x3\n>(3, (m: Matrix3x3, row: Matrix3x3Coordinate, v: Vector3) =>\n fromRows(...(toRows(m).with(toThreeDimensionalIndex(row), v) as [Vector3, Vector3, Vector3])),\n)\n\n/** @internal */\nexport const setColumn = dual<\n (column: Matrix3x3Coordinate, v: Vector3) => (m: Matrix3x3) => Matrix3x3,\n (m: Matrix3x3, column: Matrix3x3Coordinate, v: Vector3) => Matrix3x3\n>(3, (m: Matrix3x3, column: Matrix3x3Coordinate, v: Vector3) =>\n fromColumns(\n ...(toColumns(m).with(toThreeDimensionalIndex(column), v) as [Vector3, Vector3, Vector3]),\n ),\n)\n\n/** @internal */\nexport const determinant = (m: Matrix3x3) =>\n m.m00 * matrix2x2.determinant(minor(m, 0, 0)) -\n m.m01 * matrix2x2.determinant(minor(m, 0, 1)) +\n m.m02 * matrix2x2.determinant(minor(m, 0, 2))\n\n/** @internal */\nexport const minor = dual<\n (row: Matrix3x3Coordinate, column: Matrix3x3Coordinate) => (m: Matrix3x3) => Matrix2x2,\n (m: Matrix3x3, row: Matrix3x3Coordinate, column: Matrix3x3Coordinate) => Matrix2x2\n>(3, (m: Matrix3x3, row: Matrix3x3Coordinate, column: Matrix3x3Coordinate) => {\n const [v0, v1] = toRows(m).toSpliced(toThreeDimensionalIndex(row), 1) as [Vector3, Vector3]\n const columnIndex = toThreeDimensionalIndex(column)\n const [m00, m01] = vector3.components(v0).toSpliced(columnIndex, 1) as [number, number]\n const [m10, m11] = vector3.components(v1).toSpliced(columnIndex, 1) as [number, number]\n\n return matrix2x2.make(m00, m01, m10, m11) as Matrix2x2\n})\n\n/** @internal */\nexport const vectorProductLeft = dual<\n (v: Vector3) => (m: Matrix3x3) => Vector3,\n (m: Matrix3x3, v: Vector3) => Vector3\n>(2, (m: Matrix3x3, v: Vector3) => {\n const [v0, v1, v2] = toRows(m) as [Vector3, Vector3, Vector3]\n return vector3.make(vector3.dot(v0, v), vector3.dot(v1, v), vector3.dot(v2, v))\n})\n\n/** @internal */\nexport const vectorProductRight = dual<\n (v: Vector3) => (m: Matrix3x3) => Vector3,\n (m: Matrix3x3, v: Vector3) => Vector3\n>(2, (m: Matrix3x3, v: Vector3) => {\n const [v0, v1, v2] = toColumns(m) as [Vector3, Vector3, Vector3]\n return vector3.make(vector3.dot(v, v0), vector3.dot(v, v1), vector3.dot(v, v2))\n})\n\n/** @internal */\nexport const solveSystem = dual<\n (v: Vector3) => (m: Matrix3x3) => Vector3,\n (m: Matrix3x3, v: Vector3) => Vector3\n>(2, (m: Matrix3x3, v: Vector3) => {\n const inverseDeterminant = 1 / determinant(m)\n\n invariant(\n Number.isFinite(inverseDeterminant),\n 'cannot solve system when coefficient matrix determinant is zero',\n )\n\n return vector3.make(\n determinant(setColumn(m, 0, v)) * inverseDeterminant,\n determinant(setColumn(m, 1, v)) * inverseDeterminant,\n determinant(setColumn(m, 2, v)) * inverseDeterminant,\n )\n})\n\n/** @internal */\nexport const toRows = (m: Matrix3x3): [Vector3, Vector3, Vector3] => [\n vector3.make(m.m00, m.m01, m.m02),\n vector3.make(m.m10, m.m11, m.m12),\n vector3.make(m.m20, m.m21, m.m22),\n]\n\n/** @internal */\nexport const toColumns = (m: Matrix3x3): [Vector3, Vector3, Vector3] => [\n vector3.make(m.m00, m.m10, m.m20),\n vector3.make(m.m01, m.m11, m.m21),\n vector3.make(m.m02, m.m12, m.m22),\n]\n\n/** @internal */\nexport const rowVector = dual<\n (row: Matrix3x3Coordinate) => (m: Matrix3x3) => Vector3,\n (m: Matrix3x3, row: Matrix3x3Coordinate) => Vector3\n>(2, (m: Matrix3x3, row: Matrix3x3Coordinate) => toRows(m)[toThreeDimensionalIndex(row)])\n\n/** @internal */\nexport const columnVector = dual<\n (column: Matrix3x3Coordinate) => (m: Matrix3x3) => Vector3,\n (m: Matrix3x3, column: Matrix3x3Coordinate) => Vector3\n>(2, (m: Matrix3x3, column: Matrix3x3Coordinate) => toColumns(m)[toThreeDimensionalIndex(column)])\n\n/** @internal */\nexport const transpose = (m: Matrix3x3) => fromColumns(...toRows(m))\n\n/** @internal */\nexport const reverseRows = (m: Matrix3x3) => {\n const [v0, v1, v2] = toRows(m)\n return fromRows(v2, v1, v0)\n}\n\n/** @internal */\nexport const reverseColumns = (m: Matrix3x3) => {\n const [v0, v1, v2] = toColumns(m)\n return fromColumns(v2, v1, v0)\n}\n\n/** @internal */\nexport const identity: Matrix3x3 = new Matrix3x3Impl(1, 0, 0, 0, 1, 0, 0, 0, 1)\n\n/** @internal */\nexport const multiply = dual<\n (b: Matrix3x3) => (a: Matrix3x3) => Matrix3x3,\n (a: Matrix3x3, b: Matrix3x3) => Matrix3x3\n>(\n 2,\n (a: Matrix3x3, b: Matrix3x3) =>\n new Matrix3x3Impl(\n a.m00 * b.m00 + a.m01 * b.m10 + a.m02 * b.m20,\n a.m00 * b.m01 + a.m01 * b.m11 + a.m02 * b.m21,\n a.m00 * b.m02 + a.m01 * b.m12 + a.m02 * b.m22,\n a.m10 * b.m00 + a.m11 * b.m10 + a.m12 * b.m20,\n a.m10 * b.m01 + a.m11 * b.m11 + a.m12 * b.m21,\n a.m10 * b.m02 + a.m11 * b.m12 + a.m12 * b.m22,\n a.m20 * b.m00 + a.m21 * b.m10 + a.m22 * b.m20,\n a.m20 * b.m01 + a.m21 * b.m11 + a.m22 * b.m21,\n a.m20 * b.m02 + a.m21 * b.m12 + a.m22 * b.m22,\n ),\n)\n\n// Singularity threshold relative to the matrix's own scale. Hadamard's\n// inequality bounds |det| by the product of the row norms, so det/product is\n// a scale-free measure of how close the rows are to linear dependence: 1 for\n// orthogonal rows, 0 for parallel ones. An absolute threshold would misjudge\n// uniformly scaled matrices in both directions — diag(1e-8, 1e-8, 1) is\n// perfectly invertible despite det = 1e-16, while a large matrix with nearly\n// parallel rows can carry a sizeable determinant that is still pure noise.\nconst singularityThreshold = (m: Matrix3x3): number =>\n RELATIVE_TOLERANCE *\n Math.hypot(m.m00, m.m01, m.m02) *\n Math.hypot(m.m10, m.m11, m.m12) *\n Math.hypot(m.m20, m.m21, m.m22)\n\n/** @internal */\nexport const isInvertible = <T>(m: Matrix3x3<T>): m is Matrix3x3<T & Invertible> =>\n Math.abs(determinant(m)) > singularityThreshold(m)\n\n/** @internal */\nexport const asInvertible = <T>(m: Matrix3x3<T>): Matrix3x3<T & Invertible> => {\n invariant(isInvertible(m), 'matrix3x3 is not invertible')\n return m\n}\n\nconst buildInverse = (m: Matrix3x3, det: number): Matrix3x3 => {\n const inv = 1 / det\n // adjugate is the transpose of the cofactor matrix\n const cof = (row: Matrix3x3Coordinate, col: Matrix3x3Coordinate) => {\n const sign = ((row as number) + (col as number)) % 2 === 0 ? 1 : -1\n return sign * matrix2x2.determinant(minor(m, row, col)) * inv\n }\n\n return new Matrix3x3Impl(\n cof(0, 0),\n cof(1, 0),\n cof(2, 0),\n cof(0, 1),\n cof(1, 1),\n cof(2, 1),\n cof(0, 2),\n cof(1, 2),\n cof(2, 2),\n )\n}\n\n// On `Invertible`-branded matrices the empty branch is provably unreachable,\n// but TS can't see that — the cast at the public overload pairs the type-level\n// promise with the runtime brand check.\n/** @internal */\nexport const inverse = <T>(m: Matrix3x3<T>): Solution.AtMostOne<Matrix3x3<T>> => {\n const det = determinant(m)\n if (Math.abs(det) <= singularityThreshold(m)) {\n return Solution.none\n }\n return Solution.one(buildInverse(m, det) as Matrix3x3<T>)\n}\n\n/** @internal */\nexport const inverseUnsafe = (m: Matrix3x3): Matrix3x3 => {\n const det = determinant(m)\n invariant(Math.abs(det) > singularityThreshold(m), 'cannot invert singular matrix')\n return buildInverse(m, det)\n}\n"],"mappings":"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"}