matrix-utilities
Version:
Tiny, high performance utilities for performing 2/3D matrix calculations. Full unit test coverage, compatible with Node/CommonJS, AMD, and browser globals.
1 lines • 1.3 kB
JavaScript
!function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd?define("matrix-utilities",[],b):a["matrix-utilities"]=b()}(this,function(){var a;return a=function(){var a;return a={add:function(a,b){var c,d,e,f,g,h,i,j,k;if(a.length!==b.length)throw new Error("Matrix y dimensions do not match");for(e=[],c=h=0,j=a.length;j>h;c=++h){if(f=a[c],f.length!==b[c].length)throw new Error("Matrix x dimensions do not match on row "+(c+1));for(e[c]=[],d=i=0,k=f.length;k>i;d=++i)g=f[d],e[c][d]=g+b[c][d]}return e},multiply:function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a[0].length!==b.length)throw new Error("Matrix 1's row count should equal matrix 2's column count");for(h=a[0].length,f=[],c=k=0,m=b.length;m>k;c=++k)for(g=b[c],f[c]=[],d=l=0,n=g.length;n>l;d=++l){for(j=g[d],e=h,i=0;e--;)i+=a[c][e]*b[e][d];f[c][d]=i}return f},flip:function(a){var b,c,d,e,f,g,h,i,j;for(d=[],b=g=0,i=a.length;i>g;b=++g)for(e=a[b],c=h=0,j=e.length;j>h;c=++h)f=e[c],(d[c]||(d[c]=[]))[b]=f;return d},to2d:function(a){return[[a[0][0]||1,a[0][1]||0,a[0][3]||0],[a[1][0]||0,a[1][1]||1,a[1][3]||0]]},to3d:function(a){return[[a[0][0]||1,a[0][1]||0,0,a[0][2]||0],[a[1][0]||0,a[1][1]||1,0,a[1][2]||0],[0,0,1,0],[0,0,0,1]]},Identity:function(){return[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]}}}()});