UNPKG

lathe

Version:

A discrete solid modeller using BSPs

72 lines (62 loc) 2.67 kB
define([], function() { 'use strict'; var determinant2x2 = function(m) { return m[0][0]*m[1][1] - m[0][1]*m[1][0]; }; var determinant3x3 = function(m) { return (m[0][0]*m[1][1]*m[2][2] + m[0][1]*m[1][2]*m[2][0] + m[0][2]*m[1][0]*m[2][1] - m[0][0]*m[1][2]*m[2][1] - m[0][1]*m[1][0]*m[2][2] - m[0][2]*m[1][1]*m[2][0]); }; var determinant4x4 = function(m) { return m[0][3]*m[1][2]*m[2][1]*m[3][0] - m[0][2]*m[1][3]*m[2][1]*m[3][0] - m[0][3]*m[1][1]*m[2][2]*m[3][0] + m[0][1]*m[1][3]*m[2][2]*m[3][0]+ m[0][2]*m[1][1]*m[2][3]*m[3][0] - m[0][1]*m[1][2]*m[2][3]*m[3][0] - m[0][3]*m[1][2]*m[2][0]*m[3][1] + m[0][2]*m[1][3]*m[2][0]*m[3][1]+ m[0][3]*m[1][0]*m[2][2]*m[3][1] - m[0][0]*m[1][3]*m[2][2]*m[3][1] - m[0][2]*m[1][0]*m[2][3]*m[3][1] + m[0][0]*m[1][2]*m[2][3]*m[3][1]+ m[0][3]*m[1][1]*m[2][0]*m[3][2] - m[0][1]*m[1][3]*m[2][0]*m[3][2] - m[0][3]*m[1][0]*m[2][1]*m[3][2] + m[0][0]*m[1][3]*m[2][1]*m[3][2]+ m[0][1]*m[1][0]*m[2][3]*m[3][2] - m[0][0]*m[1][1]*m[2][3]*m[3][2] - m[0][2]*m[1][1]*m[2][0]*m[3][3] + m[0][1]*m[1][2]*m[2][0]*m[3][3]+ m[0][2]*m[1][0]*m[2][1]*m[3][3] - m[0][0]*m[1][2]*m[2][1]*m[3][3] - m[0][1]*m[1][0]*m[2][2]*m[3][3] + m[0][0]*m[1][1]*m[2][2]*m[3][3]; }; var minorDeterminant = function(m, i, j) { return m[(i+1)%3][(j+1)%3]*m[(i+2)%3][(j+2)%3] - m[(i+1)%3][(j+2)%3]*m[(i+2)%3][(j+1)%3]; }; var transpose2x2 = function(a) { return [ [a[0][0], a[1][0]], [a[0][1], a[1][1]], ]; }; var transpose3x3 = function(a) { return [ [a[0][0], a[1][0], a[2][0]], [a[0][1], a[1][1], a[2][1]], [a[0][2], a[1][2], a[2][2]] ]; }; var multiply3x3 = function(a,b) { return [ [ a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0], a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0], a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0] ], [ a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1], a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1], a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1] ], [ a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2], a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2], a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2] ] ]; }; return { determinant2x2 : determinant2x2, transpose2x2 : transpose2x2, determinant3x3 : determinant3x3, minorDeterminant : minorDeterminant, transpose3x3 : transpose3x3, multiply3x3 : multiply3x3, determinant4x4 : determinant4x4, }; });