@thi.ng/matrices
Version:
Matrix & quaternion operations for 2D/3D geometry processing
71 lines (70 loc) • 1.47 kB
JavaScript
import { dotS2, dotS3, dotS4 } from "@thi.ng/vectors/dots";
import { setC, setC4, setC6 } from "@thi.ng/vectors/setc";
import { vop } from "@thi.ng/vectors/vop";
const mulM = vop(1);
const mulM22 = mulM.add(
4,
(out, a, b) => setC4(
out || a,
dotS2(a, b, 0, 0, 2),
dotS2(a, b, 1, 0, 2),
dotS2(a, b, 0, 2, 2),
dotS2(a, b, 1, 2, 2)
)
);
const mulM23 = mulM.add(
6,
(out, a, b) => setC6(
out || a,
dotS2(a, b, 0, 0, 2),
dotS2(a, b, 1, 0, 2),
dotS2(a, b, 0, 2, 2),
dotS2(a, b, 1, 2, 2),
dotS2(a, b, 0, 4, 2) + a[4],
dotS2(a, b, 1, 4, 2) + a[5]
)
);
const mulM33 = mulM.add(
9,
(out, a, b) => setC(
out || a,
dotS3(a, b, 0, 0, 3),
dotS3(a, b, 1, 0, 3),
dotS3(a, b, 2, 0, 3),
dotS3(a, b, 0, 3, 3),
dotS3(a, b, 1, 3, 3),
dotS3(a, b, 2, 3, 3),
dotS3(a, b, 0, 6, 3),
dotS3(a, b, 1, 6, 3),
dotS3(a, b, 2, 6, 3)
)
);
const mulM44 = mulM.add(
16,
(out, a, b) => setC(
out || a,
dotS4(a, b, 0, 0, 4),
dotS4(a, b, 1, 0, 4),
dotS4(a, b, 2, 0, 4),
dotS4(a, b, 3, 0, 4),
dotS4(a, b, 0, 4, 4),
dotS4(a, b, 1, 4, 4),
dotS4(a, b, 2, 4, 4),
dotS4(a, b, 3, 4, 4),
dotS4(a, b, 0, 8, 4),
dotS4(a, b, 1, 8, 4),
dotS4(a, b, 2, 8, 4),
dotS4(a, b, 3, 8, 4),
dotS4(a, b, 0, 12, 4),
dotS4(a, b, 1, 12, 4),
dotS4(a, b, 2, 12, 4),
dotS4(a, b, 3, 12, 4)
)
);
export {
mulM,
mulM22,
mulM23,
mulM33,
mulM44
};