@lakuna/umath 0.0.2 → 0.0.4

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 (147) hide show
  1. package/README.md +41 -1
  2. package/dist/algorithms/combinations.d.ts +2 -0
  3. package/dist/algorithms/combinations.d.ts.map +1 -0
  4. package/dist/algorithms/combinations.js +5 -0
  5. package/dist/algorithms/combinations.js.map +1 -0
  6. package/dist/algorithms/degreesToRadians.d.ts +2 -0
  7. package/dist/algorithms/degreesToRadians.d.ts.map +1 -0
  8. package/dist/algorithms/degreesToRadians.js +4 -0
  9. package/dist/algorithms/degreesToRadians.js.map +1 -0
  10. package/dist/algorithms/factorial.d.ts +2 -0
  11. package/dist/algorithms/factorial.d.ts.map +1 -0
  12. package/dist/algorithms/factorial.js +4 -0
  13. package/dist/algorithms/factorial.js.map +1 -0
  14. package/dist/algorithms/fibonacci.d.ts +2 -0
  15. package/dist/algorithms/fibonacci.d.ts.map +1 -0
  16. package/dist/algorithms/fibonacci.js +9 -0
  17. package/dist/algorithms/fibonacci.js.map +1 -0
  18. package/dist/algorithms/greatestCommonDivisor.d.ts +3 -0
  19. package/dist/algorithms/greatestCommonDivisor.d.ts.map +1 -0
  20. package/dist/algorithms/greatestCommonDivisor.js +13 -0
  21. package/dist/algorithms/greatestCommonDivisor.js.map +1 -0
  22. package/dist/algorithms/isPrime.d.ts +2 -0
  23. package/dist/algorithms/isPrime.d.ts.map +1 -0
  24. package/dist/algorithms/isPrime.js +12 -0
  25. package/dist/algorithms/isPrime.js.map +1 -0
  26. package/dist/algorithms/permutations.d.ts +2 -0
  27. package/dist/algorithms/permutations.d.ts.map +1 -0
  28. package/dist/algorithms/permutations.js +5 -0
  29. package/dist/algorithms/permutations.js.map +1 -0
  30. package/dist/algorithms/primeFactorization.d.ts +2 -0
  31. package/dist/algorithms/primeFactorization.d.ts.map +1 -0
  32. package/dist/algorithms/primeFactorization.js +15 -0
  33. package/dist/algorithms/primeFactorization.js.map +1 -0
  34. package/dist/algorithms/radiansToDegrees.d.ts +2 -0
  35. package/dist/algorithms/radiansToDegrees.d.ts.map +1 -0
  36. package/dist/algorithms/radiansToDegrees.js +4 -0
  37. package/dist/algorithms/radiansToDegrees.js.map +1 -0
  38. package/dist/algorithms/summation.d.ts +2 -0
  39. package/dist/algorithms/summation.d.ts.map +1 -0
  40. package/dist/algorithms/summation.js +7 -0
  41. package/dist/algorithms/summation.js.map +1 -0
  42. package/dist/index.d.ts +28 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +22 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/linear/DualQuaternion.d.ts +89 -0
  47. package/dist/linear/DualQuaternion.d.ts.map +1 -0
  48. package/dist/linear/DualQuaternion.js +530 -0
  49. package/dist/linear/DualQuaternion.js.map +1 -0
  50. package/dist/linear/Matrix.d.ts +18 -0
  51. package/dist/linear/Matrix.d.ts.map +1 -0
  52. package/dist/linear/Matrix.js +2 -0
  53. package/dist/linear/Matrix.js.map +1 -0
  54. package/dist/linear/Matrix2.d.ts +66 -0
  55. package/dist/linear/Matrix2.d.ts.map +1 -0
  56. package/dist/linear/Matrix2.js +240 -0
  57. package/dist/linear/Matrix2.js.map +1 -0
  58. package/dist/linear/Matrix3.d.ts +91 -0
  59. package/dist/linear/Matrix3.d.ts.map +1 -0
  60. package/dist/linear/Matrix3.js +533 -0
  61. package/dist/linear/Matrix3.js.map +1 -0
  62. package/dist/linear/Matrix4.d.ts +140 -0
  63. package/dist/linear/Matrix4.d.ts.map +1 -0
  64. package/dist/linear/Matrix4.js +1363 -0
  65. package/dist/linear/Matrix4.js.map +1 -0
  66. package/dist/linear/Quaternion.d.ts +80 -0
  67. package/dist/linear/Quaternion.d.ts.map +1 -0
  68. package/dist/linear/Quaternion.js +371 -0
  69. package/dist/linear/Quaternion.js.map +1 -0
  70. package/dist/linear/SquareMatrix.d.ts +7 -0
  71. package/dist/linear/SquareMatrix.d.ts.map +1 -0
  72. package/dist/linear/SquareMatrix.js +2 -0
  73. package/dist/linear/SquareMatrix.js.map +1 -0
  74. package/dist/linear/Vector.d.ts +30 -0
  75. package/dist/linear/Vector.d.ts.map +1 -0
  76. package/dist/linear/Vector.js +2 -0
  77. package/dist/linear/Vector.js.map +1 -0
  78. package/dist/linear/Vector2.d.ts +96 -0
  79. package/dist/linear/Vector2.d.ts.map +1 -0
  80. package/dist/linear/Vector2.js +293 -0
  81. package/dist/linear/Vector2.js.map +1 -0
  82. package/dist/linear/Vector3.d.ts +111 -0
  83. package/dist/linear/Vector3.d.ts.map +1 -0
  84. package/dist/linear/Vector3.js +466 -0
  85. package/dist/linear/Vector3.js.map +1 -0
  86. package/dist/linear/Vector4.d.ts +86 -0
  87. package/dist/linear/Vector4.d.ts.map +1 -0
  88. package/dist/linear/Vector4.js +348 -0
  89. package/dist/linear/Vector4.js.map +1 -0
  90. package/dist/types/AxisAngle.d.ts +6 -0
  91. package/dist/types/AxisAngle.d.ts.map +1 -0
  92. package/dist/types/AxisAngle.js +2 -0
  93. package/dist/types/AxisAngle.js.map +1 -0
  94. package/dist/types/FieldOfView.d.ts +7 -0
  95. package/dist/types/FieldOfView.d.ts.map +1 -0
  96. package/dist/types/FieldOfView.js +2 -0
  97. package/dist/types/FieldOfView.js.map +1 -0
  98. package/dist/types/IntegerRepresentation.d.ts +2 -0
  99. package/dist/types/IntegerRepresentation.d.ts.map +1 -0
  100. package/dist/types/IntegerRepresentation.js +2 -0
  101. package/dist/types/IntegerRepresentation.js.map +1 -0
  102. package/dist/utility/BigNumber.d.ts +15 -0
  103. package/dist/utility/BigNumber.d.ts.map +1 -0
  104. package/dist/utility/BigNumber.js +75 -0
  105. package/dist/utility/BigNumber.js.map +1 -0
  106. package/dist/utility/MagnitudeError.d.ts +4 -0
  107. package/dist/utility/MagnitudeError.d.ts.map +1 -0
  108. package/dist/utility/MagnitudeError.js +6 -0
  109. package/dist/utility/MagnitudeError.js.map +1 -0
  110. package/dist/utility/SingularMatrixError.d.ts +4 -0
  111. package/dist/utility/SingularMatrixError.d.ts.map +1 -0
  112. package/dist/utility/SingularMatrixError.js +6 -0
  113. package/dist/utility/SingularMatrixError.js.map +1 -0
  114. package/dist/utility/epsilon.d.ts +3 -0
  115. package/dist/utility/epsilon.d.ts.map +1 -0
  116. package/dist/utility/epsilon.js +2 -0
  117. package/dist/utility/epsilon.js.map +1 -0
  118. package/package.json +17 -9
  119. package/src/algorithms/combinations.ts +12 -0
  120. package/src/algorithms/degreesToRadians.ts +10 -0
  121. package/src/algorithms/factorial.ts +9 -0
  122. package/src/algorithms/fibonacci.ts +14 -0
  123. package/src/algorithms/greatestCommonDivisor.ts +30 -0
  124. package/src/algorithms/isPrime.ts +20 -0
  125. package/src/algorithms/permutations.ts +12 -0
  126. package/src/algorithms/primeFactorization.ts +21 -0
  127. package/src/algorithms/radiansToDegrees.ts +10 -0
  128. package/src/algorithms/summation.ts +23 -0
  129. package/src/index.ts +28 -1
  130. package/src/linear/DualQuaternion.ts +1213 -0
  131. package/src/linear/Matrix.ts +106 -0
  132. package/src/linear/Matrix2.ts +709 -0
  133. package/src/linear/Matrix3.ts +1194 -0
  134. package/src/linear/Matrix4.ts +2569 -0
  135. package/src/linear/Quaternion.ts +967 -0
  136. package/src/linear/SquareMatrix.ts +27 -0
  137. package/src/linear/Vector.ts +178 -0
  138. package/src/linear/Vector2.ts +979 -0
  139. package/src/linear/Vector3.ts +1320 -0
  140. package/src/linear/Vector4.ts +975 -0
  141. package/src/types/AxisAngle.ts +10 -0
  142. package/src/types/FieldOfView.ts +14 -0
  143. package/src/types/IntegerRepresentation.ts +2 -0
  144. package/src/utility/BigNumber.ts +130 -0
  145. package/src/utility/MagnitudeError.ts +10 -0
  146. package/src/utility/SingularMatrixError.ts +13 -0
  147. package/src/utility/epsilon.ts +2 -0
