UNPKG

@thi.ng/matrices

Version:

Matrix & quaternion operations for 2D/3D geometry processing

55 lines (54 loc) 1.23 kB
import { dotC4, dotC6 } from "@thi.ng/vectors/dotc"; const det22 = (m) => dotC4(m[0], m[3], -m[1], m[2]); const det23 = det22; const det33 = (m) => { const [m00, m01, m02, m10, m11, m12, m20, m21, m22] = m; const d01 = dotC4(m22, m11, -m12, m21); const d11 = dotC4(m12, m20, -m22, m10); const d21 = dotC4(m21, m10, -m11, m20); return dotC6(m00, d01, m01, d11, m02, d21); }; const detCoeffs44 = (m) => { const [ m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33 ] = m; return [ dotC4(m00, m11, -m01, m10), dotC4(m00, m12, -m02, m10), dotC4(m00, m13, -m03, m10), dotC4(m01, m12, -m02, m11), dotC4(m01, m13, -m03, m11), dotC4(m02, m13, -m03, m12), dotC4(m20, m31, -m21, m30), dotC4(m20, m32, -m22, m30), dotC4(m20, m33, -m23, m30), dotC4(m21, m32, -m22, m31), dotC4(m21, m33, -m23, m31), dotC4(m22, m33, -m23, m32) ]; }; const det44FromCoeffs = (d) => dotC6(d[0], d[11], -d[1], d[10], d[2], d[9]) + dotC6(d[3], d[8], -d[4], d[7], d[5], d[6]); const det44 = (m) => det44FromCoeffs(detCoeffs44(m)); export { det22, det23, det33, det44, det44FromCoeffs, detCoeffs44 };