64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
const m3 = {
|
|
xRotation: (phi) => {
|
|
const c = Math.cos(phi), s = Math.sin(phi);
|
|
return [
|
|
1, 0, 0,
|
|
0, c, -s,
|
|
0, s, c
|
|
];
|
|
},
|
|
yRotation: (phi) => {
|
|
const c = Math.cos(phi), s = Math.sin(phi);
|
|
return [
|
|
c, 0, s,
|
|
0, 1, 0,
|
|
-s, 0, c
|
|
];
|
|
},
|
|
zRotation: (phi) => {
|
|
const c = Math.cos(phi), s = Math.sin(phi);
|
|
return [
|
|
c, -s, 0,
|
|
s, c, 0,
|
|
0, 0, 1
|
|
];
|
|
},
|
|
add: (m1, m2) => [
|
|
m1[0] + m2[0],
|
|
m1[1] + m2[1],
|
|
m1[2] + m2[2],
|
|
m1[3] + m2[3],
|
|
m1[4] + m2[4],
|
|
m1[5] + m2[5],
|
|
m1[6] + m2[6],
|
|
m1[7] + m2[7],
|
|
m1[8] + m2[8],
|
|
],
|
|
mul: (m1, m2) => [
|
|
m1[0]*m2[0] + m1[1]*m2[3] + m1[2]*m2[6],
|
|
m1[0]*m2[1] + m1[1]*m2[4] + m1[2]*m2[7],
|
|
m1[0]*m2[2] + m1[1]*m2[5] + m1[2]*m2[8],
|
|
m1[3]*m2[0] + m1[4]*m2[3] + m1[5]*m2[6],
|
|
m1[3]*m2[1] + m1[4]*m2[4] + m1[5]*m2[7],
|
|
m1[3]*m2[2] + m1[4]*m2[5] + m1[5]*m2[8],
|
|
m1[6]*m2[0] + m1[7]*m2[3] + m1[8]*m2[6],
|
|
m1[6]*m2[1] + m1[7]*m2[4] + m1[8]*m2[7],
|
|
m1[6]*m2[2] + m1[7]*m2[5] + m1[8]*m2[8],
|
|
],
|
|
mulV: (m, v) => [
|
|
m[0]*v[0] + m[1]*v[1] + m[2]*v[2],
|
|
m[3]*v[0] + m[4]*v[1] + m[5]*v[2],
|
|
m[6]*v[0] + m[7]*v[1] + m[8]*v[2]
|
|
],
|
|
eq: (m1, m2) =>
|
|
m1[0] === m2[0] &&
|
|
m1[1] === m2[1] &&
|
|
m1[2] === m2[2] &&
|
|
m1[3] === m2[3] &&
|
|
m1[4] === m2[4] &&
|
|
m1[5] === m2[5] &&
|
|
m1[6] === m2[6] &&
|
|
m1[7] === m2[7] &&
|
|
m1[8] === m2[8],
|
|
};
|