@@ -0,0 +1,533 @@
1
+ import { SingularMatrixError, epsilon } from "@lakuna/umath";
2
+ export function fromRotation(radians, out) {
3
+ const s = Math.sin(radians);
4
+ const c = Math.cos(radians);
5
+ out[0] = c;
6
+ out[1] = s;
7
+ out[2] = 0;
8
+ out[3] = -s;
9
+ out[4] = c;
10
+ out[5] = 0;
11
+ out[6] = 0;
12
+ out[7] = 0;
13
+ out[8] = 1;
14
+ return out;
15
+ }
16
+ export function fromScaling(vector, out) {
17
+ out[0] = vector[0];
18
+ out[1] = 0;
19
+ out[2] = 0;
20
+ out[3] = 0;
21
+ out[4] = vector[1];
22
+ out[5] = 0;
23
+ out[6] = 0;
24
+ out[7] = 0;
25
+ out[8] = 1;
26
+ return out;
27
+ }
28
+ export function fromTranslation(vector, out) {
29
+ out[0] = 1;
30
+ out[1] = 0;
31
+ out[2] = 0;
32
+ out[3] = 0;
33
+ out[4] = 1;
34
+ out[5] = 0;
35
+ out[6] = vector[0];
36
+ out[7] = vector[1];
37
+ out[8] = 1;
38
+ return out;
39
+ }
40
+ export function fromQuaternion(quaternion, out) {
41
+ const x = quaternion[0];
42
+ const y = quaternion[1];
43
+ const z = quaternion[2];
44
+ const w = quaternion[3];
45
+ const x2 = x + x;
46
+ const y2 = y + y;
47
+ const z2 = z + z;
48
+ const xx = x * x2;
49
+ const yx = y * x2;
50
+ const yy = y * y2;
51
+ const zx = z * x2;
52
+ const zy = z * y2;
53
+ const zz = z * z2;
54
+ const wx = w * x2;
55
+ const wy = w * y2;
56
+ const wz = w * z2;
57
+ out[0] = 1 - yy - zz;
58
+ out[3] = yx - wz;
59
+ out[6] = zx + wy;
60
+ out[1] = yx + wz;
61
+ out[4] = 1 - xx - zz;
62
+ out[7] = zy - wx;
63
+ out[2] = zx - wy;
64
+ out[5] = zy + wx;
65
+ out[8] = 1 - xx - yy;
66
+ return out;
67
+ }
68
+ export function normalFromMatrix4(matrix, out) {
69
+ const a00 = matrix[0];
70
+ const a01 = matrix[1];
71
+ const a02 = matrix[2];
72
+ const a03 = matrix[3];
73
+ const a10 = matrix[4];
74
+ const a11 = matrix[5];
75
+ const a12 = matrix[6];
76
+ const a13 = matrix[7];
77
+ const a20 = matrix[8];
78
+ const a21 = matrix[9];
79
+ const a22 = matrix[10];
80
+ const a23 = matrix[11];
81
+ const a30 = matrix[12];
82
+ const a31 = matrix[13];
83
+ const a32 = matrix[14];
84
+ const a33 = matrix[15];
85
+ const b00 = a00 * a11 - a01 * a10;
86
+ const b01 = a00 * a12 - a02 * a10;
87
+ const b02 = a00 * a13 - a03 * a10;
88
+ const b03 = a01 * a12 - a02 * a11;
89
+ const b04 = a01 * a13 - a03 * a11;
90
+ const b05 = a02 * a13 - a03 * a12;
91
+ const b06 = a20 * a31 - a21 * a30;
92
+ const b07 = a20 * a32 - a22 * a30;
93
+ const b08 = a20 * a33 - a23 * a30;
94
+ const b09 = a21 * a32 - a22 * a31;
95
+ const b10 = a21 * a33 - a23 * a31;
96
+ const b11 = a22 * a33 - a23 * a32;
97
+ let determinant = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
98
+ if (!determinant) {
99
+ throw new SingularMatrixError();
100
+ }
101
+ determinant = 1 / determinant;
102
+ out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * determinant;
103
+ out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * determinant;
104
+ out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * determinant;
105
+ out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * determinant;
106
+ out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * determinant;
107
+ out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * determinant;
108
+ out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * determinant;
109
+ out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * determinant;
110
+ out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * determinant;
111
+ return out;
112
+ }
113
+ export function projection(width, height, out) {
114
+ out[0] = 2 / width;
115
+ out[1] = 0;
116
+ out[2] = 0;
117
+ out[3] = 0;
118
+ out[4] = -2 / height;
119
+ out[5] = 0;
120
+ out[6] = -1;
121
+ out[7] = 1;
122
+ out[8] = 1;
123
+ return out;
124
+ }
125
+ export function fromMatrix4(matrix, out) {
126
+ out[0] = matrix[0];
127
+ out[1] = matrix[1];
128
+ out[2] = matrix[2];
129
+ out[3] = matrix[4];
130
+ out[4] = matrix[5];
131
+ out[5] = matrix[6];
132
+ out[6] = matrix[8];
133
+ out[7] = matrix[9];
134
+ out[8] = matrix[10];
135
+ return out;
136
+ }
137
+ export function fromValues(c0r0, c0r1, c0r2, c1r0, c1r1, c1r2, c2r0, c2r1, c2r2, out) {
138
+ out[0] = c0r0;
139
+ out[1] = c0r1;
140
+ out[2] = c0r2;
141
+ out[3] = c1r0;
142
+ out[4] = c1r1;
143
+ out[5] = c1r2;
144
+ out[6] = c2r0;
145
+ out[7] = c2r1;
146
+ out[8] = c2r2;
147
+ return out;
148
+ }
149
+ export function equals(a, b) {
150
+ const a0 = a[0];
151
+ const a1 = a[1];
152
+ const a2 = a[2];
153
+ const a3 = a[3];
154
+ const a4 = a[4];
155
+ const a5 = a[5];
156
+ const a6 = a[6];
157
+ const a7 = a[7];
158
+ const a8 = a[8];
159
+ const b0 = b[0];
160
+ const b1 = b[1];
161
+ const b2 = b[2];
162
+ const b3 = b[3];
163
+ const b4 = b[4];
164
+ const b5 = b[5];
165
+ const b6 = b[6];
166
+ const b7 = b[7];
167
+ const b8 = b[8];
168
+ return (Math.abs(a0 - b0) <= epsilon * Math.max(1, Math.abs(a0), Math.abs(b0))
169
+ && Math.abs(a1 - b1) <= epsilon * Math.max(1, Math.abs(a1), Math.abs(b1))
170
+ && Math.abs(a2 - b2) <= epsilon * Math.max(1, Math.abs(a2), Math.abs(b2))
171
+ && Math.abs(a3 - b3) <= epsilon * Math.max(1, Math.abs(a3), Math.abs(b3))
172
+ && Math.abs(a4 - b4) <= epsilon * Math.max(1, Math.abs(a4), Math.abs(b4))
173
+ && Math.abs(a5 - b5) <= epsilon * Math.max(1, Math.abs(a5), Math.abs(b5))
174
+ && Math.abs(a6 - b6) <= epsilon * Math.max(1, Math.abs(a6), Math.abs(b6))
175
+ && Math.abs(a7 - b7) <= epsilon * Math.max(1, Math.abs(a7), Math.abs(b7))
176
+ && Math.abs(a8 - b8) <= epsilon * Math.max(1, Math.abs(a8), Math.abs(b8)));
177
+ }
178
+ export function exactEquals(a, b) {
179
+ return a[0] == b[0]
180
+ && a[1] == b[1]
181
+ && a[2] == b[2]
182
+ && a[3] == b[3]
183
+ && a[4] == b[4]
184
+ && a[5] == b[5]
185
+ && a[6] == b[6]
186
+ && a[7] == b[7]
187
+ && a[8] == b[8];
188
+ }
189
+ export function add(a, b, out) {
190
+ out[0] = a[0] + b[0];
191
+ out[1] = a[1] + b[1];
192
+ out[2] = a[2] + b[2];
193
+ out[3] = a[3] + b[3];
194
+ out[4] = a[4] + b[4];
195
+ out[5] = a[5] + b[5];
196
+ out[6] = a[6] + b[6];
197
+ out[7] = a[7] + b[7];
198
+ out[8] = a[8] + b[8];
199
+ return out;
200
+ }
201
+ export function adjoint(matrix, out) {
202
+ const a00 = matrix[0];
203
+ const a01 = matrix[1];
204
+ const a02 = matrix[2];
205
+ const a10 = matrix[3];
206
+ const a11 = matrix[4];
207
+ const a12 = matrix[5];
208
+ const a20 = matrix[6];
209
+ const a21 = matrix[7];
210
+ const a22 = matrix[8];
211
+ out[0] = a11 * a22 - a12 * a21;
212
+ out[1] = a02 * a21 - a01 * a22;
213
+ out[2] = a01 * a12 - a02 * a11;
214
+ out[3] = a12 * a20 - a10 * a22;
215
+ out[4] = a00 * a22 - a02 * a20;
216
+ out[5] = a02 * a10 - a00 * a12;
217
+ out[6] = a10 * a21 - a11 * a20;
218
+ out[7] = a01 * a20 - a00 * a21;
219
+ out[8] = a00 * a11 - a01 * a10;
220
+ return out;
221
+ }
222
+ export function copy(matrix, out) {
223
+ out[0] = matrix[0];
224
+ out[1] = matrix[1];
225
+ out[2] = matrix[2];
226
+ out[3] = matrix[3];
227
+ out[4] = matrix[4];
228
+ out[5] = matrix[5];
229
+ out[6] = matrix[6];
230
+ out[7] = matrix[7];
231
+ out[8] = matrix[8];
232
+ return out;
233
+ }
234
+ export function frob(matrix) {
235
+ return Math.hypot(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5], matrix[6], matrix[7], matrix[8]);
236
+ }
237
+ export function multiply(a, b, out) {
238
+ const a00 = a[0];
239
+ const a01 = a[1];
240
+ const a02 = a[2];
241
+ const a10 = a[3];
242
+ const a11 = a[4];
243
+ const a12 = a[5];
244
+ const a20 = a[6];
245
+ const a21 = a[7];
246
+ const a22 = a[8];
247
+ const b00 = b[0];
248
+ const b01 = b[1];
249
+ const b02 = b[2];
250
+ const b10 = b[3];
251
+ const b11 = b[4];
252
+ const b12 = b[5];
253
+ const b20 = b[6];
254
+ const b21 = b[7];
255
+ const b22 = b[8];
256
+ out[0] = b00 * a00 + b01 * a10 + b02 * a20;
257
+ out[1] = b00 * a01 + b01 * a11 + b02 * a21;
258
+ out[2] = b00 * a02 + b01 * a12 + b02 * a22;
259
+ out[3] = b10 * a00 + b11 * a10 + b12 * a20;
260
+ out[4] = b10 * a01 + b11 * a11 + b12 * a21;
261
+ out[5] = b10 * a02 + b11 * a12 + b12 * a22;
262
+ out[6] = b20 * a00 + b21 * a10 + b22 * a20;
263
+ out[7] = b20 * a01 + b21 * a11 + b22 * a21;
264
+ out[8] = b20 * a02 + b21 * a12 + b22 * a22;
265
+ return out;
266
+ }
267
+ export function multiplyScalar(matrix, scalar, out) {
268
+ out[0] = matrix[0] * scalar;
269
+ out[1] = matrix[1] * scalar;
270
+ out[2] = matrix[2] * scalar;
271
+ out[3] = matrix[3] * scalar;
272
+ out[4] = matrix[4] * scalar;
273
+ out[5] = matrix[5] * scalar;
274
+ out[6] = matrix[6] * scalar;
275
+ out[7] = matrix[7] * scalar;
276
+ out[8] = matrix[8] * scalar;
277
+ return out;
278
+ }
279
+ export function multiplyScalarAndAdd(a, b, scalar, out) {
280
+ out[0] = a[0] + b[0] * scalar;
281
+ out[1] = a[1] + b[1] * scalar;
282
+ out[2] = a[2] + b[2] * scalar;
283
+ out[3] = a[3] + b[3] * scalar;
284
+ out[4] = a[4] + b[4] * scalar;
285
+ out[5] = a[5] + b[5] * scalar;
286
+ out[6] = a[6] + b[6] * scalar;
287
+ out[7] = a[7] + b[7] * scalar;
288
+ out[8] = a[8] + b[8] * scalar;
289
+ return out;
290
+ }
291
+ export function subtract(a, b, out) {
292
+ out[0] = a[0] - b[0];
293
+ out[1] = a[1] - b[1];
294
+ out[2] = a[2] - b[2];
295
+ out[3] = a[3] - b[3];
296
+ out[4] = a[4] - b[4];
297
+ out[5] = a[5] - b[5];
298
+ out[6] = a[6] - b[6];
299
+ out[7] = a[7] - b[7];
300
+ out[8] = a[8] - b[8];
301
+ return out;
302
+ }
303
+ export function transpose(matrix, out) {
304
+ if (out == matrix) {
305
+ const a01 = matrix[1];
306
+ const a02 = matrix[2];
307
+ const a12 = matrix[5];
308
+ out[1] = matrix[3];
309
+ out[2] = matrix[6];
310
+ out[3] = a01;
311
+ out[5] = matrix[7];
312
+ out[6] = a02;
313
+ out[7] = a12;
314
+ }
315
+ else {
316
+ out[0] = matrix[0];
317
+ out[1] = matrix[3];
318
+ out[2] = matrix[6];
319
+ out[3] = matrix[1];
320
+ out[4] = matrix[4];
321
+ out[5] = matrix[7];
322
+ out[6] = matrix[2];
323
+ out[7] = matrix[5];
324
+ out[8] = matrix[8];
325
+ }
326
+ return out;
327
+ }
328
+ export function determinant(matrix) {
329
+ const a00 = matrix[0];
330
+ const a01 = matrix[1];
331
+ const a02 = matrix[2];
332
+ const a10 = matrix[3];
333
+ const a11 = matrix[4];
334
+ const a12 = matrix[5];
335
+ const a20 = matrix[6];
336
+ const a21 = matrix[7];
337
+ const a22 = matrix[8];
338
+ return (a00 * (a22 * a11 - a12 * a21)
339
+ + a01 * (-a22 * a10 + a12 * a20)
340
+ + a02 * (a21 * a10 - a11 * a20));
341
+ }
342
+ export function identity(out) {
343
+ out[0] = 1;
344
+ out[1] = 0;
345
+ out[2] = 0;
346
+ out[3] = 0;
347
+ out[4] = 1;
348
+ out[5] = 0;
349
+ out[6] = 0;
350
+ out[7] = 0;
351
+ out[8] = 1;
352
+ return out;
353
+ }
354
+ export function invert(matrix, out) {
355
+ const a00 = matrix[0];
356
+ const a01 = matrix[1];
357
+ const a02 = matrix[2];
358
+ const a10 = matrix[3];
359
+ const a11 = matrix[4];
360
+ const a12 = matrix[5];
361
+ const a20 = matrix[6];
362
+ const a21 = matrix[7];
363
+ const a22 = matrix[8];
364
+ const b01 = a22 * a11 - a12 * a21;
365
+ const b11 = -a22 * a10 + a12 * a20;
366
+ const b21 = a21 * a10 - a11 * a20;
367
+ let determinant = a00 * b01 + a01 * b11 + a02 * b21;
368
+ if (!determinant) {
369
+ throw new SingularMatrixError();
370
+ }
371
+ determinant = 1 / determinant;
372
+ out[0] = b01 * determinant;
373
+ out[1] = (-a22 * a01 + a02 * a21) * determinant;
374
+ out[2] = (a12 * a01 - a02 * a11) * determinant;
375
+ out[3] = b11 * determinant;
376
+ out[4] = (a22 * a00 - a02 * a20) * determinant;
377
+ out[5] = (-a12 * a00 + a02 * a10) * determinant;
378
+ out[6] = b21 * determinant;
379
+ out[7] = (-a21 * a00 + a01 * a20) * determinant;
380
+ out[8] = (a11 * a00 - a01 * a10) * determinant;
381
+ return out;
382
+ }
383
+ export function rotate(matrix, radians, out) {
384
+ const a00 = matrix[0];
385
+ const a01 = matrix[1];
386
+ const a02 = matrix[2];
387
+ const a10 = matrix[3];
388
+ const a11 = matrix[4];
389
+ const a12 = matrix[5];
390
+ const a20 = matrix[6];
391
+ const a21 = matrix[7];
392
+ const a22 = matrix[8];
393
+ const s = Math.sin(radians);
394
+ const c = Math.cos(radians);
395
+ out[0] = c * a00 + s * a10;
396
+ out[1] = c * a01 + s * a11;
397
+ out[2] = c * a02 + s * a12;
398
+ out[3] = c * a10 - s * a00;
399
+ out[4] = c * a11 - s * a01;
400
+ out[5] = c * a12 - s * a02;
401
+ out[6] = a20;
402
+ out[7] = a21;
403
+ out[8] = a22;
404
+ return out;
405
+ }
406
+ export function scale(matrix, vector, out) {
407
+ const x = vector[0];
408
+ const y = vector[1];
409
+ out[0] = matrix[0] * x;
410
+ out[1] = matrix[1] * x;
411
+ out[2] = matrix[2] * x;
412
+ out[3] = matrix[3] * y;
413
+ out[4] = matrix[4] * y;
414
+ out[5] = matrix[5] * y;
415
+ out[6] = matrix[6];
416
+ out[7] = matrix[7];
417
+ out[8] = matrix[8];
418
+ return out;
419
+ }
420
+ export function translate(matrix, vector, out) {
421
+ const a00 = matrix[0];
422
+ const a01 = matrix[1];
423
+ const a02 = matrix[2];
424
+ const a10 = matrix[3];
425
+ const a11 = matrix[4];
426
+ const a12 = matrix[5];
427
+ const a20 = matrix[6];
428
+ const a21 = matrix[7];
429
+ const a22 = matrix[8];
430
+ const x = vector[0];
431
+ const y = vector[1];
432
+ out[0] = a00;
433
+ out[1] = a01;
434
+ out[2] = a02;
435
+ out[3] = a10;
436
+ out[4] = a11;
437
+ out[5] = a12;
438
+ out[6] = x * a00 + y * a10 + a20;
439
+ out[7] = x * a01 + y * a11 + a21;
440
+ out[8] = x * a02 + y * a12 + a22;
441
+ return out;
442
+ }
443
+ export default class Matrix3 extends Float32Array {
444
+ static fromRotation(radians, out = new Matrix3()) {
445
+ return fromRotation(radians, out);
446
+ }
447
+ static fromScaling(vector, out = new Matrix3()) {
448
+ return fromScaling(vector, out);
449
+ }
450
+ static fromTranslation(vector, out = new Matrix3()) {
451
+ return fromTranslation(vector, out);
452
+ }
453
+ static fromQuaternion(quaternion, out = new Matrix3()) {
454
+ return fromQuaternion(quaternion, out);
455
+ }
456
+ static normalFromMatrix4(matrix, out = new Matrix3()) {
457
+ return normalFromMatrix4(matrix, out);
458
+ }
459
+ static projection(width, height, out = new Matrix3()) {
460
+ return projection(width, height, out);
461
+ }
462
+ static fromMatrix4(matrix, out = new Matrix3()) {
463
+ return fromMatrix4(matrix, out);
464
+ }
465
+ static fromValues(c0r0, c0r1, c0r2, c1r0, c1r1, c1r2, c2r0, c2r1, c2r2, out = new Matrix3()) {
466
+ return fromValues(c0r0, c0r1, c0r2, c1r0, c1r1, c1r2, c2r0, c2r1, c2r2, out);
467
+ }
468
+ constructor() {
469
+ super(9);
470
+ this[0] = 1;
471
+ this[4] = 1;
472
+ this[8] = 1;
473
+ this.width = 3;
474
+ this.height = 3;
475
+ }
476
+ width;
477
+ height;
478
+ equals(matrix) {
479
+ return equals(this, matrix);
480
+ }
481
+ exactEquals(matrix) {
482
+ return exactEquals(this, matrix);
483
+ }
484
+ add(matrix, out = new Matrix3()) {
485
+ return add(this, matrix, out);
486
+ }
487
+ adjoint(out = new Matrix3()) {
488
+ return adjoint(this, out);
489
+ }
490
+ clone() {
491
+ return copy(this, new Matrix3());
492
+ }
493
+ copy(matrix) {
494
+ return copy(matrix, this);
495
+ }
496
+ get frob() {
497
+ return frob(this);
498
+ }
499
+ multiply(matrix, out = new Matrix3()) {
500
+ return multiply(this, matrix, out);
501
+ }
502
+ multiplyScalar(scalar, out = new Matrix3()) {
503
+ return multiplyScalar(this, scalar, out);
504
+ }
505
+ multiplyScalarAndAdd(matrix, scalar, out = new Matrix3()) {
506
+ return multiplyScalarAndAdd(this, matrix, scalar, out);
507
+ }
508
+ subtract(matrix, out = new Matrix3()) {
509
+ return subtract(this, matrix, out);
510
+ }
511
+ transpose(out = new Matrix3()) {
512
+ return transpose(this, out);
513
+ }
514
+ get determinant() {
515
+ return determinant(this);
516
+ }
517
+ identity() {
518
+ return identity(this);
519
+ }
520
+ invert(out = new Matrix3()) {
521
+ return invert(this, out);
522
+ }
523
+ rotate(radians, out = new Matrix3()) {
524
+ return rotate(this, radians, out);
525
+ }
526
+ scale(vector, out = new Matrix3()) {
527
+ return scale(this, vector, out);
528
+ }
529
+ translate(vector, out = new Matrix3()) {
530
+ return translate(this, vector, out);
531
+ }
532
+ }
533
+ //# sourceMappingURL=Matrix3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Matrix3.js","sourceRoot":"","sources":["../../src/linear/Matrix3.ts"],"names":[],"mappings":"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AC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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"}