@thi.ng/matrices 1.0.4 → 2.0.3

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 (118) hide show
  1. package/CHANGELOG.md +68 -97
  2. package/README.md +26 -16
  3. package/add.d.ts +1 -1
  4. package/add.js +2 -2
  5. package/addn.d.ts +1 -1
  6. package/addn.js +2 -2
  7. package/alignment-quat.d.ts +1 -1
  8. package/alignment-quat.js +5 -2
  9. package/column.d.ts +1 -1
  10. package/column.js +2 -1
  11. package/compile/emit.d.ts +4 -0
  12. package/{internal/codegen.js → compile/emit.js} +2 -1
  13. package/concat.d.ts +1 -1
  14. package/concat.js +1 -1
  15. package/conjugate.d.ts +1 -1
  16. package/conjugate.js +1 -1
  17. package/constants.d.ts +1 -1
  18. package/determinant.d.ts +1 -1
  19. package/determinant.js +1 -1
  20. package/diag.d.ts +5 -5
  21. package/diag.js +2 -1
  22. package/div.d.ts +1 -1
  23. package/div.js +2 -2
  24. package/divn.d.ts +1 -1
  25. package/divn.js +2 -2
  26. package/frustum.d.ts +1 -1
  27. package/frustum.js +2 -2
  28. package/identity.d.ts +5 -5
  29. package/identity.js +3 -3
  30. package/index.d.ts +56 -56
  31. package/index.js +56 -56
  32. package/invert.d.ts +2 -2
  33. package/invert.js +5 -2
  34. package/lookat.d.ts +2 -2
  35. package/lookat.js +5 -1
  36. package/m22-m23.d.ts +1 -1
  37. package/m22-m23.js +1 -1
  38. package/m23-m22.d.ts +1 -1
  39. package/m23-m22.js +1 -1
  40. package/m23-m44.d.ts +1 -1
  41. package/m23-m44.js +1 -1
  42. package/m33-m44.d.ts +1 -1
  43. package/m33-m44.js +1 -1
  44. package/m44-m33.d.ts +1 -1
  45. package/m44-m33.js +1 -1
  46. package/matn.d.ts +1 -1
  47. package/matn.js +1 -1
  48. package/matv.js +1 -1
  49. package/mixq.d.ts +2 -2
  50. package/mixq.js +4 -1
  51. package/mul.d.ts +1 -1
  52. package/mul.js +2 -2
  53. package/mulm.d.ts +5 -5
  54. package/mulm.js +3 -1
  55. package/muln.d.ts +1 -1
  56. package/muln.js +2 -2
  57. package/mulq.d.ts +1 -1
  58. package/mulq.js +1 -1
  59. package/mulv.d.ts +2 -2
  60. package/mulv.js +3 -1
  61. package/mulvm.d.ts +2 -2
  62. package/mulvm.js +3 -1
  63. package/normal-mat.d.ts +1 -1
  64. package/normal-mat.js +3 -3
  65. package/orthagonal.d.ts +1 -1
  66. package/orthagonal.js +2 -1
  67. package/ortho.d.ts +1 -1
  68. package/ortho.js +1 -1
  69. package/outer-product.d.ts +1 -1
  70. package/outer-product.js +2 -1
  71. package/package.json +199 -26
  72. package/perspective.d.ts +1 -1
  73. package/perspective.js +1 -1
  74. package/project.d.ts +2 -2
  75. package/project.js +3 -3
  76. package/quat-axis-angle.d.ts +1 -1
  77. package/quat-axis-angle.js +2 -2
  78. package/quat-euler.d.ts +7 -7
  79. package/quat-euler.js +3 -3
  80. package/quat-m33.d.ts +1 -1
  81. package/quat-m33.js +1 -1
  82. package/quat-m44.d.ts +3 -3
  83. package/quat-m44.js +2 -1
  84. package/rotation-around-axis.d.ts +2 -2
  85. package/rotation-around-axis.js +4 -3
  86. package/rotation.d.ts +1 -1
  87. package/rotation.js +2 -2
  88. package/row.d.ts +5 -5
  89. package/row.js +2 -1
  90. package/scale-center.d.ts +2 -2
  91. package/scale-center.js +4 -4
  92. package/scale.d.ts +1 -1
  93. package/scale.js +2 -2
  94. package/set.d.ts +1 -1
  95. package/set.js +3 -1
  96. package/shear.d.ts +1 -1
  97. package/shear.js +1 -1
  98. package/skew.d.ts +1 -1
  99. package/skew.js +1 -1
  100. package/sub.d.ts +1 -1
  101. package/sub.js +2 -2
  102. package/subn.d.ts +1 -1
  103. package/subn.js +2 -2
  104. package/trace.d.ts +1 -1
  105. package/trace.js +2 -2
  106. package/transform.d.ts +1 -1
  107. package/transform.js +7 -7
  108. package/translation.d.ts +2 -2
  109. package/translation.js +1 -1
  110. package/transpose.d.ts +1 -1
  111. package/transpose.js +1 -1
  112. package/viewport.d.ts +1 -1
  113. package/viewport.js +3 -3
  114. package/internal/codegen.d.ts +0 -4
  115. package/lib/index.js +0 -733
  116. package/lib/index.js.map +0 -1
  117. package/lib/index.umd.js +0 -1
  118. package/lib/index.umd.js.map +0 -1
