react-native-redash
Version:
Utility library for React Native Reanimated
2 lines • 4.11 kB
JavaScript
var exhaustiveCheck=function exhaustiveCheck(a){"worklet";throw new Error("Unexhaustive handling for "+a);};export var identity4=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];export var translate=function translate(x,y,z){"worklet";return[1,0,0,x,0,1,0,y,0,0,1,z,0,0,0,1];};var scale=function scale(sx,sy,sz){"worklet";return[sx,0,0,0,0,sy,0,0,0,0,sz,0,0,0,0,1];};export var skewX=function skewX(s){"worklet";return[1,0,0,0,Math.tan(s),1,0,0,0,0,1,0,0,0,0,1];};export var skewY=function skewY(s){"worklet";return[1,Math.tan(s),0,0,0,1,0,0,0,0,1,0,0,0,0,1];};export var perspective=function perspective(p){"worklet";return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1/p,1];};var normalizeVec=function normalizeVec(vec){"worklet";var x=vec[0];var y=vec[1];var z=vec[2];var length=Math.sqrt(x*x+y*y+z*z);if(length===0){return[0,0,0];}return[x/length,y/length,z/length];};var rotatedUnitSinCos=function rotatedUnitSinCos(axisVec,sinAngle,cosAngle){"worklet";var x=axisVec[0];var y=axisVec[1];var z=axisVec[2];var c=cosAngle;var s=sinAngle;var t=1-c;return[t*x*x+c,t*x*y-s*z,t*x*z+s*y,0,t*x*y+s*z,t*y*y+c,t*y*z-s*x,0,t*x*z-s*y,t*y*z+s*x,t*z*z+c,0,0,0,0,1];};export var rotate=function rotate(axis,value){"worklet";return rotatedUnitSinCos(normalizeVec(axis),Math.sin(value),Math.cos(value));};export var matrixVecMul4=function matrixVecMul4(m,v){"worklet";return[m[0]*v[0]+m[1]*v[1]+m[2]*v[2]+m[3]*v[3],m[4]*v[0]+m[5]*v[1]+m[6]*v[2]+m[7]*v[3],m[8]*v[0]+m[9]*v[1]+m[10]*v[2]+m[11]*v[3],m[12]*v[0]+m[13]*v[1]+m[14]*v[2]+m[15]*v[3]];};export var mapPoint3d=function mapPoint3d(m,v){"worklet";var r=matrixVecMul4(m,[v[0],v[1],v[2],1]);return[r[0]/r[3],r[1]/r[3],r[2]/r[3]];};export var multiply4=function multiply4(a,b){"worklet";var result=new Array(16).fill(0);for(var i=0;i<4;i++){for(var j=0;j<4;j++){result[i*4+j]=a[i*4]*b[j]+a[i*4+1]*b[j+4]+a[i*4+2]*b[j+8]+a[i*4+3]*b[j+12];}}return result;};export var toMatrix3=function toMatrix3(m){"worklet";return[m[0],m[1],m[2],m[4],m[5],m[6],m[3],m[7],1];};export var processTransform3d=function processTransform3d(transforms){"worklet";return transforms.reduce(function(acc,val){var key=Object.keys(val)[0];var transform=val;if(key==="translateX"){var value=transform[key];return multiply4(acc,translate(value,0,0));}if(key==="translate"){var _translateValue$;var translateValue=transform[key];var x=translateValue[0];var y=translateValue[1];var z=(_translateValue$=translateValue[2])!=null?_translateValue$:0;return multiply4(acc,translate(x,y,z));}if(key==="translateY"){var _value=transform[key];return multiply4(acc,translate(0,_value,0));}if(key==="translateZ"){var _value2=transform[key];return multiply4(acc,translate(0,0,_value2));}if(key==="scale"){var _value3=transform[key];return multiply4(acc,scale(_value3,_value3,1));}if(key==="scaleX"){var _value4=transform[key];return multiply4(acc,scale(_value4,1,1));}if(key==="scaleY"){var _value5=transform[key];return multiply4(acc,scale(1,_value5,1));}if(key==="skewX"){var _value6=transform[key];return multiply4(acc,skewX(_value6));}if(key==="skewY"){var _value7=transform[key];return multiply4(acc,skewY(_value7));}if(key==="rotateX"){var _value8=transform[key];return multiply4(acc,rotate([1,0,0],_value8));}if(key==="rotateY"){var _value9=transform[key];return multiply4(acc,rotate([0,1,0],_value9));}if(key==="perspective"){var _value10=transform[key];return multiply4(acc,perspective(_value10));}if(key==="rotate"||key==="rotateZ"){var _value11=transform[key];return multiply4(acc,rotate([0,0,1],_value11));}if(key==="matrix"){var _value12=transform[key];return multiply4(acc,_value12);}return exhaustiveCheck(key);},identity4);};export var concat4=function concat4(m,transform){"worklet";return multiply4(m,processTransform3d(transform));};export var rotateX=function rotateX(value){"worklet";return rotate([1,0,0],value);};export var rotateY=function rotateY(value){"worklet";return rotate([0,1,0],value);};export var rotateZ=function rotateZ(value){"worklet";return rotate([0,0,1],value);};export var Matrix4={translate:translate,scale:scale,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ};
//# sourceMappingURL=Matrix4.js.map