@math.gl/core 3.6.3 → 4.0.0-alpha.2

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 (210) hide show
  1. package/dist/classes/base/math-array.d.ts +5 -4
  2. package/dist/classes/base/math-array.d.ts.map +1 -1
  3. package/dist/{esm/classes → classes}/base/math-array.js +8 -3
  4. package/dist/classes/base/math-array.js.map +1 -0
  5. package/dist/classes/base/matrix.d.ts +2 -2
  6. package/dist/classes/base/matrix.d.ts.map +1 -1
  7. package/dist/{esm/classes → classes}/base/matrix.js +4 -4
  8. package/dist/classes/base/matrix.js.map +1 -0
  9. package/dist/classes/base/vector.d.ts +2 -2
  10. package/dist/classes/base/vector.d.ts.map +1 -1
  11. package/dist/{esm/classes → classes}/base/vector.js +4 -4
  12. package/dist/classes/base/vector.js.map +1 -0
  13. package/dist/classes/euler.d.ts +4 -4
  14. package/dist/classes/euler.d.ts.map +1 -1
  15. package/dist/{esm/classes → classes}/euler.js +6 -6
  16. package/dist/classes/euler.js.map +1 -0
  17. package/dist/classes/matrix3.d.ts +5 -2
  18. package/dist/classes/matrix3.d.ts.map +1 -1
  19. package/dist/{esm/classes → classes}/matrix3.js +20 -20
  20. package/dist/classes/matrix3.js.map +1 -0
  21. package/dist/classes/matrix4.d.ts +2 -2
  22. package/dist/classes/matrix4.d.ts.map +1 -1
  23. package/dist/{esm/classes → classes}/matrix4.js +27 -27
  24. package/dist/classes/matrix4.js.map +1 -0
  25. package/dist/classes/pose.d.ts +4 -4
  26. package/dist/classes/pose.d.ts.map +1 -1
  27. package/dist/{esm/classes → classes}/pose.js +4 -4
  28. package/dist/classes/pose.js.map +1 -0
  29. package/dist/classes/quaternion.d.ts +2 -2
  30. package/dist/classes/quaternion.d.ts.map +1 -1
  31. package/dist/{esm/classes → classes}/quaternion.js +26 -26
  32. package/dist/classes/quaternion.js.map +1 -0
  33. package/dist/classes/spherical-coordinates.d.ts +2 -2
  34. package/dist/classes/spherical-coordinates.d.ts.map +1 -1
  35. package/dist/{esm/classes → classes}/spherical-coordinates.js +5 -5
  36. package/dist/classes/spherical-coordinates.js.map +1 -0
  37. package/dist/classes/vector2.d.ts +2 -2
  38. package/dist/classes/vector2.d.ts.map +1 -1
  39. package/dist/{esm/classes → classes}/vector2.js +10 -10
  40. package/dist/classes/vector2.js.map +1 -0
  41. package/dist/classes/vector3.d.ts +2 -2
  42. package/dist/classes/vector3.d.ts.map +1 -1
  43. package/dist/{esm/classes → classes}/vector3.js +14 -14
  44. package/dist/classes/vector3.js.map +1 -0
  45. package/dist/classes/vector4.d.ts +3 -3
  46. package/dist/classes/vector4.d.ts.map +1 -1
  47. package/dist/{esm/classes → classes}/vector4.js +8 -8
  48. package/dist/classes/vector4.js.map +1 -0
  49. package/dist/gl-matrix/common.d.ts +38 -0
  50. package/dist/gl-matrix/common.d.ts.map +1 -0
  51. package/dist/gl-matrix/common.js +19 -0
  52. package/dist/gl-matrix/common.js.map +1 -0
  53. package/dist/gl-matrix/mat3.d.ts +295 -0
  54. package/dist/gl-matrix/mat3.d.ts.map +1 -0
  55. package/dist/gl-matrix/mat3.js +489 -0
  56. package/dist/gl-matrix/mat3.js.map +1 -0
  57. package/dist/gl-matrix/mat4.d.ts +577 -0
  58. package/dist/gl-matrix/mat4.d.ts.map +1 -0
  59. package/dist/gl-matrix/mat4.js +1455 -0
  60. package/dist/gl-matrix/mat4.js.map +1 -0
  61. package/dist/gl-matrix/quat.d.ts +357 -0
  62. package/dist/gl-matrix/quat.d.ts.map +1 -0
  63. package/dist/gl-matrix/quat.js +315 -0
  64. package/dist/gl-matrix/quat.js.map +1 -0
  65. package/dist/gl-matrix/vec2.d.ts +373 -0
  66. package/dist/gl-matrix/vec2.d.ts.map +1 -0
  67. package/dist/gl-matrix/vec2.js +257 -0
  68. package/dist/gl-matrix/vec2.js.map +1 -0
  69. package/dist/gl-matrix/vec3.d.ts +416 -0
  70. package/dist/gl-matrix/vec3.d.ts.map +1 -0
  71. package/dist/gl-matrix/vec3.js +384 -0
  72. package/dist/gl-matrix/vec3.js.map +1 -0
  73. package/dist/gl-matrix/vec4.d.ts +340 -0
  74. package/dist/gl-matrix/vec4.d.ts.map +1 -0
  75. package/dist/gl-matrix/vec4.js +334 -0
  76. package/dist/gl-matrix/vec4.js.map +1 -0
  77. package/dist/gl-matrix/wip/index.d.ts +5 -0
  78. package/dist/gl-matrix/wip/index.d.ts.map +1 -0
  79. package/dist/gl-matrix/wip/index.js +12 -0
  80. package/dist/gl-matrix/wip/index.js.map +1 -0
  81. package/dist/gl-matrix/wip/mat2.d.ts +229 -0
  82. package/dist/gl-matrix/wip/mat2.d.ts.map +1 -0
  83. package/dist/gl-matrix/wip/mat2.js +208 -0
  84. package/dist/gl-matrix/wip/mat2.js.map +1 -0
  85. package/dist/gl-matrix/wip/mat2d.d.ts +244 -0
  86. package/dist/gl-matrix/wip/mat2d.d.ts.map +1 -0
  87. package/dist/gl-matrix/wip/mat2d.js +251 -0
  88. package/dist/gl-matrix/wip/mat2d.js.map +1 -0
  89. package/dist/gl-matrix/wip/quat2.d.ts +352 -0
  90. package/dist/gl-matrix/wip/quat2.d.ts.map +1 -0
  91. package/dist/gl-matrix/wip/quat2.js +482 -0
  92. package/dist/gl-matrix/wip/quat2.js.map +1 -0
  93. package/dist/gl-matrix/wip/types.d.js +2 -0
  94. package/dist/{esm/lib/gl-matrix.d.js.map → gl-matrix/wip/types.d.js.map} +1 -1
  95. package/dist/index.cjs +3788 -0
  96. package/dist/index.d.ts +15 -14
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +17 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/lib/assert.d.ts +1 -1
  101. package/dist/lib/assert.d.ts.map +1 -1
  102. package/dist/lib/assert.js +6 -0
  103. package/dist/lib/assert.js.map +1 -0
  104. package/dist/lib/common.d.ts +10 -5
  105. package/dist/lib/common.d.ts.map +1 -1
  106. package/dist/{esm/lib → lib}/common.js +11 -9
  107. package/dist/lib/common.js.map +1 -0
  108. package/dist/lib/gl-matrix-extras.js.map +1 -0
  109. package/dist/lib/math-utils.d.ts +24 -27
  110. package/dist/lib/math-utils.d.ts.map +1 -1
  111. package/dist/lib/math-utils.js +25 -0
  112. package/dist/lib/math-utils.js.map +1 -0
  113. package/dist/lib/validators.d.ts +1 -1
  114. package/dist/lib/validators.d.ts.map +1 -1
  115. package/dist/{esm/lib → lib}/validators.js +2 -2
  116. package/dist/lib/validators.js.map +1 -0
  117. package/package.json +6 -6
  118. package/src/classes/base/math-array.ts +16 -8
  119. package/src/classes/base/matrix.ts +7 -4
  120. package/src/classes/base/vector.ts +4 -4
  121. package/src/classes/euler.ts +9 -8
  122. package/src/classes/matrix3.ts +37 -24
  123. package/src/classes/matrix4.ts +48 -29
  124. package/src/classes/pose.ts +4 -4
  125. package/src/classes/quaternion.ts +54 -32
  126. package/src/classes/spherical-coordinates.ts +5 -4
  127. package/src/classes/vector2.ts +13 -9
  128. package/src/classes/vector3.ts +26 -12
  129. package/src/classes/vector4.ts +14 -10
  130. package/src/gl-matrix/common.js +58 -0
  131. package/src/gl-matrix/mat3.js +842 -0
  132. package/src/gl-matrix/mat4.js +2169 -0
  133. package/src/gl-matrix/quat.ts +789 -0
  134. package/src/gl-matrix/vec2.js +629 -0
  135. package/src/gl-matrix/vec3.js +827 -0
  136. package/src/gl-matrix/vec4.js +675 -0
  137. package/src/gl-matrix/wip/index.js +15 -0
  138. package/src/gl-matrix/wip/mat2.js +442 -0
  139. package/src/gl-matrix/wip/mat2d.js +505 -0
  140. package/src/gl-matrix/wip/quat2.ts +886 -0
  141. package/src/gl-matrix/wip/types.d.ts +93 -0
  142. package/src/index.ts +16 -14
  143. package/src/lib/assert.ts +1 -1
  144. package/src/lib/common.ts +31 -19
  145. package/src/lib/math-utils.ts +24 -26
  146. package/src/lib/validators.ts +3 -3
  147. package/dist/es5/classes/base/math-array.js +0 -348
  148. package/dist/es5/classes/base/math-array.js.map +0 -1
  149. package/dist/es5/classes/base/matrix.js +0 -108
  150. package/dist/es5/classes/base/matrix.js.map +0 -1
  151. package/dist/es5/classes/base/vector.js +0 -210
  152. package/dist/es5/classes/base/vector.js.map +0 -1
  153. package/dist/es5/classes/euler.js +0 -654
  154. package/dist/es5/classes/euler.js.map +0 -1
  155. package/dist/es5/classes/matrix3.js +0 -284
  156. package/dist/es5/classes/matrix3.js.map +0 -1
  157. package/dist/es5/classes/matrix4.js +0 -574
  158. package/dist/es5/classes/matrix4.js.map +0 -1
  159. package/dist/es5/classes/pose.js +0 -159
  160. package/dist/es5/classes/pose.js.map +0 -1
  161. package/dist/es5/classes/quaternion.js +0 -323
  162. package/dist/es5/classes/quaternion.js.map +0 -1
  163. package/dist/es5/classes/spherical-coordinates.js +0 -208
  164. package/dist/es5/classes/spherical-coordinates.js.map +0 -1
  165. package/dist/es5/classes/vector2.js +0 -156
  166. package/dist/es5/classes/vector2.js.map +0 -1
  167. package/dist/es5/classes/vector3.js +0 -213
  168. package/dist/es5/classes/vector3.js.map +0 -1
  169. package/dist/es5/classes/vector4.js +0 -185
  170. package/dist/es5/classes/vector4.js.map +0 -1
  171. package/dist/es5/docs/README.md +0 -0
  172. package/dist/es5/index.js +0 -236
  173. package/dist/es5/index.js.map +0 -1
  174. package/dist/es5/lib/assert.js +0 -13
  175. package/dist/es5/lib/assert.js.map +0 -1
  176. package/dist/es5/lib/common.js +0 -255
  177. package/dist/es5/lib/common.js.map +0 -1
  178. package/dist/es5/lib/gl-matrix-extras.js +0 -61
  179. package/dist/es5/lib/gl-matrix-extras.js.map +0 -1
  180. package/dist/es5/lib/gl-matrix.d.js +0 -2
  181. package/dist/es5/lib/math-utils.js +0 -34
  182. package/dist/es5/lib/math-utils.js.map +0 -1
  183. package/dist/es5/lib/validators.js +0 -53
  184. package/dist/es5/lib/validators.js.map +0 -1
  185. package/dist/esm/classes/base/math-array.js.map +0 -1
  186. package/dist/esm/classes/base/matrix.js.map +0 -1
  187. package/dist/esm/classes/base/vector.js.map +0 -1
  188. package/dist/esm/classes/euler.js.map +0 -1
  189. package/dist/esm/classes/matrix3.js.map +0 -1
  190. package/dist/esm/classes/matrix4.js.map +0 -1
  191. package/dist/esm/classes/pose.js.map +0 -1
  192. package/dist/esm/classes/quaternion.js.map +0 -1
  193. package/dist/esm/classes/spherical-coordinates.js.map +0 -1
  194. package/dist/esm/classes/vector2.js.map +0 -1
  195. package/dist/esm/classes/vector3.js.map +0 -1
  196. package/dist/esm/classes/vector4.js.map +0 -1
  197. package/dist/esm/docs/README.md +0 -0
  198. package/dist/esm/index.js +0 -16
  199. package/dist/esm/index.js.map +0 -1
  200. package/dist/esm/lib/assert.js +0 -6
  201. package/dist/esm/lib/assert.js.map +0 -1
  202. package/dist/esm/lib/common.js.map +0 -1
  203. package/dist/esm/lib/gl-matrix-extras.js.map +0 -1
  204. package/dist/esm/lib/math-utils.js +0 -27
  205. package/dist/esm/lib/math-utils.js.map +0 -1
  206. package/dist/esm/lib/validators.js.map +0 -1
  207. package/src/docs/README.md +0 -0
  208. /package/dist/{esm/lib → lib}/gl-matrix-extras.js +0 -0
  209. /package/dist/{esm/lib → lib}/gl-matrix.d.js +0 -0
  210. /package/dist/{es5/lib → lib}/gl-matrix.d.js.map +0 -0
