home *** CD-ROM | disk | FTP | other *** search
- class sandy.math.Matrix4Math
- {
- static var _aSin = new Array(360);
- static var _aCos = new Array(360);
- static var _bIsPrecalculed = false;
- static var _bMatrixExtends = sandy.math.Matrix4Math.preCalc();
- function Matrix4Math()
- {
- }
- static function multiply3x3(m1, m2)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- var _loc18_ = m1.n11;
- var _loc21_ = m2.n11;
- var _loc13_ = m1.n21;
- var _loc19_ = m2.n21;
- var _loc8_ = m1.n31;
- var _loc14_ = m2.n31;
- var _loc15_ = m1.n12;
- var _loc20_ = m2.n12;
- var _loc9_ = m1.n22;
- var _loc16_ = m2.n22;
- var _loc5_ = m1.n32;
- var _loc10_ = m2.n32;
- var _loc11_ = m1.n13;
- var _loc17_ = m2.n13;
- var _loc6_ = m1.n23;
- var _loc12_ = m2.n23;
- var _loc4_ = m1.n33;
- var _loc7_ = m2.n33;
- _loc1_.n11 = _loc18_ * _loc21_ + _loc15_ * _loc19_ + _loc11_ * _loc14_;
- _loc1_.n12 = _loc18_ * _loc20_ + _loc15_ * _loc16_ + _loc11_ * _loc10_;
- _loc1_.n13 = _loc18_ * _loc17_ + _loc15_ * _loc12_ + _loc11_ * _loc7_;
- _loc1_.n21 = _loc13_ * _loc21_ + _loc9_ * _loc19_ + _loc6_ * _loc14_;
- _loc1_.n22 = _loc13_ * _loc20_ + _loc9_ * _loc16_ + _loc6_ * _loc10_;
- _loc1_.n23 = _loc13_ * _loc17_ + _loc9_ * _loc12_ + _loc6_ * _loc7_;
- _loc1_.n31 = _loc8_ * _loc21_ + _loc5_ * _loc19_ + _loc4_ * _loc14_;
- _loc1_.n32 = _loc8_ * _loc20_ + _loc5_ * _loc16_ + _loc4_ * _loc10_;
- _loc1_.n33 = _loc8_ * _loc17_ + _loc5_ * _loc12_ + _loc4_ * _loc7_;
- return _loc1_;
- }
- static function multiply(m1, m2)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- var _loc24_ = undefined;
- var _loc27_ = undefined;
- var _loc19_ = undefined;
- var _loc25_ = undefined;
- var _loc13_ = undefined;
- var _loc20_ = undefined;
- var _loc33_ = undefined;
- var _loc35_ = undefined;
- var _loc21_ = undefined;
- var _loc26_ = undefined;
- var _loc14_ = undefined;
- var _loc22_ = undefined;
- var _loc8_ = undefined;
- var _loc15_ = undefined;
- var _loc31_ = undefined;
- var _loc34_ = undefined;
- var _loc16_ = undefined;
- var _loc23_ = undefined;
- var _loc9_ = undefined;
- var _loc17_ = undefined;
- var _loc5_ = undefined;
- var _loc10_ = undefined;
- var _loc29_ = undefined;
- var _loc32_ = undefined;
- var _loc11_ = undefined;
- var _loc18_ = undefined;
- var _loc6_ = undefined;
- var _loc12_ = undefined;
- var _loc4_ = undefined;
- var _loc7_ = undefined;
- var _loc28_ = undefined;
- var _loc30_ = undefined;
- _loc1_.n11 = (_loc24_ = m1.n11) * (_loc27_ = m2.n11) + (_loc21_ = m1.n12) * (_loc25_ = m2.n21) + (_loc16_ = m1.n13) * (_loc20_ = m2.n31) + (_loc11_ = m1.n14) * (_loc35_ = m2.n41);
- _loc1_.n12 = _loc24_ * (_loc26_ = m2.n12) + _loc21_ * (_loc22_ = m2.n22) + _loc16_ * (_loc15_ = m2.n32) + _loc11_ * (_loc34_ = m2.n42);
- _loc1_.n13 = _loc24_ * (_loc23_ = m2.n13) + _loc21_ * (_loc17_ = m2.n23) + _loc16_ * (_loc10_ = m2.n33) + _loc11_ * (_loc32_ = m2.n43);
- _loc1_.n14 = _loc24_ * (_loc18_ = m2.n14) + _loc21_ * (_loc12_ = m2.n24) + _loc16_ * (_loc7_ = m2.n34) + _loc11_ * (_loc30_ = m2.n44);
- _loc1_.n21 = (_loc19_ = m1.n21) * _loc27_ + (_loc14_ = m1.n22) * _loc25_ + (_loc9_ = m1.n23) * _loc20_ + (_loc6_ = m1.n24) * _loc35_;
- _loc1_.n22 = _loc19_ * _loc26_ + _loc14_ * _loc22_ + _loc9_ * _loc15_ + _loc6_ * _loc34_;
- _loc1_.n23 = _loc19_ * _loc23_ + _loc14_ * _loc17_ + _loc9_ * _loc10_ + _loc6_ * _loc32_;
- _loc1_.n24 = _loc19_ * _loc18_ + _loc14_ * _loc12_ + _loc9_ * _loc7_ + _loc6_ * _loc30_;
- _loc1_.n31 = (_loc13_ = m1.n31) * _loc27_ + (_loc8_ = m1.n32) * _loc25_ + (_loc5_ = m1.n33) * _loc20_ + (_loc4_ = m1.n34) * _loc35_;
- _loc1_.n32 = _loc13_ * _loc26_ + _loc8_ * _loc22_ + _loc5_ * _loc15_ + _loc4_ * _loc34_;
- _loc1_.n33 = _loc13_ * _loc23_ + _loc8_ * _loc17_ + _loc5_ * _loc10_ + _loc4_ * _loc32_;
- _loc1_.n34 = _loc13_ * _loc18_ + _loc8_ * _loc12_ + _loc5_ * _loc7_ + _loc4_ * _loc30_;
- _loc1_.n41 = (_loc33_ = m1.n41) * _loc27_ + (_loc31_ = m1.n42) * _loc25_ + (_loc29_ = m1.n43) * _loc20_ + (_loc28_ = m1.n44) * _loc35_;
- _loc1_.n42 = _loc33_ * _loc26_ + _loc31_ * _loc22_ + _loc29_ * _loc15_ + _loc28_ * _loc34_;
- _loc1_.n43 = _loc33_ * _loc23_ + _loc31_ * _loc17_ + _loc29_ * _loc10_ + _loc28_ * _loc32_;
- _loc1_.n44 = _loc33_ * _loc18_ + _loc31_ * _loc12_ + _loc29_ * _loc7_ + _loc28_ * _loc30_;
- return _loc1_;
- }
- static function addMatrix(m1, m2)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- _loc1_.n11 = m1.n11 + m2.n11;
- _loc1_.n12 = m1.n12 + m2.n12;
- _loc1_.n13 = m1.n13 + m2.n13;
- _loc1_.n14 = m1.n14 + m2.n14;
- _loc1_.n21 = m1.n21 + m2.n21;
- _loc1_.n22 = m1.n22 + m2.n22;
- _loc1_.n23 = m1.n23 + m2.n23;
- _loc1_.n24 = m1.n24 + m2.n24;
- _loc1_.n31 = m1.n31 + m2.n31;
- _loc1_.n32 = m1.n32 + m2.n32;
- _loc1_.n33 = m1.n33 + m2.n33;
- _loc1_.n34 = m1.n34 + m2.n34;
- _loc1_.n41 = m1.n41 + m2.n41;
- _loc1_.n42 = m1.n42 + m2.n42;
- _loc1_.n43 = m1.n43 + m2.n43;
- _loc1_.n44 = m1.n44 + m2.n44;
- return _loc1_;
- }
- static function clone(m)
- {
- return new sandy.core.data.Matrix4(m.n11,m.n12,m.n13,m.n14,m.n21,m.n22,m.n23,m.n24,m.n31,m.n32,m.n33,m.n34,m.n41,m.n42,m.n43,m.n44);
- }
- static function vectorMult(m, v)
- {
- var _loc5_ = undefined;
- var _loc4_ = undefined;
- var _loc3_ = undefined;
- v.x = (_loc5_ = v.x) * m.n11 + (_loc4_ = v.y) * m.n12 + (_loc3_ = v.z) * m.n13 + m.n14;
- v.y = _loc5_ * m.n21 + _loc4_ * m.n22 + _loc3_ * m.n23 + m.n24;
- v.z = _loc5_ * m.n31 + _loc4_ * m.n32 + _loc3_ * m.n33 + m.n34;
- }
- static function vectorMult3x3(m, v)
- {
- var _loc5_ = undefined;
- var _loc4_ = undefined;
- var _loc3_ = undefined;
- v.x = (_loc5_ = v.x) * m.n11 + (_loc4_ = v.y) * m.n12 + (_loc3_ = v.z) * m.n13;
- v.y = _loc5_ * m.n21 + _loc4_ * m.n22 + _loc3_ * m.n23;
- v.z = _loc5_ * m.n31 + _loc4_ * m.n32 + _loc3_ * m.n33;
- }
- static function projectVector(mp, v)
- {
- var _loc3_ = 1 / (v.x * mp.n41 + v.y * mp.n42 + v.z * mp.n43 + mp.n44);
- sandy.math.Matrix4Math.vectorMult(mp,v);
- v.x *= _loc3_;
- v.y *= _loc3_;
- v.z = 0;
- }
- static function eulerRotation(ax, ay, az)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- ax = sandy.util.NumberUtil.toRadian(ax);
- ay = sandy.util.NumberUtil.toRadian(ay);
- az = sandy.util.NumberUtil.toRadian(az);
- var _loc6_ = Math.cos(ax);
- var _loc5_ = Math.sin(ax);
- var _loc4_ = Math.cos(ay);
- var _loc7_ = Math.sin(ay);
- var _loc2_ = Math.cos(az);
- var _loc3_ = Math.sin(az);
- var _loc12_ = _loc6_ * _loc7_;
- var _loc11_ = _loc5_ * _loc7_;
- _loc1_.n11 = _loc4_ * _loc2_;
- _loc1_.n12 = (- _loc4_) * _loc3_;
- _loc1_.n13 = _loc7_;
- _loc1_.n21 = _loc11_ * _loc2_ + _loc6_ * _loc3_;
- _loc1_.n22 = (- _loc11_) * _loc3_ + _loc6_ * _loc2_;
- _loc1_.n23 = (- _loc5_) * _loc4_;
- _loc1_.n31 = (- _loc12_) * _loc2_ + _loc5_ * _loc3_;
- _loc1_.n32 = _loc12_ * _loc3_ + _loc5_ * _loc2_;
- _loc1_.n33 = _loc6_ * _loc4_;
- return _loc1_;
- }
- static function rotationX(angle)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- var _loc2_ = sandy.math.Matrix4Math._aCos[int(angle)];
- var _loc3_ = sandy.math.Matrix4Math._aSin[int(angle)];
- _loc1_.n22 = _loc2_;
- _loc1_.n23 = _loc3_;
- _loc1_.n32 = - _loc3_;
- _loc1_.n33 = _loc2_;
- return _loc1_;
- }
- static function rotationY(angle)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- var _loc2_ = sandy.math.Matrix4Math._aCos[int(angle)];
- var _loc3_ = sandy.math.Matrix4Math._aSin[int(angle)];
- _loc1_.n11 = _loc2_;
- _loc1_.n13 = - _loc3_;
- _loc1_.n31 = _loc3_;
- _loc1_.n33 = _loc2_;
- return _loc1_;
- }
- static function rotationZ(angle)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- var _loc2_ = sandy.math.Matrix4Math._aCos[int(angle)];
- var _loc3_ = sandy.math.Matrix4Math._aSin[int(angle)];
- _loc1_.n11 = _loc2_;
- _loc1_.n12 = _loc3_;
- _loc1_.n21 = - _loc3_;
- _loc1_.n22 = _loc2_;
- return _loc1_;
- }
- static function axisRotationVector(v, angle)
- {
- return sandy.math.Matrix4Math.axisRotation(v.x,v.y,v.z,angle);
- }
- static function axisRotation(u, v, w, angle)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- angle = sandy.util.NumberUtil.toRadian(angle);
- var _loc3_ = Math.cos(angle);
- var _loc5_ = Math.sin(angle);
- var _loc2_ = 1 - _loc3_;
- var _loc14_ = u * v * _loc2_;
- var _loc12_ = v * w * _loc2_;
- var _loc13_ = u * w * _loc2_;
- var _loc8_ = _loc5_ * w;
- var _loc9_ = _loc5_ * v;
- var _loc10_ = _loc5_ * u;
- _loc1_.n11 = _loc3_ + u * u * _loc2_;
- _loc1_.n12 = - _loc8_ + _loc14_;
- _loc1_.n13 = _loc9_ + _loc13_;
- _loc1_.n21 = _loc8_ + _loc14_;
- _loc1_.n22 = _loc3_ + v * v * _loc2_;
- _loc1_.n23 = - _loc10_ + _loc12_;
- _loc1_.n31 = - _loc9_ + _loc13_;
- _loc1_.n32 = _loc10_ + _loc12_;
- _loc1_.n33 = _loc3_ + w * w * _loc2_;
- return _loc1_;
- }
- static function translation(nTx, nTy, nTz)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- _loc1_.n14 = nTx;
- _loc1_.n24 = nTy;
- _loc1_.n34 = nTz;
- return _loc1_;
- }
- static function translationVector(v)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- _loc1_.n14 = v.x;
- _loc1_.n24 = v.y;
- _loc1_.n34 = v.z;
- return _loc1_;
- }
- static function scale(nXScale, nYScale, nZScale)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- _loc1_.n11 = nXScale;
- _loc1_.n22 = nYScale;
- _loc1_.n33 = nZScale;
- return _loc1_;
- }
- static function scaleVector(v)
- {
- var _loc1_ = sandy.core.data.Matrix4.createIdentity();
- _loc1_.n11 = v.x;
- _loc1_.n22 = v.y;
- _loc1_.n33 = v.z;
- return _loc1_;
- }
- static function det(m)
- {
- return (m.n11 * m.n22 - m.n21 * m.n12) * (m.n33 * m.n44 - m.n42 * m.n34) - (m.n11 * m.n32 - m.n31 * m.n12) * (m.n23 * m.n44 - m.n41 * m.n24) + (m.n11 * m.n42 - m.n41 * m.n12) * (m.n23 * m.n34 - m.n33 * m.n24) + (m.n21 * m.n32 - m.n31 * m.n22) * (m.n13 * m.n44 - m.n43 * m.n14) - (m.n21 * m.n42 - m.n41 * m.n22) * (m.n13 * m.n34 - m.n33 * m.n14) + (m.n31 * m.n42 - m.n41 * m.n32) * (m.n13 * m.n24 - m.n23 * m.n14);
- }
- static function getTrace(m)
- {
- return m.n11 + m.n22 + m.n33 + m.n44;
- }
- static function getInverse(m)
- {
- var _loc1_ = sandy.math.Matrix4Math.det(m);
- if(Math.abs(_loc1_) < 0.001)
- {
- return null;
- }
- _loc1_ = 1 / _loc1_;
- var _loc14_ = m.n11;
- var _loc11_ = m.n21;
- var _loc8_ = m.n31;
- var _loc18_ = m.n41;
- var _loc12_ = m.n12;
- var _loc9_ = m.n22;
- var _loc5_ = m.n32;
- var _loc17_ = m.n42;
- var _loc10_ = m.n13;
- var _loc6_ = m.n23;
- var _loc3_ = m.n33;
- var _loc16_ = m.n43;
- var _loc7_ = m.n14;
- var _loc4_ = m.n24;
- var _loc2_ = m.n34;
- var _loc15_ = m.n44;
- return new sandy.core.data.Matrix4(_loc1_ * (_loc9_ * (_loc3_ * _loc15_ - _loc16_ * _loc2_) + _loc5_ * (_loc16_ * _loc4_ - _loc6_ * _loc15_) + _loc17_ * (_loc6_ * _loc2_ - _loc3_ * _loc4_)),_loc1_ * (_loc6_ * (_loc8_ * _loc15_ - _loc18_ * _loc2_) + _loc3_ * (_loc18_ * _loc4_ - _loc11_ * _loc15_) + _loc16_ * (_loc11_ * _loc2_ - _loc8_ * _loc4_)),_loc1_ * (_loc4_ * (_loc8_ * _loc17_ - _loc18_ * _loc5_) + _loc2_ * (_loc18_ * _loc9_ - _loc11_ * _loc17_) + _loc15_ * (_loc11_ * _loc5_ - _loc8_ * _loc9_)),_loc1_ * (_loc11_ * (_loc17_ * _loc3_ - _loc5_ * _loc16_) + _loc8_ * (_loc9_ * _loc16_ - _loc17_ * _loc6_) + _loc18_ * (_loc5_ * _loc6_ - _loc9_ * _loc3_)),_loc1_ * (_loc5_ * (_loc10_ * _loc15_ - _loc16_ * _loc7_) + _loc17_ * (_loc3_ * _loc7_ - _loc10_ * _loc2_) + _loc12_ * (_loc16_ * _loc2_ - _loc3_ * _loc15_)),_loc1_ * (_loc3_ * (_loc14_ * _loc15_ - _loc18_ * _loc7_) + _loc16_ * (_loc8_ * _loc7_ - _loc14_ * _loc2_) + _loc10_ * (_loc18_ * _loc2_ - _loc8_ * _loc15_)),_loc1_ * (_loc2_ * (_loc14_ * _loc17_ - _loc18_ * _loc12_) + _loc15_ * (_loc8_ * _loc12_ - _loc14_ * _loc5_) + _loc7_ * (_loc18_ * _loc5_ - _loc8_ * _loc17_)),_loc1_ * (_loc8_ * (_loc17_ * _loc10_ - _loc12_ * _loc16_) + _loc18_ * (_loc12_ * _loc3_ - _loc5_ * _loc10_) + _loc14_ * (_loc5_ * _loc16_ - _loc17_ * _loc3_)),_loc1_ * (_loc17_ * (_loc10_ * _loc4_ - _loc6_ * _loc7_) + _loc12_ * (_loc6_ * _loc15_ - _loc16_ * _loc4_) + _loc9_ * (_loc16_ * _loc7_ - _loc10_ * _loc15_)),_loc1_ * (_loc16_ * (_loc14_ * _loc4_ - _loc11_ * _loc7_) + _loc10_ * (_loc11_ * _loc15_ - _loc18_ * _loc4_) + _loc6_ * (_loc18_ * _loc7_ - _loc14_ * _loc15_)),_loc1_ * (_loc15_ * (_loc14_ * _loc9_ - _loc11_ * _loc12_) + _loc7_ * (_loc11_ * _loc17_ - _loc18_ * _loc9_) + _loc4_ * (_loc18_ * _loc12_ - _loc14_ * _loc17_)),_loc1_ * (_loc18_ * (_loc9_ * _loc10_ - _loc12_ * _loc6_) + _loc14_ * (_loc17_ * _loc6_ - _loc9_ * _loc16_) + _loc11_ * (_loc12_ * _loc16_ - _loc17_ * _loc10_)),_loc1_ * (_loc12_ * (_loc3_ * _loc4_ - _loc6_ * _loc2_) + _loc9_ * (_loc10_ * _loc2_ - _loc3_ * _loc7_) + _loc5_ * (_loc6_ * _loc7_ - _loc10_ * _loc4_)),_loc1_ * (_loc10_ * (_loc8_ * _loc4_ - _loc11_ * _loc2_) + _loc6_ * (_loc14_ * _loc2_ - _loc8_ * _loc7_) + _loc3_ * (_loc11_ * _loc7_ - _loc14_ * _loc4_)),_loc1_ * (_loc7_ * (_loc8_ * _loc9_ - _loc11_ * _loc5_) + _loc4_ * (_loc14_ * _loc5_ - _loc8_ * _loc12_) + _loc2_ * (_loc11_ * _loc12_ - _loc14_ * _loc9_)),_loc1_ * (_loc14_ * (_loc9_ * _loc3_ - _loc5_ * _loc6_) + _loc11_ * (_loc5_ * _loc10_ - _loc12_ * _loc3_) + _loc8_ * (_loc12_ * _loc6_ - _loc9_ * _loc10_)));
- }
- static function preCalc()
- {
- if(sandy.math.Matrix4Math._bIsPrecalculed)
- {
- return true;
- }
- sandy.math.Matrix4Math._bIsPrecalculed = true;
- var _loc1_ = 0;
- while(_loc1_ < 360)
- {
- sandy.math.Matrix4Math._aSin[_loc1_] = Math.sin(_loc1_ * 3.141592653589793 / 180);
- sandy.math.Matrix4Math._aCos[_loc1_] = Math.cos(_loc1_ * 3.141592653589793 / 180);
- _loc1_ = _loc1_ + 1;
- }
- return true;
- }
- }
-