@thi.ng/matrices 2.2.11 → 2.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +1 -1
- package/add.js +10 -13
- package/addn.js +10 -13
- package/alignment-quat.js +10 -16
- package/api.js +0 -1
- package/column.js +21 -13
- package/compile/emit.js +20 -3
- package/concat.js +4 -11
- package/conjugate.js +4 -1
- package/constants.js +35 -13
- package/determinant.js +51 -27
- package/diag.js +12 -11
- package/div.js +10 -13
- package/divn.js +10 -13
- package/fit.js +16 -24
- package/frustum.js +38 -28
- package/identity.js +12 -8
- package/invert.js +100 -45
- package/lookat.js +26 -15
- package/m22-m23.js +4 -8
- package/m23-m22.js +4 -8
- package/m23-m44.js +26 -16
- package/m33-m44.js +26 -16
- package/m44-m33.js +4 -11
- package/matn.js +10 -4
- package/matv.js +10 -36
- package/mixq.js +18 -28
- package/mul.js +10 -15
- package/mulm.js +67 -45
- package/muln.js +10 -13
- package/mulq.js +13 -12
- package/mulv.js +58 -77
- package/mulvm.js +16 -46
- package/normal-mat.js +10 -23
- package/orthagonal.js +17 -25
- package/ortho.js +26 -17
- package/outer-product.js +48 -10
- package/package.json +10 -8
- package/perspective.js +6 -13
- package/project.js +20 -51
- package/quat-axis-angle.js +13 -23
- package/quat-euler.js +16 -18
- package/quat-m33.js +29 -21
- package/quat-m44.js +36 -22
- package/rotation-around-axis.js +27 -32
- package/rotation.js +41 -79
- package/row.js +12 -13
- package/scale-center.js +16 -16
- package/scale.js +32 -42
- package/set.js +13 -6
- package/shear.js +35 -18
- package/skew.js +52 -17
- package/sub.js +10 -13
- package/subn.js +10 -13
- package/trace.js +4 -6
- package/transform.js +19 -23
- package/translation.js +6 -14
- package/transpose.js +26 -24
- package/viewport.js +9 -16
package/invert.js
CHANGED
|
@@ -5,53 +5,108 @@ import { vop } from "@thi.ng/vectors/vop";
|
|
|
5
5
|
import { det44FromCoeffs, detCoeffs44 } from "./determinant.js";
|
|
6
6
|
const dp4 = dotC4;
|
|
7
7
|
const dp6 = dotC6;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export const invert22 = invert.add(4, (out, m) => {
|
|
17
|
-
const [m00, m01, m10, m11] = m;
|
|
18
|
-
let det = dp4(m00, m11, -m01, m10);
|
|
19
|
-
if (det === 0)
|
|
20
|
-
return;
|
|
21
|
-
det = 1.0 / det;
|
|
22
|
-
return setC4(out || m, m11 * det, -m01 * det, -m10 * det, m00 * det);
|
|
8
|
+
const invert = vop(1);
|
|
9
|
+
const invert22 = invert.add(4, (out, m) => {
|
|
10
|
+
const [m00, m01, m10, m11] = m;
|
|
11
|
+
let det = dp4(m00, m11, -m01, m10);
|
|
12
|
+
if (det === 0)
|
|
13
|
+
return;
|
|
14
|
+
det = 1 / det;
|
|
15
|
+
return setC4(out || m, m11 * det, -m01 * det, -m10 * det, m00 * det);
|
|
23
16
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
17
|
+
const invert23 = invert.add(6, (out, m) => {
|
|
18
|
+
const [m00, m01, m10, m11, m20, m21] = m;
|
|
19
|
+
let det = dp4(m00, m11, -m01, m10);
|
|
20
|
+
if (det === 0)
|
|
21
|
+
return;
|
|
22
|
+
det = 1 / det;
|
|
23
|
+
return setC6(
|
|
24
|
+
out || m,
|
|
25
|
+
m11 * det,
|
|
26
|
+
-m01 * det,
|
|
27
|
+
-m10 * det,
|
|
28
|
+
m00 * det,
|
|
29
|
+
dp4(m10, m21, -m11, m20) * det,
|
|
30
|
+
dp4(m01, m20, -m00, m21) * det
|
|
31
|
+
);
|
|
31
32
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
const invert33 = invert.add(9, (out, m) => {
|
|
34
|
+
const [m00, m01, m02, m10, m11, m12, m20, m21, m22] = m;
|
|
35
|
+
const d01 = dp4(m22, m11, -m12, m21);
|
|
36
|
+
const d11 = dp4(m12, m20, -m22, m10);
|
|
37
|
+
const d21 = dp4(m21, m10, -m11, m20);
|
|
38
|
+
let det = dp6(m00, d01, m01, d11, m02, d21);
|
|
39
|
+
if (det === 0)
|
|
40
|
+
return;
|
|
41
|
+
det = 1 / det;
|
|
42
|
+
return setC(
|
|
43
|
+
out || m,
|
|
44
|
+
d01 * det,
|
|
45
|
+
dp4(-m22, m01, m02, m21) * det,
|
|
46
|
+
dp4(m12, m01, -m02, m11) * det,
|
|
47
|
+
d11 * det,
|
|
48
|
+
dp4(m22, m00, -m02, m20) * det,
|
|
49
|
+
dp4(-m12, m00, m02, m10) * det,
|
|
50
|
+
d21 * det,
|
|
51
|
+
dp4(-m21, m00, m01, m20) * det,
|
|
52
|
+
dp4(m11, m00, -m01, m10) * det
|
|
53
|
+
);
|
|
42
54
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
const invert44 = invert.add(16, (out, m) => {
|
|
56
|
+
const coeffs = detCoeffs44(m);
|
|
57
|
+
let det = det44FromCoeffs(coeffs);
|
|
58
|
+
if (det === 0)
|
|
59
|
+
return;
|
|
60
|
+
det = 1 / det;
|
|
61
|
+
const [
|
|
62
|
+
m00,
|
|
63
|
+
m01,
|
|
64
|
+
m02,
|
|
65
|
+
m03,
|
|
66
|
+
m10,
|
|
67
|
+
m11,
|
|
68
|
+
m12,
|
|
69
|
+
m13,
|
|
70
|
+
m20,
|
|
71
|
+
m21,
|
|
72
|
+
m22,
|
|
73
|
+
m23,
|
|
74
|
+
m30,
|
|
75
|
+
m31,
|
|
76
|
+
m32,
|
|
77
|
+
m33
|
|
78
|
+
] = m;
|
|
79
|
+
const [d00, d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11] = coeffs;
|
|
80
|
+
return setC(
|
|
81
|
+
out || m,
|
|
82
|
+
dp6(m11, d11, -m12, d10, m13, d09) * det,
|
|
83
|
+
dp6(-m01, d11, m02, d10, -m03, d09) * det,
|
|
84
|
+
dp6(m31, d05, -m32, d04, m33, d03) * det,
|
|
85
|
+
dp6(-m21, d05, m22, d04, -m23, d03) * det,
|
|
86
|
+
dp6(-m10, d11, m12, d08, -m13, d07) * det,
|
|
87
|
+
dp6(m00, d11, -m02, d08, m03, d07) * det,
|
|
88
|
+
dp6(-m30, d05, m32, d02, -m33, d01) * det,
|
|
89
|
+
dp6(m20, d05, -m22, d02, m23, d01) * det,
|
|
90
|
+
dp6(m10, d10, -m11, d08, m13, d06) * det,
|
|
91
|
+
dp6(-m00, d10, m01, d08, -m03, d06) * det,
|
|
92
|
+
dp6(m30, d04, -m31, d02, m33, d00) * det,
|
|
93
|
+
dp6(-m20, d04, m21, d02, -m23, d00) * det,
|
|
94
|
+
dp6(-m10, d09, m11, d07, -m12, d06) * det,
|
|
95
|
+
dp6(m00, d09, -m01, d07, m02, d06) * det,
|
|
96
|
+
dp6(-m30, d03, m31, d01, -m32, d00) * det,
|
|
97
|
+
dp6(m20, d03, -m21, d01, m22, d00) * det
|
|
98
|
+
);
|
|
52
99
|
});
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
100
|
+
const invertQ = (out, a) => {
|
|
101
|
+
let d = magSq4(a);
|
|
102
|
+
d = d > 0 ? -1 / d : 0;
|
|
103
|
+
return setC4(out || a, a[0] * d, a[1] * d, a[2] * d, a[3] * -d);
|
|
104
|
+
};
|
|
105
|
+
export {
|
|
106
|
+
invert,
|
|
107
|
+
invert22,
|
|
108
|
+
invert23,
|
|
109
|
+
invert33,
|
|
110
|
+
invert44,
|
|
111
|
+
invertQ
|
|
57
112
|
};
|
package/lookat.js
CHANGED
|
@@ -3,19 +3,30 @@ import { dot3 } from "@thi.ng/vectors/dot";
|
|
|
3
3
|
import { normalize3 } from "@thi.ng/vectors/normalize";
|
|
4
4
|
import { setC } from "@thi.ng/vectors/setc";
|
|
5
5
|
import { sub3 } from "@thi.ng/vectors/sub";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
const lookAt = (out, eye, target, up) => {
|
|
7
|
+
const z = normalize3(null, sub3([], eye, target));
|
|
8
|
+
const x = normalize3(null, cross3([], up, z));
|
|
9
|
+
const y = normalize3(null, cross3([], z, x));
|
|
10
|
+
return setC(
|
|
11
|
+
out || [],
|
|
12
|
+
x[0],
|
|
13
|
+
y[0],
|
|
14
|
+
z[0],
|
|
15
|
+
0,
|
|
16
|
+
x[1],
|
|
17
|
+
y[1],
|
|
18
|
+
z[1],
|
|
19
|
+
0,
|
|
20
|
+
x[2],
|
|
21
|
+
y[2],
|
|
22
|
+
z[2],
|
|
23
|
+
0,
|
|
24
|
+
-dot3(eye, x),
|
|
25
|
+
-dot3(eye, y),
|
|
26
|
+
-dot3(eye, z),
|
|
27
|
+
1
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
export {
|
|
31
|
+
lookAt
|
|
21
32
|
};
|
package/m22-m23.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { set4 } from "@thi.ng/vectors/set";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* @param out -
|
|
7
|
-
* @param m22 -
|
|
8
|
-
*/
|
|
9
|
-
export const mat22to23 = (out, m22) => (!out && (out = []), set4(out, m22), (out[4] = out[5] = 0), out);
|
|
2
|
+
const mat22to23 = (out, m22) => (!out && (out = []), set4(out, m22), out[4] = out[5] = 0, out);
|
|
3
|
+
export {
|
|
4
|
+
mat22to23
|
|
5
|
+
};
|
package/m23-m22.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { set4 } from "@thi.ng/vectors/set";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* @param out -
|
|
7
|
-
* @param m23 -
|
|
8
|
-
*/
|
|
9
|
-
export const mat23to22 = (out, m23) => set4(out || [], m23);
|
|
2
|
+
const mat23to22 = (out, m23) => set4(out || [], m23);
|
|
3
|
+
export {
|
|
4
|
+
mat23to22
|
|
5
|
+
};
|
package/m23-m44.js
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { setC } from "@thi.ng/vectors/setc";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
m23[
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// z
|
|
15
|
-
0,
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
const mat23to44 = (out, m23) => setC(
|
|
3
|
+
out || [],
|
|
4
|
+
// x
|
|
5
|
+
m23[0],
|
|
6
|
+
m23[1],
|
|
7
|
+
0,
|
|
8
|
+
0,
|
|
9
|
+
// y
|
|
10
|
+
m23[2],
|
|
11
|
+
m23[3],
|
|
12
|
+
0,
|
|
13
|
+
0,
|
|
14
|
+
// z
|
|
15
|
+
0,
|
|
16
|
+
0,
|
|
17
|
+
1,
|
|
18
|
+
0,
|
|
19
|
+
// w
|
|
20
|
+
m23[4],
|
|
21
|
+
m23[5],
|
|
22
|
+
0,
|
|
23
|
+
1
|
|
24
|
+
);
|
|
25
|
+
export {
|
|
26
|
+
mat23to44
|
|
27
|
+
};
|
package/m33-m44.js
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
import { setC } from "@thi.ng/vectors/setc";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
m33[
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// z
|
|
15
|
-
m33[6],
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
const mat33to44 = (out, m33) => setC(
|
|
3
|
+
out || [],
|
|
4
|
+
// x
|
|
5
|
+
m33[0],
|
|
6
|
+
m33[1],
|
|
7
|
+
m33[2],
|
|
8
|
+
0,
|
|
9
|
+
// y
|
|
10
|
+
m33[3],
|
|
11
|
+
m33[4],
|
|
12
|
+
m33[5],
|
|
13
|
+
0,
|
|
14
|
+
// z
|
|
15
|
+
m33[6],
|
|
16
|
+
m33[7],
|
|
17
|
+
m33[8],
|
|
18
|
+
0,
|
|
19
|
+
// w
|
|
20
|
+
0,
|
|
21
|
+
0,
|
|
22
|
+
0,
|
|
23
|
+
1
|
|
24
|
+
);
|
|
25
|
+
export {
|
|
26
|
+
mat33to44
|
|
27
|
+
};
|
package/m44-m33.js
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { setS3 } from "@thi.ng/vectors/sets";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* @param out -
|
|
7
|
-
* @param m44 -
|
|
8
|
-
*/
|
|
9
|
-
export const mat44to33 = (out, m44) => (!out && (out = []),
|
|
10
|
-
setS3(out, m44),
|
|
11
|
-
setS3(out, m44, 3, 4),
|
|
12
|
-
setS3(out, m44, 6, 8));
|
|
2
|
+
const mat44to33 = (out, m44) => (!out && (out = []), setS3(out, m44), setS3(out, m44, 3, 4), setS3(out, m44, 6, 8));
|
|
3
|
+
export {
|
|
4
|
+
mat44to33
|
|
5
|
+
};
|
package/matn.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { scale22, scale23, scale33, scale44 } from "./scale.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
const mat22n = (out, n) => scale22(out, n);
|
|
3
|
+
const mat23n = (out, n) => scale23(out, n);
|
|
4
|
+
const mat33n = (out, n) => scale33(out, n);
|
|
5
|
+
const mat44n = (out, n) => scale44(out, [n, n, n, n]);
|
|
6
|
+
export {
|
|
7
|
+
mat22n,
|
|
8
|
+
mat23n,
|
|
9
|
+
mat33n,
|
|
10
|
+
mat44n
|
|
11
|
+
};
|
package/matv.js
CHANGED
|
@@ -1,37 +1,11 @@
|
|
|
1
1
|
import { setVV16, setVV4, setVV6, setVV9 } from "@thi.ng/vectors/setvv";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
* @param out -
|
|
14
|
-
* @param x -
|
|
15
|
-
* @param y -
|
|
16
|
-
* @param translate -
|
|
17
|
-
*/
|
|
18
|
-
export const mat23v = setVV6;
|
|
19
|
-
/**
|
|
20
|
-
* Initializes 3x3 matrix from 3D column vectors.
|
|
21
|
-
*
|
|
22
|
-
* @param out -
|
|
23
|
-
* @param x -
|
|
24
|
-
* @param y -
|
|
25
|
-
* @param z -
|
|
26
|
-
*/
|
|
27
|
-
export const mat33v = setVV9;
|
|
28
|
-
/**
|
|
29
|
-
* Initializes 4x4 matrix from 4D column vectors.
|
|
30
|
-
*
|
|
31
|
-
* @param out -
|
|
32
|
-
* @param x -
|
|
33
|
-
* @param y -
|
|
34
|
-
* @param z -
|
|
35
|
-
* @param w -
|
|
36
|
-
*/
|
|
37
|
-
export const mat44v = setVV16;
|
|
2
|
+
const mat22v = setVV4;
|
|
3
|
+
const mat23v = setVV6;
|
|
4
|
+
const mat33v = setVV9;
|
|
5
|
+
const mat44v = setVV16;
|
|
6
|
+
export {
|
|
7
|
+
mat22v,
|
|
8
|
+
mat23v,
|
|
9
|
+
mat33v,
|
|
10
|
+
mat44v
|
|
11
|
+
};
|
package/mixq.js
CHANGED
|
@@ -2,33 +2,23 @@ import { dot4 } from "@thi.ng/vectors/dot";
|
|
|
2
2
|
import { maddN4 } from "@thi.ng/vectors/maddn";
|
|
3
3
|
import { mulN4 } from "@thi.ng/vectors/muln";
|
|
4
4
|
import { set4 } from "@thi.ng/vectors/set";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
|
-
export const mixQ = (out, a, b, t, eps = 1e-3) => {
|
|
18
|
-
const d = dot4(a, b);
|
|
19
|
-
if (Math.abs(d) < 1.0) {
|
|
20
|
-
const theta = Math.acos(d);
|
|
21
|
-
const stheta = Math.sqrt(1 - d * d);
|
|
22
|
-
let u, v;
|
|
23
|
-
if (Math.abs(stheta) < eps) {
|
|
24
|
-
u = v = 0.5;
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
u = Math.sin(theta * (1 - t)) / stheta;
|
|
28
|
-
v = Math.sin(theta * t) / stheta;
|
|
29
|
-
}
|
|
30
|
-
!out && (out = a);
|
|
31
|
-
return maddN4(out, b, v, mulN4(out, a, u));
|
|
5
|
+
const mixQ = (out, a, b, t, eps = 1e-3) => {
|
|
6
|
+
const d = dot4(a, b);
|
|
7
|
+
if (Math.abs(d) < 1) {
|
|
8
|
+
const theta = Math.acos(d);
|
|
9
|
+
const stheta = Math.sqrt(1 - d * d);
|
|
10
|
+
let u, v;
|
|
11
|
+
if (Math.abs(stheta) < eps) {
|
|
12
|
+
u = v = 0.5;
|
|
13
|
+
} else {
|
|
14
|
+
u = Math.sin(theta * (1 - t)) / stheta;
|
|
15
|
+
v = Math.sin(theta * t) / stheta;
|
|
32
16
|
}
|
|
33
|
-
|
|
17
|
+
!out && (out = a);
|
|
18
|
+
return maddN4(out, b, v, mulN4(out, a, u));
|
|
19
|
+
}
|
|
20
|
+
return a !== out ? set4(out, a) : out;
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
mixQ
|
|
34
24
|
};
|
package/mul.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import { mul as _mul, mul4 } from "@thi.ng/vectors/mul";
|
|
2
2
|
import { defMath } from "./compile/emit.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* @param b -
|
|
14
|
-
*/
|
|
15
|
-
export const mul = _mul;
|
|
16
|
-
export const mul22 = mul4;
|
|
17
|
-
export const [mul23, mul33, mul44] = defMath(mul, "*");
|
|
3
|
+
const mul = _mul;
|
|
4
|
+
const mul22 = mul4;
|
|
5
|
+
const [mul23, mul33, mul44] = defMath(mul, "*");
|
|
6
|
+
export {
|
|
7
|
+
mul,
|
|
8
|
+
mul22,
|
|
9
|
+
mul23,
|
|
10
|
+
mul33,
|
|
11
|
+
mul44
|
|
12
|
+
};
|
package/mulm.js
CHANGED
|
@@ -1,48 +1,70 @@
|
|
|
1
1
|
import { dotS2, dotS3, dotS4 } from "@thi.ng/vectors/dots";
|
|
2
2
|
import { setC, setC4, setC6 } from "@thi.ng/vectors/setc";
|
|
3
3
|
import { vop } from "@thi.ng/vectors/vop";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
4
|
+
const mulM = vop(1);
|
|
5
|
+
const mulM22 = mulM.add(
|
|
6
|
+
4,
|
|
7
|
+
(out, a, b) => setC4(
|
|
8
|
+
out || a,
|
|
9
|
+
dotS2(a, b, 0, 0, 2),
|
|
10
|
+
dotS2(a, b, 1, 0, 2),
|
|
11
|
+
dotS2(a, b, 0, 2, 2),
|
|
12
|
+
dotS2(a, b, 1, 2, 2)
|
|
13
|
+
)
|
|
14
|
+
);
|
|
15
|
+
const mulM23 = mulM.add(
|
|
16
|
+
6,
|
|
17
|
+
(out, a, b) => setC6(
|
|
18
|
+
out || a,
|
|
19
|
+
dotS2(a, b, 0, 0, 2),
|
|
20
|
+
dotS2(a, b, 1, 0, 2),
|
|
21
|
+
dotS2(a, b, 0, 2, 2),
|
|
22
|
+
dotS2(a, b, 1, 2, 2),
|
|
23
|
+
dotS2(a, b, 0, 4, 2) + a[4],
|
|
24
|
+
dotS2(a, b, 1, 4, 2) + a[5]
|
|
25
|
+
)
|
|
26
|
+
);
|
|
27
|
+
const mulM33 = mulM.add(
|
|
28
|
+
9,
|
|
29
|
+
(out, a, b) => setC(
|
|
30
|
+
out || a,
|
|
31
|
+
dotS3(a, b, 0, 0, 3),
|
|
32
|
+
dotS3(a, b, 1, 0, 3),
|
|
33
|
+
dotS3(a, b, 2, 0, 3),
|
|
34
|
+
dotS3(a, b, 0, 3, 3),
|
|
35
|
+
dotS3(a, b, 1, 3, 3),
|
|
36
|
+
dotS3(a, b, 2, 3, 3),
|
|
37
|
+
dotS3(a, b, 0, 6, 3),
|
|
38
|
+
dotS3(a, b, 1, 6, 3),
|
|
39
|
+
dotS3(a, b, 2, 6, 3)
|
|
40
|
+
)
|
|
41
|
+
);
|
|
42
|
+
const mulM44 = mulM.add(
|
|
43
|
+
16,
|
|
44
|
+
(out, a, b) => setC(
|
|
45
|
+
out || a,
|
|
46
|
+
dotS4(a, b, 0, 0, 4),
|
|
47
|
+
dotS4(a, b, 1, 0, 4),
|
|
48
|
+
dotS4(a, b, 2, 0, 4),
|
|
49
|
+
dotS4(a, b, 3, 0, 4),
|
|
50
|
+
dotS4(a, b, 0, 4, 4),
|
|
51
|
+
dotS4(a, b, 1, 4, 4),
|
|
52
|
+
dotS4(a, b, 2, 4, 4),
|
|
53
|
+
dotS4(a, b, 3, 4, 4),
|
|
54
|
+
dotS4(a, b, 0, 8, 4),
|
|
55
|
+
dotS4(a, b, 1, 8, 4),
|
|
56
|
+
dotS4(a, b, 2, 8, 4),
|
|
57
|
+
dotS4(a, b, 3, 8, 4),
|
|
58
|
+
dotS4(a, b, 0, 12, 4),
|
|
59
|
+
dotS4(a, b, 1, 12, 4),
|
|
60
|
+
dotS4(a, b, 2, 12, 4),
|
|
61
|
+
dotS4(a, b, 3, 12, 4)
|
|
62
|
+
)
|
|
63
|
+
);
|
|
64
|
+
export {
|
|
65
|
+
mulM,
|
|
66
|
+
mulM22,
|
|
67
|
+
mulM23,
|
|
68
|
+
mulM33,
|
|
69
|
+
mulM44
|
|
70
|
+
};
|
package/muln.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { mulN as _mulN, mulN4 } from "@thi.ng/vectors/muln";
|
|
2
2
|
import { defMathN } from "./compile/emit.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export const mulN = _mulN;
|
|
14
|
-
export const mulN22 = mulN4;
|
|
15
|
-
export const [mulN23, mulN33, mulN44] = defMathN(mulN, "*");
|
|
3
|
+
const mulN = _mulN;
|
|
4
|
+
const mulN22 = mulN4;
|
|
5
|
+
const [mulN23, mulN33, mulN44] = defMathN(mulN, "*");
|
|
6
|
+
export {
|
|
7
|
+
mulN,
|
|
8
|
+
mulN22,
|
|
9
|
+
mulN23,
|
|
10
|
+
mulN33,
|
|
11
|
+
mulN44
|
|
12
|
+
};
|
package/mulq.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { setC4 } from "@thi.ng/vectors/setc";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
const mulQ = (out, a, b) => {
|
|
3
|
+
const { 0: ax, 1: ay, 2: az, 3: aw } = a;
|
|
4
|
+
const { 0: bx, 1: by, 2: bz, 3: bw } = b;
|
|
5
|
+
return setC4(
|
|
6
|
+
out || a,
|
|
7
|
+
ax * bw + aw * bx + ay * bz - az * by,
|
|
8
|
+
ay * bw + aw * by + az * bx - ax * bz,
|
|
9
|
+
az * bw + aw * bz + ax * by - ay * bx,
|
|
10
|
+
aw * bw - ax * bx - ay * by - az * bz
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
mulQ
|
|
14
15
|
};
|