UNPKG

rematrix

Version:

Matrix transformations made easy

3 lines (2 loc) 3.22 kB
/*! @license Rematrix v0.7.2 (MIT) Copyright 2021 Julian Lloyd. */ var Rematrix=function(t){"use strict";function p(t){if(t&&t.constructor===Array){var r=t.filter(function(t){return"number"==typeof t}).filter(function(t){return!isNaN(t)});if(6===t.length&&6===r.length){var n=i();return n[0]=r[0],n[1]=r[1],n[4]=r[2],n[5]=r[3],n[12]=r[4],n[13]=r[5],n}if(16===t.length&&16===r.length)return t}throw new TypeError("Expected a `number[]` with length 6 or 16.")}function i(){for(var t=[],r=0;r<16;r++)r%5==0?t.push(1):t.push(0);return t}function r(t){var r=Math.PI/180*t,n=i();return n[0]=n[5]=Math.cos(r),n[1]=n[4]=Math.sin(r),n[4]*=-1,n}return t.format=p,t.fromString=function(t){if("string"==typeof t){var r=t.match(/matrix(3d)?\(([^)]+)\)/);if(r)return p(r[2].split(",").map(parseFloat));if("none"===t||""===t)return i()}throw new TypeError("Expected a string containing `matrix()` or `matrix3d()")},t.identity=i,t.inverse=function(t){var r=p(t),n=r[0]*r[5]-r[4]*r[1],e=r[0]*r[6]-r[4]*r[2],a=r[0]*r[7]-r[4]*r[3],i=r[1]*r[6]-r[5]*r[2],u=r[1]*r[7]-r[5]*r[3],o=r[2]*r[7]-r[6]*r[3],f=r[10]*r[15]-r[14]*r[11],c=r[9]*r[15]-r[13]*r[11],v=r[9]*r[14]-r[13]*r[10],s=r[8]*r[15]-r[12]*r[11],h=r[8]*r[14]-r[12]*r[10],l=r[8]*r[13]-r[12]*r[9],M=1/(n*f-e*c+a*v+i*s-u*h+o*l);if(isNaN(M)||M==1/0)throw new Error("Inverse determinant attempted to divide by zero.");return[(r[5]*f-r[6]*c+r[7]*v)*M,(-r[1]*f+r[2]*c-r[3]*v)*M,(r[13]*o-r[14]*u+r[15]*i)*M,(-r[9]*o+r[10]*u-r[11]*i)*M,(-r[4]*f+r[6]*s-r[7]*h)*M,(r[0]*f-r[2]*s+r[3]*h)*M,(-r[12]*o+r[14]*a-r[15]*e)*M,(r[8]*o-r[10]*a+r[11]*e)*M,(r[4]*c-r[5]*s+r[7]*l)*M,(-r[0]*c+r[1]*s-r[3]*l)*M,(r[12]*u-r[13]*a+r[15]*n)*M,(-r[8]*u+r[9]*a-r[11]*n)*M,(-r[4]*v+r[5]*h-r[6]*l)*M,(r[0]*v-r[1]*h+r[2]*l)*M,(-r[12]*i+r[13]*e-r[14]*n)*M,(r[8]*i-r[9]*e+r[10]*n)*M]},t.multiply=function(t,r){for(var n=p(t),e=p(r),a=[],i=0;i<4;i++)for(var u=[n[i],n[i+4],n[i+8],n[i+12]],o=0;o<4;o++){var f=4*o,c=[e[f],e[1+f],e[2+f],e[3+f]],v=u[0]*c[0]+u[1]*c[1]+u[2]*c[2]+u[3]*c[3];a[i+f]=v}return a},t.perspective=function(t){var r=i();return r[11]=-1/t,r},t.rotate=function(t){return r(t)},t.rotateX=function(t){var r=Math.PI/180*t,n=i();return n[5]=n[10]=Math.cos(r),n[6]=n[9]=Math.sin(r),n[9]*=-1,n},t.rotateY=function(t){var r=Math.PI/180*t,n=i();return n[0]=n[10]=Math.cos(r),n[2]=n[8]=Math.sin(r),n[2]*=-1,n},t.rotateZ=r,t.scale=function(t,r){var n=i();return n[0]=t,n[5]="number"==typeof r?r:t,n},t.scaleX=function(t){var r=i();return r[0]=t,r},t.scaleY=function(t){var r=i();return r[5]=t,r},t.scaleZ=function(t){var r=i();return r[10]=t,r},t.skew=function(t,r){var n=Math.PI/180*t,e=i();if(e[4]=Math.tan(n),r){var a=Math.PI/180*r;e[1]=Math.tan(a)}return e},t.skewX=function(t){var r=Math.PI/180*t,n=i();return n[4]=Math.tan(r),n},t.skewY=function(t){var r=Math.PI/180*t,n=i();return n[1]=Math.tan(r),n},t.toString=function(t){return"matrix3d("+p(t).join(", ")+")"},t.translate=function(t,r){var n=i();return n[12]=t,r&&(n[13]=r),n},t.translate3d=function(t,r,n){var e=i();return void 0!==t&&void 0!==r&&void 0!==n&&(e[12]=t,e[13]=r,e[14]=n),e},t.translateX=function(t){var r=i();return r[12]=t,r},t.translateY=function(t){var r=i();return r[13]=t,r},t.translateZ=function(t){var r=i();return r[14]=t,r},t}({});