package/lib/index.js DELETED
@@ -1,733 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var vectors = require('@thi.ng/vectors');
6
- var math = require('@thi.ng/math');
7
- var checks = require('@thi.ng/checks');
8
-
9
- const IDENT22 = Object.freeze([1, 0, 0, 1]);
10
- const IDENT23 = Object.freeze([1, 0, 0, 1, 0, 0]);
11
- const IDENT33 = Object.freeze([
12
- 1, 0, 0,
13
- 0, 1, 0,
14
- 0, 0, 1
15
- ]);
16
- const IDENT44 = Object.freeze([
17
- 1, 0, 0, 0,
18
- 0, 1, 0, 0,
19
- 0, 0, 1, 0,
20
- 0, 0, 0, 1
21
- ]);
22
-
23
- const DEFAULT_SIZES = [6, 9, 16];
24
- const defMath = (fn, op, sizes = DEFAULT_SIZES) => sizes.map((n) => fn.add(n, vectors.compile(n, vectors.MATH(op), vectors.ARGS_VV, undefined, "o", "", vectors.DEFAULT_OUT)));
25
- const defMathN = (fn, op, sizes = DEFAULT_SIZES) => sizes.map((n) => fn.add(n, vectors.compile(n, vectors.MATH_N(op), vectors.ARGS_VN, "o,a", "o", "", vectors.DEFAULT_OUT)));
26
-
27
- const add = vectors.add;
28
- const add22 = vectors.add4;
29
- const [add23, add33, add44] = defMath(add, "+");
30
-
31
- const addN = vectors.addN;
32
- const addN22 = vectors.addN4;
33
- const [addN23, addN33, addN44] = defMathN(addN, "+");
34
-
35
- const quatFromAxisAngle = (axis, theta) => {
36
- theta *= 0.5;
37
- return vectors.normalize([0, 0, 0, Math.cos(theta)], axis, Math.sin(theta));
38
- };
39
- const quatToAxisAngle = (quat) => {
40
- const n = vectors.normalize([], quat);
41
- const w = n[3];
42
- const m = Math.sqrt(1 - w * w);
43
- const theta = 2 * Math.acos(w);
44
- return m > math.EPS
45
- ? [[n[0] / m, n[1] / m, n[2] / m], theta]
46
- : [[n[0], n[1], n[2]], theta];
47
- };
48
-
49
- const alignmentQuat = (from, to, normalize = true) => {
50
- if (normalize) {
51
- from = vectors.normalize([], from);
52
- to = vectors.normalize([], to);
53
- }
54
- const axis = vectors.cross3([], from, to);
55
- return quatFromAxisAngle(axis, Math.atan2(vectors.mag(axis), vectors.dot3(from, to)));
56
- };
57
-
58
- const column = vectors.vop(1);
59
- const column22 = column.add(4, (out, m, n) => vectors.setS2(out, m, 0, n * 2));
60
- const column23 = column.add(6, column22);
61
- const column33 = column.add(9, (out, m, n) => vectors.setS3(out, m, 0, n * 3));
62
- const column44 = column.add(16, (out, m, n) => vectors.setS4(out, m, 0, n * 4));
63
-
64
- const mulM = vectors.vop(1);
65
- const mulM22 = mulM.add(4, (out, a, b) => vectors.setC4(out || a, vectors.dotS2(a, b, 0, 0, 2), vectors.dotS2(a, b, 1, 0, 2), vectors.dotS2(a, b, 0, 2, 2), vectors.dotS2(a, b, 1, 2, 2)));
66
- const mulM23 = mulM.add(6, (out, a, b) => vectors.setC6(out || a, vectors.dotS2(a, b, 0, 0, 2), vectors.dotS2(a, b, 1, 0, 2), vectors.dotS2(a, b, 0, 2, 2), vectors.dotS2(a, b, 1, 2, 2), vectors.dotS2(a, b, 0, 4, 2) + a[4], vectors.dotS2(a, b, 1, 4, 2) + a[5]));
67
- const mulM33 = mulM.add(9, (out, a, b) => vectors.setC(out || a, vectors.dotS3(a, b, 0, 0, 3), vectors.dotS3(a, b, 1, 0, 3), vectors.dotS3(a, b, 2, 0, 3), vectors.dotS3(a, b, 0, 3, 3), vectors.dotS3(a, b, 1, 3, 3), vectors.dotS3(a, b, 2, 3, 3), vectors.dotS3(a, b, 0, 6, 3), vectors.dotS3(a, b, 1, 6, 3), vectors.dotS3(a, b, 2, 6, 3)));
68
- const mulM44 = mulM.add(16, (out, a, b) => vectors.setC(out || a, vectors.dotS4(a, b, 0, 0, 4), vectors.dotS4(a, b, 1, 0, 4), vectors.dotS4(a, b, 2, 0, 4), vectors.dotS4(a, b, 3, 0, 4), vectors.dotS4(a, b, 0, 4, 4), vectors.dotS4(a, b, 1, 4, 4), vectors.dotS4(a, b, 2, 4, 4), vectors.dotS4(a, b, 3, 4, 4), vectors.dotS4(a, b, 0, 8, 4), vectors.dotS4(a, b, 1, 8, 4), vectors.dotS4(a, b, 2, 8, 4), vectors.dotS4(a, b, 3, 8, 4), vectors.dotS4(a, b, 0, 12, 4), vectors.dotS4(a, b, 1, 12, 4), vectors.dotS4(a, b, 2, 12, 4), vectors.dotS4(a, b, 3, 12, 4)));
69
-
70
- const concat = (out, a, b, ...xs) => xs.reduce((acc, x) => mulM(acc, acc, x), mulM(out, a, b));
71
-
72
- const conjugateQ = (out, a) => vectors.setC4(out || a, -a[0], -a[1], -a[2], a[3]);
73
-
74
- const dp4$1 = vectors.dotC4;
75
- const dp6$1 = vectors.dotC6;
76
- const det22 = (m) => dp4$1(m[0], m[3], -m[1], m[2]);
77
- const det23 = det22;
78
- const det33 = (m) => {
79
- const [m00, m01, m02, m10, m11, m12, m20, m21, m22] = m;
80
- const d01 = dp4$1(m22, m11, -m12, m21);
81
- const d11 = dp4$1(m12, m20, -m22, m10);
82
- const d21 = dp4$1(m21, m10, -m11, m20);
83
- return dp6$1(m00, d01, m01, d11, m02, d21);
84
- };
85
- const detCoeffs44 = (m) => {
86
- const [m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33,] = m;
87
- return [
88
- dp4$1(m00, m11, -m01, m10),
89
- dp4$1(m00, m12, -m02, m10),
90
- dp4$1(m00, m13, -m03, m10),
91
- dp4$1(m01, m12, -m02, m11),
92
- dp4$1(m01, m13, -m03, m11),
93
- dp4$1(m02, m13, -m03, m12),
94
- dp4$1(m20, m31, -m21, m30),
95
- dp4$1(m20, m32, -m22, m30),
96
- dp4$1(m20, m33, -m23, m30),
97
- dp4$1(m21, m32, -m22, m31),
98
- dp4$1(m21, m33, -m23, m31),
99
- dp4$1(m22, m33, -m23, m32),
100
- ];
101
- };
102
- const det44FromCoeffs = (d) => dp6$1(d[0], d[11], -d[1], d[10], d[2], d[9]) +
103
- dp6$1(d[3], d[8], -d[4], d[7], d[5], d[6]);
104
- const det44 = (m) => det44FromCoeffs(detCoeffs44(m));
105
-
106
- const diag = vectors.vop(1);
107
- const diag22 = diag.add(4, (out, m) => vectors.setS2(out, m, 0, 0, 1, 3));
108
- const diag23 = diag.add(6, diag22);
109
- const diag33 = diag.add(9, (out, m) => vectors.setS3(out, m, 0, 0, 1, 4));
110
- const diag44 = diag.add(16, (out, m) => vectors.setS4(out, m, 0, 0, 1, 5));
111
-
112
- const div = vectors.div;
113
- const div22 = vectors.div4;
114
- const [div23, div33, div44] = defMath(div, "/");
115
-
116
- const divN = vectors.divN;
117
- const divN22 = vectors.divN4;
118
- const [divN23, divN33, divN44] = defMathN(divN, "/");
119
-
120
- const frustum = (out, left, right, bottom, top, near, far) => {
121
- const dx = 1 / (right - left);
122
- const dy = 1 / (top - bottom);
123
- const dz = 1 / (far - near);
124
- return vectors.setC(out || [], near * 2 * dx, 0, 0, 0, 0, near * 2 * dy, 0, 0, (right + left) * dx, (top + bottom) * dy, -(far + near) * dz, -1, 0, 0, -(far * near * 2) * dz, 0);
125
- };
126
- const frustumBounds = (fovy, aspect, near, far) => {
127
- const top = near * Math.tan((fovy * math.DEG2RAD) / 2);
128
- const right = top * aspect;
129
- return {
130
- left: -right,
131
- right,
132
- bottom: -top,
133
- top,
134
- near,
135
- far,
136
- };
137
- };
138
-
139
- const $$2 = (dim) => vectors.set.add(dim, vectors.compile(dim, vectors.SET, "o,a"));
140
- const set = vectors.set;
141
- const set22 = vectors.set4;
142
- const set23 = $$2(6);
143
- const set33 = $$2(9);
144
- const set44 = $$2(16);
145
-
146
- const identity = vectors.vop();
147
- const identity22 = identity.add(4, (m) => set(m, IDENT22));
148
- const identity23 = identity.add(6, (m) => set(m, IDENT23));
149
- const identity33 = identity.add(9, (m) => set(m, IDENT33));
150
- const identity44 = identity.add(16, (m) => set(m, IDENT44));
151
-
152
- const dp4 = vectors.dotC4;
153
- const dp6 = vectors.dotC6;
154
- const invert = vectors.vop(1);
155
- const invert22 = invert.add(4, (out, m) => {
156
- const [m00, m01, m10, m11] = m;
157
- let det = dp4(m00, m11, -m01, m10);
158
- if (det === 0)
159
- return;
160
- det = 1.0 / det;
161
- return vectors.setC4(out || m, m11 * det, -m01 * det, -m10 * det, m00 * det);
162
- });
163
- const invert23 = invert.add(6, (out, m) => {
164
- const [m00, m01, m10, m11, m20, m21] = m;
165
- let det = dp4(m00, m11, -m01, m10);
166
- if (det === 0)
167
- return;
168
- det = 1.0 / det;
169
- return vectors.setC6(out || m, m11 * det, -m01 * det, -m10 * det, m00 * det, dp4(m10, m21, -m11, m20) * det, dp4(m01, m20, -m00, m21) * det);
170
- });
171
- const invert33 = invert.add(9, (out, m) => {
172
- const [m00, m01, m02, m10, m11, m12, m20, m21, m22] = m;
173
- const d01 = dp4(m22, m11, -m12, m21);
174
- const d11 = dp4(m12, m20, -m22, m10);
175
- const d21 = dp4(m21, m10, -m11, m20);
176
- let det = dp6(m00, d01, m01, d11, m02, d21);
177
- if (det === 0)
178
- return;
179
- det = 1.0 / det;
180
- return vectors.setC(out || m, d01 * det, dp4(-m22, m01, m02, m21) * det, dp4(m12, m01, -m02, m11) * det, d11 * det, dp4(m22, m00, -m02, m20) * det, dp4(-m12, m00, m02, m10) * det, d21 * det, dp4(-m21, m00, m01, m20) * det, dp4(m11, m00, -m01, m10) * det);
181
- });
182
- const invert44 = invert.add(16, (out, m) => {
183
- const coeffs = detCoeffs44(m);
184
- let det = det44FromCoeffs(coeffs);
185
- if (det === 0)
186
- return;
187
- det = 1.0 / det;
188
- const [m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33,] = m;
189
- const [d00, d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11] = coeffs;
190
- return vectors.setC(out || m, dp6(m11, d11, -m12, d10, m13, d09) * det, dp6(-m01, d11, m02, d10, -m03, d09) * det, dp6(m31, d05, -m32, d04, m33, d03) * det, dp6(-m21, d05, m22, d04, -m23, d03) * det, dp6(-m10, d11, m12, d08, -m13, d07) * det, dp6(m00, d11, -m02, d08, m03, d07) * det, dp6(-m30, d05, m32, d02, -m33, d01) * det, dp6(m20, d05, -m22, d02, m23, d01) * det, dp6(m10, d10, -m11, d08, m13, d06) * det, dp6(-m00, d10, m01, d08, -m03, d06) * det, dp6(m30, d04, -m31, d02, m33, d00) * det, dp6(-m20, d04, m21, d02, -m23, d00) * det, dp6(-m10, d09, m11, d07, -m12, d06) * det, dp6(m00, d09, -m01, d07, m02, d06) * det, dp6(-m30, d03, m31, d01, -m32, d00) * det, dp6(m20, d03, -m21, d01, m22, d00) * det);
191
- });
192
- const invertQ = (out, a) => {
193
- let d = vectors.magSq4(a);
194
- d = d > 0 ? -1 / d : 0;
195
- return vectors.setC4(out || a, a[0] * d, a[1] * d, a[2] * d, a[3] * -d);
196
- };
197
-
198
- const lookAt = (out, eye, target, up) => {
199
- const z = vectors.normalize(null, vectors.sub3([], eye, target));
200
- const x = vectors.normalize(null, vectors.cross3([], up, z));
201
- const y = vectors.normalize(null, vectors.cross3([], z, x));
202
- return vectors.setC(out || [], x[0], y[0], z[0], 0, x[1], y[1], z[1], 0, x[2], y[2], z[2], 0, -vectors.dot3(eye, x), -vectors.dot3(eye, y), -vectors.dot3(eye, z), 1);
203
- };
204
-
205
- const mat22to23 = (out, m22) => (!out && (out = []), vectors.set4(out, m22), (out[4] = out[5] = 0), out);
206
-
207
- const mat23to22 = (out, m23) => vectors.set4(out || [], m23);
208
-
209
- const mat23to44 = (out, m23) => vectors.setC(out || [],
210
- m23[0], m23[1], 0, 0,
211
- m23[2], m23[3], 0, 0,
212
- 0, 0, 1, 0,
213
- m23[4], m23[5], 0, 1);
214
-
215
- const mat33to44 = (out, m33) => vectors.setC(out || [],
216
- m33[0], m33[1], m33[2], 0,
217
- m33[3], m33[4], m33[5], 0,
218
- m33[6], m33[7], m33[8], 0,
219
- 0, 0, 0, 1);
220
-
221
- const mat44to33 = (out, m44) => (!out && (out = []),
222
- vectors.setS3(out, m44),
223
- vectors.setS3(out, m44, 3, 4),
224
- vectors.setS3(out, m44, 6, 8));
225
-
226
- const scale22 = (m, s) => ((s = checks.isNumber(s) ? [s, s] : s), vectors.setC4(m || [], s[0], 0, 0, s[1]));
227
- const scale23 = (m, s) => ((s = checks.isNumber(s) ? [s, s] : s), vectors.setC6(m || [], s[0], 0, 0, s[1], 0, 0));
228
- const scale33 = (m, s) => ((s = checks.isNumber(s) ? [s, s, s] : s),
229
- vectors.setC(m || [], s[0], 0, 0, 0, s[1], 0, 0, 0, s[2]));
230
- const scale44 = (m, s) => ((s = checks.isNumber(s) ? [s, s, s] : s),
231
- vectors.setC(m || [],
232
- s[0], 0, 0, 0,
233
- 0, s[1], 0, 0,
234
- 0, 0, s[2], 0,
235
- 0, 0, 0, s[3] !== undefined ? s[3] : 1));
236
-
237
- const mat22n = (out, n) => scale22(out, n);
238
- const mat23n = (out, n) => scale23(out, n);
239
- const mat33n = (out, n) => scale33(out, n);
240
- const mat44n = (out, n) => scale44(out, [n, n, n, n]);
241
-
242
- const mat22v = vectors.setVV4;
243
- const mat23v = vectors.setVV6;
244
- const mat33v = vectors.setVV9;
245
- const mat44v = vectors.setVV16;
246
-
247
- const mixQ = (out, a, b, t, eps = 1e-3) => {
248
- const d = vectors.dot4(a, b);
249
- if (Math.abs(d) < 1.0) {
250
- const theta = Math.acos(d);
251
- const stheta = Math.sqrt(1 - d * d);
252
- let u, v;
253
- if (Math.abs(stheta) < eps) {
254
- u = v = 0.5;
255
- }
256
- else {
257
- u = Math.sin(theta * (1 - t)) / stheta;
258
- v = Math.sin(theta * t) / stheta;
259
- }
260
- !out && (out = a);
261
- return vectors.maddN4(out, b, v, vectors.mulN4(out, a, u));
262
- }
263
- return a !== out ? vectors.set4(out, a) : out;
264
- };
265
-
266
- const mul = vectors.mul;
267
- const mul22 = vectors.mul4;
268
- const [mul23, mul33, mul44] = defMath(mul, "*");
269
-
270
- const mulN = vectors.mulN;
271
- const mulN22 = vectors.mulN4;
272
- const [mulN23, mulN33, mulN44] = defMathN(mulN, "*");
273
-
274
- const mulQ = (out, a, b) => {
275
- const { 0: ax, 1: ay, 2: az, 3: aw } = a;
276
- const { 0: bx, 1: by, 2: bz, 3: bw } = b;
277
- return vectors.setC4(out || a, ax * bw + aw * bx + ay * bz - az * by, ay * bw + aw * by + az * bx - ax * bz, az * bw + aw * bz + ax * by - ay * bx, aw * bw - ax * bx - ay * by - az * bz);
278
- };
279
-
280
- const mulV = vectors.vop(1);
281
- const mulV22 = mulV.add(4, (out, m, v) => vectors.setC2(out || v, vectors.dotS2(m, v, 0, 0, 2), vectors.dotS2(m, v, 1, 0, 2)));
282
- const mulV23 = mulV.add(6, (out, m, v) => vectors.setC2(out || v, vectors.dotS2(m, v, 0, 0, 2) + m[4], vectors.dotS2(m, v, 1, 0, 2) + m[5]));
283
- const mulV33 = mulV.add(9, (out, m, v) => vectors.setC3(out || v, vectors.dotS3(m, v, 0, 0, 3), vectors.dotS3(m, v, 1, 0, 3), vectors.dotS3(m, v, 2, 0, 3)));
284
- const mulV44 = mulV.add(16, (out, m, v) => vectors.setC4(out || v, vectors.dotS4(m, v, 0, 0, 4), vectors.dotS4(m, v, 1, 0, 4), vectors.dotS4(m, v, 2, 0, 4), vectors.dotS4(m, v, 3, 0, 4)));
285
- const mulV344 = (out, m, v) => {
286
- const w = vectors.dotS3(m, v, 3, 0, 4) + m[15];
287
- return w !== 0
288
- ? vectors.setC3(out || v, (vectors.dotS3(m, v, 0, 0, 4) + m[12]) / w, (vectors.dotS3(m, v, 1, 0, 4) + m[13]) / w, (vectors.dotS3(m, v, 2, 0, 4) + m[14]) / w)
289
- : undefined;
290
- };
291
- const mulVQ = (out, q, v) => {
292
- const { 0: px, 1: py, 2: pz } = v;
293
- const { 0: qx, 1: qy, 2: qz, 3: qw } = q;
294
- const ix = qw * px + qy * pz - qz * py;
295
- const iy = qw * py + qz * px - qx * pz;
296
- const iz = qw * pz + qx * py - qy * px;
297
- const iw = -qx * px - qy * py - qz * pz;
298
- return vectors.setC3(out || v, ix * qw + iw * -qx + iy * -qz - iz * -qy, iy * qw + iw * -qy + iz * -qx - ix * -qz, iz * qw + iw * -qz + ix * -qy - iy * -qx);
299
- };
300
-
301
- const mulVM22 = (out, v, m) => vectors.setC2(out, vectors.dot2(v, m), vectors.dotS2(v, m, 0, 2));
302
- const mulVM23 = mulVM22;
303
- const mulVM33 = (out, v, m) => vectors.setC3(out, vectors.dot3(v, m), vectors.dotS3(v, m, 0, 3), vectors.dotS3(v, m, 0, 6));
304
- const mulVM44 = (out, v, m) => vectors.setC4(out, vectors.dot4(v, m), vectors.dotS4(v, m, 0, 4), vectors.dotS4(v, m, 0, 8), vectors.dotS4(v, m, 0, 12));
305
-
306
- const transpose22 = (out, m) => vectors.setC4(out || [], m[0], m[2], m[1], m[3]);
307
- const transpose33 = (out, m) => vectors.setC(out || [], m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]);
308
- const transpose44 = (out, m) => vectors.setC(out || [], m[0], m[4], m[8], m[12], m[1], m[5], m[9], m[13], m[2], m[6], m[10], m[14], m[3], m[7], m[11], m[15]);
309
-
310
- const normal33 = (out, m) => {
311
- out = invert33(null, mat44to33(out, m));
312
- return out ? transpose33(null, out) : undefined;
313
- };
314
- const normal44 = (out, m) => {
315
- out = invert44(out, m);
316
- return out ? transpose44(null, out) : undefined;
317
- };
318
-
319
- const ortho = (out, left, right, bottom, top, near, far) => {
320
- const dx = 1 / (right - left);
321
- const dy = 1 / (top - bottom);
322
- const dz = 1 / (far - near);
323
- return vectors.setC(out || [], 2 * dx, 0, 0, 0, 0, 2 * dy, 0, 0, 0, 0, -2 * dz, 0, -(left + right) * dx, -(top + bottom) * dy, -(far + near) * dz, 1);
324
- };
325
-
326
- const isOrthagonal = (m, n, eps = math.EPS) => {
327
- for (let i = 0; i < n; i++) {
328
- const ii = i * n;
329
- for (let j = 0; j < n; j++) {
330
- const jj = j * n;
331
- let acc = 0;
332
- for (let k = 0; k < n; k++) {
333
- acc += m[ii + k] * m[jj + k];
334
- }
335
- if ((i == j && !math.eqDelta(acc, 1, eps)) ||
336
- (i != j && !math.eqDelta(acc, 0, eps))) {
337
- return false;
338
- }
339
- }
340
- }
341
- return true;
342
- };
343
-
344
- const outerProduct = vectors.vop(1);
345
- const outerProduct2 = outerProduct.add(2, (out, [ux, uy], [vx, vy]) => vectors.setC4(out || [], ux * vx, uy * vx, ux * vy, uy * vy));
346
- const outerProduct3 = outerProduct.add(3, (out, [ux, uy, uz], [vx, vy, vz]) => vectors.setC(out || [], ux * vx, uy * vx, uz * vx, ux * vy, uy * vy, uz * vy, ux * vz, uy * vz, uz * vz));
347
- const outerProduct4 = outerProduct.add(4, (out, [ux, uy, uz, uw], [vx, vy, vz, vw]) => vectors.setC(out || [], ux * vx, uy * vx, uz * vx, uw * vx, ux * vy, uy * vy, uz * vy, uw * vy, ux * vz, uy * vz, uz * vz, uw * vz, ux * vw, uy * vw, uz * vw, uw * vw));
348
-
349
- const perspective = (out, fov, aspect, near, far) => {
350
- const f = frustumBounds(fov, aspect, near, far);
351
- return frustum(out, f.left, f.right, f.bottom, f.top, f.near, f.far);
352
- };
353
-
354
- const project = (out, mvp, view, p) => (!out && (out = []),
355
- mulV23(out, view, vectors.fromHomogeneous4(out, mulV44([], mvp, p))));
356
- const project3 = (out, mvp, view, p) => {
357
- !out && (out = []);
358
- const q = mulV344(out, mvp, p);
359
- return q ? mulV23(q, view, q) : undefined;
360
- };
361
- const unproject = (out, mvp, view, p, doInvert = false) => {
362
- if (doInvert) {
363
- const _mvp = invert44([], mvp);
364
- const _view = invert23([], view);
365
- if (!_mvp || !_view)
366
- return;
367
- mvp = _mvp;
368
- view = _view;
369
- }
370
- return mulV344(out, mvp, mulV23([0, 0, p[2] * 2 - 1], view, p));
371
- };
372
-
373
- const axisOrder = {
374
- xyz: [vectors.X3, vectors.Y3, vectors.Z3],
375
- yxz: [vectors.Y3, vectors.X3, vectors.Z3],
376
- xzy: [vectors.X3, vectors.Z3, vectors.Y3],
377
- zxy: [vectors.Z3, vectors.X3, vectors.Y3],
378
- yzx: [vectors.Y3, vectors.Z3, vectors.X3],
379
- zyx: [vectors.Z3, vectors.Y3, vectors.X3],
380
- };
381
- const quatFromEuler = (order, a, b, c) => {
382
- const [aa, ab, ac] = axisOrder[order];
383
- return mulQ(null, mulQ([], quatFromAxisAngle(aa, a), quatFromAxisAngle(ab, b)), quatFromAxisAngle(ac, c));
384
- };
385
-
386
- const quatToMat33 = (out, q) => {
387
- const [x, y, z, w] = q;
388
- const x2 = x + x;
389
- const y2 = y + y;
390
- const z2 = z + z;
391
- const xx = x * x2;
392
- const xy = x * y2;
393
- const xz = x * z2;
394
- const yy = y * y2;
395
- const yz = y * z2;
396
- const zz = z * z2;
397
- const wx = w * x2;
398
- const wy = w * y2;
399
- const wz = w * z2;
400
- return vectors.setC(out || [], 1 - yy - zz, xy + wz, xz - wy, xy - wz, 1 - xx - zz, yz + wx, xz + wy, yz - wx, 1 - xx - yy);
401
- };
402
-
403
- const quatToMat44 = (out, a, t = vectors.ZERO3) => {
404
- const [x, y, z, w] = a;
405
- const x2 = x + x;
406
- const y2 = y + y;
407
- const z2 = z + z;
408
- const xx = x * x2;
409
- const xy = x * y2;
410
- const xz = x * z2;
411
- const yy = y * y2;
412
- const yz = y * z2;
413
- const zz = z * z2;
414
- const wx = w * x2;
415
- const wy = w * y2;
416
- const wz = w * z2;
417
- return vectors.setC(out || [], 1 - yy - zz, xy + wz, xz - wy, 0, xy - wz, 1 - xx - zz, yz + wx, 0, xz + wy, yz - wx, 1 - xx - yy, 0, t[0], t[1], t[2], 1);
418
- };
419
-
420
- const rotationAroundAxis33 = (out, axis, theta, normalize = false) => {
421
- const [x, y, z] = normalize ? vectors.normalize([], axis) : axis;
422
- const [s, c] = math.sincos(theta);
423
- const t = 1 - c;
424
- const xs = x * s;
425
- const ys = y * s;
426
- const zs = z * s;
427
- const xt = x * t;
428
- const yt = y * t;
429
- const zt = z * t;
430
- return vectors.setC(out || [], x * xt + c, y * xt + zs, z * xt - ys, x * yt - zs, y * yt + c, z * yt + xs, x * zt + ys, y * zt - xs, z * zt + c);
431
- };
432
- const rotationAroundAxis44 = (out, axis, theta, normalize = false) => mat33to44(out, rotationAroundAxis33([], axis, theta, normalize));
433
-
434
- const rotation22 = (out, theta) => {
435
- const [s, c] = math.sincos(theta);
436
- return vectors.setC4(out || [], c, s, -s, c);
437
- };
438
- const rotation23 = (out, theta) => {
439
- const [s, c] = math.sincos(theta);
440
- return vectors.setC6(out || [], c, s, -s, c, 0, 0);
441
- };
442
- const rotationX33 = (out, theta) => {
443
- const [s, c] = math.sincos(theta);
444
- return vectors.setC(out || [], 1, 0, 0, 0, c, s, 0, -s, c);
445
- };
446
- const rotationY33 = (out, theta) => {
447
- const [s, c] = math.sincos(theta);
448
- return vectors.setC(out || [], c, 0, -s, 0, 1, 0, s, 0, c);
449
- };
450
- const rotationZ33 = (out, theta) => {
451
- const [s, c] = math.sincos(theta);
452
- return vectors.setC(out || [], c, s, 0, -s, c, 0, 0, 0, 1);
453
- };
454
- const rotationX44 = (out, theta) => {
455
- const [s, c] = math.sincos(theta);
456
- return vectors.setC(out || [], 1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1);
457
- };
458
- const rotationY44 = (out, theta) => {
459
- const [s, c] = math.sincos(theta);
460
- return vectors.setC(out || [], c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1);
461
- };
462
- const rotationZ44 = (out, theta) => {
463
- const [s, c] = math.sincos(theta);
464
- return vectors.setC(out || [], c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
465
- };
466
-
467
- const row = vectors.vop(1);
468
- const row22 = row.add(4, (out, m, n) => vectors.setS2(out, m, 0, n, 1, 2));
469
- const row23 = row.add(6, (out, m, n) => vectors.setS3(out, m, 0, n, 1, 2));
470
- const row33 = row.add(9, (out, m, n) => vectors.setS3(out, m, 0, n, 1, 3));
471
- const row44 = row.add(16, (out, m, n) => vectors.setS4(out, m, 0, n, 1, 4));
472
-
473
- const translation23 = (m, v) => vectors.setC6(m || [], 1, 0, 0, 1, v[0], v[1]);
474
- const translation44 = (m, v) => vectors.setC(m || [], 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, v[0], v[1], v[2], 1);
475
-
476
- const scaleWithCenter23 = (m, p, s) => concat(m, translation23([], p), scale23([], s), translation23([], vectors.neg([], p)));
477
- const scaleWithCenter44 = (m, p, s) => concat(m, translation44([], p), scale44([], s), translation44([], vectors.neg([], p)));
478
-
479
- const $$1 = (f) => (i) => (m, x) => (!m && (m = []), f(m), (m[i] = x), m);
480
- const $22 = $$1(identity22);
481
- const $23 = $$1(identity23);
482
- const $33 = $$1(identity33);
483
- const $44 = $$1(identity44);
484
- const shearX22 = $22(2);
485
- const shearY22 = $22(1);
486
- const shearX23 = $23(2);
487
- const shearY23 = $23(1);
488
- const shearXY33 = $33(3);
489
- const shearXZ33 = $33(6);
490
- const shearYX33 = $33(1);
491
- const shearYZ33 = $33(7);
492
- const shearZX33 = $33(2);
493
- const shearZY33 = $33(5);
494
- const shearXY44 = $44(4);
495
- const shearXZ44 = $44(8);
496
- const shearYX44 = $44(1);
497
- const shearYZ44 = $44(9);
498
- const shearZX44 = $44(2);
499
- const shearZY44 = $44(6);
500
-
501
- const $ = (f) => (m, theta) => f(m, Math.tan(theta));
502
- const skewX22 = $(shearX22);
503
- const skewY22 = $(shearY22);
504
- const skewX23 = $(shearX23);
505
- const skewY23 = $(shearY23);
506
- const skewXY33 = $(shearXY33);
507
- const skewXZ33 = $(shearXZ33);
508
- const skewYX33 = $(shearYX33);
509
- const skewYZ33 = $(shearYZ33);
510
- const skewZX33 = $(shearZX33);
511
- const skewZY33 = $(shearZY33);
512
- const skewXY44 = $(shearXY44);
513
- const skewXZ44 = $(shearXZ44);
514
- const skewYX44 = $(shearYX44);
515
- const skewYZ44 = $(shearYZ44);
516
- const skewZX44 = $(shearZX44);
517
- const skewZY44 = $(shearZY44);
518
-
519
- const sub = vectors.sub;
520
- const sub22 = vectors.sub4;
521
- const [sub23, sub33, sub44] = defMath(sub, "-");
522
-
523
- const subN = vectors.subN;
524
- const subN22 = vectors.subN4;
525
- const [subN23, subN33, subN44] = defMathN(subN, "-");
526
-
527
- const trace = (m) => vectors.sum(diag([], m));
528
-
529
- const transform23 = (out, translate, rotation, scale) => concat(out, translation23([], translate), rotation23([], rotation), scale23([], scale));
530
- const transform44 = (out, translate, rotation, scale) => mulM44(out, quatToMat44(out, quatFromEuler("zyx", rotation[2], rotation[1], rotation[0]), translate), scale44([], scale));
531
-
532
- const viewport = (out, left, right, bottom, top) => {
533
- const x = (left + right) / 2;
534
- const y = (bottom + top) / 2;
535
- const w = (right - left) / 2;
536
- const h = (top - bottom) / 2;
537
- return mulM23(null, translation23(out, [x, y]), scale23([], [w, h]));
538
- };
539
-
540
- exports.IDENT22 = IDENT22;
541
- exports.IDENT23 = IDENT23;
542
- exports.IDENT33 = IDENT33;
543
- exports.IDENT44 = IDENT44;
544
- exports.add = add;
545
- exports.add22 = add22;
546
- exports.add23 = add23;
547
- exports.add33 = add33;
548
- exports.add44 = add44;
549
- exports.addN = addN;
550
- exports.addN22 = addN22;
551
- exports.addN23 = addN23;
552
- exports.addN33 = addN33;
553
- exports.addN44 = addN44;
554
- exports.alignmentQuat = alignmentQuat;
555
- exports.column = column;
556
- exports.column22 = column22;
557
- exports.column23 = column23;
558
- exports.column33 = column33;
559
- exports.column44 = column44;
560
- exports.concat = concat;
561
- exports.conjugateQ = conjugateQ;
562
- exports.defMath = defMath;
563
- exports.defMathN = defMathN;
564
- exports.det22 = det22;
565
- exports.det23 = det23;
566
- exports.det33 = det33;
567
- exports.det44 = det44;
568
- exports.det44FromCoeffs = det44FromCoeffs;
569
- exports.detCoeffs44 = detCoeffs44;
570
- exports.diag = diag;
571
- exports.diag22 = diag22;
572
- exports.diag23 = diag23;
573
- exports.diag33 = diag33;
574
- exports.diag44 = diag44;
575
- exports.div = div;
576
- exports.div22 = div22;
577
- exports.div23 = div23;
578
- exports.div33 = div33;
579
- exports.div44 = div44;
580
- exports.divN = divN;
581
- exports.divN22 = divN22;
582
- exports.divN23 = divN23;
583
- exports.divN33 = divN33;
584
- exports.divN44 = divN44;
585
- exports.frustum = frustum;
586
- exports.frustumBounds = frustumBounds;
587
- exports.identity = identity;
588
- exports.identity22 = identity22;
589
- exports.identity23 = identity23;
590
- exports.identity33 = identity33;
591
- exports.identity44 = identity44;
592
- exports.invert = invert;
593
- exports.invert22 = invert22;
594
- exports.invert23 = invert23;
595
- exports.invert33 = invert33;
596
- exports.invert44 = invert44;
597
- exports.invertQ = invertQ;
598
- exports.isOrthagonal = isOrthagonal;
599
- exports.lookAt = lookAt;
600
- exports.mat22n = mat22n;
601
- exports.mat22to23 = mat22to23;
602
- exports.mat22v = mat22v;
603
- exports.mat23n = mat23n;
604
- exports.mat23to22 = mat23to22;
605
- exports.mat23to44 = mat23to44;
606
- exports.mat23v = mat23v;
607
- exports.mat33n = mat33n;
608
- exports.mat33to44 = mat33to44;
609
- exports.mat33v = mat33v;
610
- exports.mat44n = mat44n;
611
- exports.mat44to33 = mat44to33;
612
- exports.mat44v = mat44v;
613
- exports.mixQ = mixQ;
614
- exports.mul = mul;
615
- exports.mul22 = mul22;
616
- exports.mul23 = mul23;
617
- exports.mul33 = mul33;
618
- exports.mul44 = mul44;
619
- exports.mulM = mulM;
620
- exports.mulM22 = mulM22;
621
- exports.mulM23 = mulM23;
622
- exports.mulM33 = mulM33;
623
- exports.mulM44 = mulM44;
624
- exports.mulN = mulN;
625
- exports.mulN22 = mulN22;
626
- exports.mulN23 = mulN23;
627
- exports.mulN33 = mulN33;
628
- exports.mulN44 = mulN44;
629
- exports.mulQ = mulQ;
630
- exports.mulV = mulV;
631
- exports.mulV22 = mulV22;
632
- exports.mulV23 = mulV23;
633
- exports.mulV33 = mulV33;
634
- exports.mulV344 = mulV344;
635
- exports.mulV44 = mulV44;
636
- exports.mulVM22 = mulVM22;
637
- exports.mulVM23 = mulVM23;
638
- exports.mulVM33 = mulVM33;
639
- exports.mulVM44 = mulVM44;
640
- exports.mulVQ = mulVQ;
641
- exports.normal33 = normal33;
642
- exports.normal44 = normal44;
643
- exports.ortho = ortho;
644
- exports.outerProduct = outerProduct;
645
- exports.outerProduct2 = outerProduct2;
646
- exports.outerProduct3 = outerProduct3;
647
- exports.outerProduct4 = outerProduct4;
648
- exports.perspective = perspective;
649
- exports.project = project;
650
- exports.project3 = project3;
651
- exports.quatFromAxisAngle = quatFromAxisAngle;
652
- exports.quatFromEuler = quatFromEuler;
653
- exports.quatToAxisAngle = quatToAxisAngle;
654
- exports.quatToMat33 = quatToMat33;
655
- exports.quatToMat44 = quatToMat44;
656
- exports.rotation22 = rotation22;
657
- exports.rotation23 = rotation23;
658
- exports.rotationAroundAxis33 = rotationAroundAxis33;
659
- exports.rotationAroundAxis44 = rotationAroundAxis44;
660
- exports.rotationX33 = rotationX33;
661
- exports.rotationX44 = rotationX44;
662
- exports.rotationY33 = rotationY33;
663
- exports.rotationY44 = rotationY44;
664
- exports.rotationZ33 = rotationZ33;
665
- exports.rotationZ44 = rotationZ44;
666
- exports.row = row;
667
- exports.row22 = row22;
668
- exports.row23 = row23;
669
- exports.row33 = row33;
670
- exports.row44 = row44;
671
- exports.scale22 = scale22;
672
- exports.scale23 = scale23;
673
- exports.scale33 = scale33;
674
- exports.scale44 = scale44;
675
- exports.scaleWithCenter23 = scaleWithCenter23;
676
- exports.scaleWithCenter44 = scaleWithCenter44;
677
- exports.set = set;
678
- exports.set22 = set22;
679
- exports.set23 = set23;
680
- exports.set33 = set33;
681
- exports.set44 = set44;
682
- exports.shearX22 = shearX22;
683
- exports.shearX23 = shearX23;
684
- exports.shearXY33 = shearXY33;
685
- exports.shearXY44 = shearXY44;
686
- exports.shearXZ33 = shearXZ33;
687
- exports.shearXZ44 = shearXZ44;
688
- exports.shearY22 = shearY22;
689
- exports.shearY23 = shearY23;
690
- exports.shearYX33 = shearYX33;
691
- exports.shearYX44 = shearYX44;
692
- exports.shearYZ33 = shearYZ33;
693
- exports.shearYZ44 = shearYZ44;
694
- exports.shearZX33 = shearZX33;
695
- exports.shearZX44 = shearZX44;
696
- exports.shearZY33 = shearZY33;
697
- exports.shearZY44 = shearZY44;
698
- exports.skewX22 = skewX22;
699
- exports.skewX23 = skewX23;
700
- exports.skewXY33 = skewXY33;
701
- exports.skewXY44 = skewXY44;
702
- exports.skewXZ33 = skewXZ33;
703
- exports.skewXZ44 = skewXZ44;
704
- exports.skewY22 = skewY22;
705
- exports.skewY23 = skewY23;
706
- exports.skewYX33 = skewYX33;
707
- exports.skewYX44 = skewYX44;
708
- exports.skewYZ33 = skewYZ33;
709
- exports.skewYZ44 = skewYZ44;
710
- exports.skewZX33 = skewZX33;
711
- exports.skewZX44 = skewZX44;
712
- exports.skewZY33 = skewZY33;
713
- exports.skewZY44 = skewZY44;
714
- exports.sub = sub;
715
- exports.sub22 = sub22;
716
- exports.sub23 = sub23;
717
- exports.sub33 = sub33;
718
- exports.sub44 = sub44;
719
- exports.subN = subN;
720
- exports.subN22 = subN22;
721
- exports.subN23 = subN23;
722
- exports.subN33 = subN33;
723
- exports.subN44 = subN44;
724
- exports.trace = trace;
725
- exports.transform23 = transform23;
726
- exports.transform44 = transform44;
727
- exports.translation23 = translation23;
728
- exports.translation44 = translation44;
729
- exports.transpose22 = transpose22;
730
- exports.transpose33 = transpose33;
731
- exports.transpose44 = transpose44;
732
- exports.unproject = unproject;
733
- exports.viewport = viewport;