@@ -0,0 +1,442 @@
1
+ // @ts-nocheck
2
+ /* eslint-disable */
3
+
4
+ import * as glMatrix from './common.js';
5
+
6
+ /**
7
+ * 2x2 Matrix
8
+ * @module mat2
9
+ */
10
+
11
+ /**
12
+ * Creates a new identity mat2
13
+ *
14
+ * @returns {mat2} a new 2x2 matrix
15
+ */
16
+ export function create() {
17
+ let out = new glMatrix.ARRAY_TYPE(4);
18
+ if (glMatrix.ARRAY_TYPE != Float32Array) {
19
+ out[1] = 0;
20
+ out[2] = 0;
21
+ }
22
+ out[0] = 1;
23
+ out[3] = 1;
24
+ return out;
25
+ }
26
+
27
+ /**
28
+ * Creates a new mat2 initialized with values from an existing matrix
29
+ *
30
+ * @param {ReadonlyMat2} a matrix to clone
31
+ * @returns {mat2} a new 2x2 matrix
32
+ */
33
+ export function clone(a) {
34
+ let out = new glMatrix.ARRAY_TYPE(4);
35
+ out[0] = a[0];
36
+ out[1] = a[1];
37
+ out[2] = a[2];
38
+ out[3] = a[3];
39
+ return out;
40
+ }
41
+
42
+ /**
43
+ * Copy the values from one mat2 to another
44
+ *
45
+ * @param {mat2} out the receiving matrix
46
+ * @param {ReadonlyMat2} a the source matrix
47
+ * @returns {mat2} out
48
+ */
49
+ export function copy(out, a) {
50
+ out[0] = a[0];
51
+ out[1] = a[1];
52
+ out[2] = a[2];
53
+ out[3] = a[3];
54
+ return out;
55
+ }
56
+
57
+ /**
58
+ * Set a mat2 to the identity matrix
59
+ *
60
+ * @param {mat2} out the receiving matrix
61
+ * @returns {mat2} out
62
+ */
63
+ export function identity(out) {
64
+ out[0] = 1;
65
+ out[1] = 0;
66
+ out[2] = 0;
67
+ out[3] = 1;
68
+ return out;
69
+ }
70
+
71
+ /**
72
+ * Create a new mat2 with the given values
73
+ *
74
+ * @param {Number} m00 Component in column 0, row 0 position (index 0)
75
+ * @param {Number} m01 Component in column 0, row 1 position (index 1)
76
+ * @param {Number} m10 Component in column 1, row 0 position (index 2)
77
+ * @param {Number} m11 Component in column 1, row 1 position (index 3)
78
+ * @returns {mat2} out A new 2x2 matrix
79
+ */
80
+ export function fromValues(m00, m01, m10, m11) {
81
+ let out = new glMatrix.ARRAY_TYPE(4);
82
+ out[0] = m00;
83
+ out[1] = m01;
84
+ out[2] = m10;
85
+ out[3] = m11;
86
+ return out;
87
+ }
88
+
89
+ /**
90
+ * Set the components of a mat2 to the given values
91
+ *
92
+ * @param {mat2} out the receiving matrix
93
+ * @param {Number} m00 Component in column 0, row 0 position (index 0)
94
+ * @param {Number} m01 Component in column 0, row 1 position (index 1)
95
+ * @param {Number} m10 Component in column 1, row 0 position (index 2)
96
+ * @param {Number} m11 Component in column 1, row 1 position (index 3)
97
+ * @returns {mat2} out
98
+ */
99
+ export function set(out, m00, m01, m10, m11) {
100
+ out[0] = m00;
101
+ out[1] = m01;
102
+ out[2] = m10;
103
+ out[3] = m11;
104
+ return out;
105
+ }
106
+
107
+ /**
108
+ * Transpose the values of a mat2
109
+ *
110
+ * @param {mat2} out the receiving matrix
111
+ * @param {ReadonlyMat2} a the source matrix
112
+ * @returns {mat2} out
113
+ */
114
+ export function transpose(out, a) {
115
+ // If we are transposing ourselves we can skip a few steps but have to cache
116
+ // some values
117
+ if (out === a) {
118
+ let a1 = a[1];
119
+ out[1] = a[2];
120
+ out[2] = a1;
121
+ } else {
122
+ out[0] = a[0];
123
+ out[1] = a[2];
124
+ out[2] = a[1];
125
+ out[3] = a[3];
126
+ }
127
+
128
+ return out;
129
+ }
130
+
131
+ /**
132
+ * Inverts a mat2
133
+ *
134
+ * @param {mat2} out the receiving matrix
135
+ * @param {ReadonlyMat2} a the source matrix
136
+ * @returns {mat2} out
137
+ */
138
+ export function invert(out, a) {
139
+ let a0 = a[0],
140
+ a1 = a[1],
141
+ a2 = a[2],
142
+ a3 = a[3];
143
+
144
+ // Calculate the determinant
145
+ let det = a0 * a3 - a2 * a1;
146
+
147
+ if (!det) {
148
+ return null;
149
+ }
150
+ det = 1.0 / det;
151
+
152
+ out[0] = a3 * det;
153
+ out[1] = -a1 * det;
154
+ out[2] = -a2 * det;
155
+ out[3] = a0 * det;
156
+
157
+ return out;
158
+ }
159
+
160
+ /**
161
+ * Calculates the adjugate of a mat2
162
+ *
163
+ * @param {mat2} out the receiving matrix
164
+ * @param {ReadonlyMat2} a the source matrix
165
+ * @returns {mat2} out
166
+ */
167
+ export function adjoint(out, a) {
168
+ // Caching this value is necessary if out == a
169
+ let a0 = a[0];
170
+ out[0] = a[3];
171
+ out[1] = -a[1];
172
+ out[2] = -a[2];
173
+ out[3] = a0;
174
+
175
+ return out;
176
+ }
177
+
178
+ /**
179
+ * Calculates the determinant of a mat2
180
+ *
181
+ * @param {ReadonlyMat2} a the source matrix
182
+ * @returns {Number} determinant of a
183
+ */
184
+ export function determinant(a) {
185
+ return a[0] * a[3] - a[2] * a[1];
186
+ }
187
+
188
+ /**
189
+ * Multiplies two mat2's
190
+ *
191
+ * @param {mat2} out the receiving matrix
192
+ * @param {ReadonlyMat2} a the first operand
193
+ * @param {ReadonlyMat2} b the second operand
194
+ * @returns {mat2} out
195
+ */
196
+ export function multiply(out, a, b) {
197
+ let a0 = a[0],
198
+ a1 = a[1],
199
+ a2 = a[2],
200
+ a3 = a[3];
201
+ let b0 = b[0],
202
+ b1 = b[1],
203
+ b2 = b[2],
204
+ b3 = b[3];
205
+ out[0] = a0 * b0 + a2 * b1;
206
+ out[1] = a1 * b0 + a3 * b1;
207
+ out[2] = a0 * b2 + a2 * b3;
208
+ out[3] = a1 * b2 + a3 * b3;
209
+ return out;
210
+ }
211
+
212
+ /**
213
+ * Rotates a mat2 by the given angle
214
+ *
215
+ * @param {mat2} out the receiving matrix
216
+ * @param {ReadonlyMat2} a the matrix to rotate
217
+ * @param {Number} rad the angle to rotate the matrix by
218
+ * @returns {mat2} out
219
+ */
220
+ export function rotate(out, a, rad) {
221
+ let a0 = a[0],
222
+ a1 = a[1],
223
+ a2 = a[2],
224
+ a3 = a[3];
225
+ let s = Math.sin(rad);
226
+ let c = Math.cos(rad);
227
+ out[0] = a0 * c + a2 * s;
228
+ out[1] = a1 * c + a3 * s;
229
+ out[2] = a0 * -s + a2 * c;
230
+ out[3] = a1 * -s + a3 * c;
231
+ return out;
232
+ }
233
+
234
+ /**
235
+ * Scales the mat2 by the dimensions in the given vec2
236
+ *
237
+ * @param {mat2} out the receiving matrix
238
+ * @param {ReadonlyMat2} a the matrix to rotate
239
+ * @param {ReadonlyVec2} v the vec2 to scale the matrix by
240
+ * @returns {mat2} out
241
+ **/
242
+ export function scale(out, a, v) {
243
+ let a0 = a[0],
244
+ a1 = a[1],
245
+ a2 = a[2],
246
+ a3 = a[3];
247
+ let v0 = v[0],
248
+ v1 = v[1];
249
+ out[0] = a0 * v0;
250
+ out[1] = a1 * v0;
251
+ out[2] = a2 * v1;
252
+ out[3] = a3 * v1;
253
+ return out;
254
+ }
255
+
256
+ /**
257
+ * Creates a matrix from a given angle
258
+ * This is equivalent to (but much faster than):
259
+ *
260
+ * mat2.identity(dest);
261
+ * mat2.rotate(dest, dest, rad);
262
+ *
263
+ * @param {mat2} out mat2 receiving operation result
264
+ * @param {Number} rad the angle to rotate the matrix by
265
+ * @returns {mat2} out
266
+ */
267
+ export function fromRotation(out, rad) {
268
+ let s = Math.sin(rad);
269
+ let c = Math.cos(rad);
270
+ out[0] = c;
271
+ out[1] = s;
272
+ out[2] = -s;
273
+ out[3] = c;
274
+ return out;
275
+ }
276
+
277
+ /**
278
+ * Creates a matrix from a vector scaling
279
+ * This is equivalent to (but much faster than):
280
+ *
281
+ * mat2.identity(dest);
282
+ * mat2.scale(dest, dest, vec);
283
+ *
284
+ * @param {mat2} out mat2 receiving operation result
285
+ * @param {ReadonlyVec2} v Scaling vector
286
+ * @returns {mat2} out
287
+ */
288
+ export function fromScaling(out, v) {
289
+ out[0] = v[0];
290
+ out[1] = 0;
291
+ out[2] = 0;
292
+ out[3] = v[1];
293
+ return out;
294
+ }
295
+
296
+ /**
297
+ * Returns a string representation of a mat2
298
+ *
299
+ * @param {ReadonlyMat2} a matrix to represent as a string
300
+ * @returns {String} string representation of the matrix
301
+ */
302
+ export function str(a) {
303
+ return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';
304
+ }
305
+
306
+ /**
307
+ * Returns Frobenius norm of a mat2
308
+ *
309
+ * @param {ReadonlyMat2} a the matrix to calculate Frobenius norm of
310
+ * @returns {Number} Frobenius norm
311
+ */
312
+ export function frob(a) {
313
+ return Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2] + a[3] * a[3]);
314
+ }
315
+
316
+ /**
317
+ * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix
318
+ * @param {ReadonlyMat2} L the lower triangular matrix
319
+ * @param {ReadonlyMat2} D the diagonal matrix
320
+ * @param {ReadonlyMat2} U the upper triangular matrix
321
+ * @param {ReadonlyMat2} a the input matrix to factorize
322
+ */
323
+
324
+ export function LDU(L, D, U, a) {
325
+ L[2] = a[2] / a[0];
326
+ U[0] = a[0];
327
+ U[1] = a[1];
328
+ U[3] = a[3] - L[2] * U[1];
329
+ return [L, D, U];
330
+ }
331
+
332
+ /**
333
+ * Adds two mat2's
334
+ *
335
+ * @param {mat2} out the receiving matrix
336
+ * @param {ReadonlyMat2} a the first operand
337
+ * @param {ReadonlyMat2} b the second operand
338
+ * @returns {mat2} out
339
+ */
340
+ export function add(out, a, b) {
341
+ out[0] = a[0] + b[0];
342
+ out[1] = a[1] + b[1];
343
+ out[2] = a[2] + b[2];
344
+ out[3] = a[3] + b[3];
345
+ return out;
346
+ }
347
+
348
+ /**
349
+ * Subtracts matrix b from matrix a
350
+ *
351
+ * @param {mat2} out the receiving matrix
352
+ * @param {ReadonlyMat2} a the first operand
353
+ * @param {ReadonlyMat2} b the second operand
354
+ * @returns {mat2} out
355
+ */
356
+ export function subtract(out, a, b) {
357
+ out[0] = a[0] - b[0];
358
+ out[1] = a[1] - b[1];
359
+ out[2] = a[2] - b[2];
360
+ out[3] = a[3] - b[3];
361
+ return out;
362
+ }
363
+
364
+ /**
365
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
366
+ *
367
+ * @param {ReadonlyMat2} a The first matrix.
368
+ * @param {ReadonlyMat2} b The second matrix.
369
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
370
+ */
371
+ export function exactEquals(a, b) {
372
+ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
373
+ }
374
+
375
+ /**
376
+ * Returns whether or not the matrices have approximately the same elements in the same position.
377
+ *
378
+ * @param {ReadonlyMat2} a The first matrix.
379
+ * @param {ReadonlyMat2} b The second matrix.
380
+ * @returns {Boolean} True if the matrices are equal, false otherwise.
381
+ */
382
+ export function equals(a, b) {
383
+ let a0 = a[0],
384
+ a1 = a[1],
385
+ a2 = a[2],
386
+ a3 = a[3];
387
+ let b0 = b[0],
388
+ b1 = b[1],
389
+ b2 = b[2],
390
+ b3 = b[3];
391
+ return (
392
+ Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&
393
+ Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&
394
+ Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&
395
+ Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3))
396
+ );
397
+ }
398
+
399
+ /**
400
+ * Multiply each element of the matrix by a scalar.
401
+ *
402
+ * @param {mat2} out the receiving matrix
403
+ * @param {ReadonlyMat2} a the matrix to scale
404
+ * @param {Number} b amount to scale the matrix's elements by
405
+ * @returns {mat2} out
406
+ */
407
+ export function multiplyScalar(out, a, b) {
408
+ out[0] = a[0] * b;
409
+ out[1] = a[1] * b;
410
+ out[2] = a[2] * b;
411
+ out[3] = a[3] * b;
412
+ return out;
413
+ }
414
+
415
+ /**
416
+ * Adds two mat2's after multiplying each element of the second operand by a scalar value.
417
+ *
418
+ * @param {mat2} out the receiving vector
419
+ * @param {ReadonlyMat2} a the first operand
420
+ * @param {ReadonlyMat2} b the second operand
421
+ * @param {Number} scale the amount to scale b's elements by before adding
422
+ * @returns {mat2} out
423
+ */
424
+ export function multiplyScalarAndAdd(out, a, b, scale) {
425
+ out[0] = a[0] + b[0] * scale;
426
+ out[1] = a[1] + b[1] * scale;
427
+ out[2] = a[2] + b[2] * scale;
428
+ out[3] = a[3] + b[3] * scale;
429
+ return out;
430
+ }
431
+
432
+ /**
433
+ * Alias for {@link mat2.multiply}
434
+ * @function
435
+ */
436
+ export const mul = multiply;
437
+
438
+ /**
439
+ * Alias for {@link mat2.subtract}
440
+ * @function
441
+ */
442
+ export const sub = subtract;