home *** CD-ROM | disk | FTP | other *** search
- package Box2D.Common.Math
- {
- public class b2Mat22
- {
-
-
- public var col1:b2Vec2;
-
- public var col2:b2Vec2;
-
- public function b2Mat22(angle:Number = 0, c1:b2Vec2 = null, c2:b2Vec2 = null)
- {
- var c:Number = NaN;
- var s:Number = NaN;
- col1 = new b2Vec2();
- col2 = new b2Vec2();
- super();
- if(c1 != null && c2 != null)
- {
- col1.SetV(c1);
- col2.SetV(c2);
- }
- else
- {
- c = Math.cos(angle);
- s = Math.sin(angle);
- col1.x = c;
- col2.x = -s;
- col1.y = s;
- col2.y = c;
- }
- }
-
- public function SetIdentity() : void
- {
- col1.x = 1;
- col2.x = 0;
- col1.y = 0;
- col2.y = 1;
- }
-
- public function SetVV(c1:b2Vec2, c2:b2Vec2) : void
- {
- col1.SetV(c1);
- col2.SetV(c2);
- }
-
- public function Set(angle:Number) : void
- {
- var c:Number = NaN;
- c = Math.cos(angle);
- var s:Number = Math.sin(angle);
- col1.x = c;
- col2.x = -s;
- col1.y = s;
- col2.y = c;
- }
-
- public function SetZero() : void
- {
- col1.x = 0;
- col2.x = 0;
- col1.y = 0;
- col2.y = 0;
- }
-
- public function SetM(m:b2Mat22) : void
- {
- col1.SetV(m.col1);
- col2.SetV(m.col2);
- }
-
- public function AddM(m:b2Mat22) : void
- {
- col1.x += m.col1.x;
- col1.y += m.col1.y;
- col2.x += m.col2.x;
- col2.y += m.col2.y;
- }
-
- public function Abs() : void
- {
- col1.Abs();
- col2.Abs();
- }
-
- public function Copy() : b2Mat22
- {
- return new b2Mat22(0,col1,col2);
- }
-
- public function Invert(out:b2Mat22) : b2Mat22
- {
- var a:Number = NaN;
- var c:Number = NaN;
- var det:Number = NaN;
- a = col1.x;
- var b:Number = col2.x;
- c = col1.y;
- var d:Number = col2.y;
- det = a * d - b * c;
- det = 1 / det;
- out.col1.x = det * d;
- out.col2.x = -det * b;
- out.col1.y = -det * c;
- out.col2.y = det * a;
- return out;
- }
-
- public function GetAngle() : Number
- {
- return Math.atan2(col1.y,col1.x);
- }
-
- public function Solve(out:b2Vec2, bX:Number, bY:Number) : b2Vec2
- {
- var a11:Number = col1.x;
- var a12:Number = col2.x;
- var a21:Number = col1.y;
- var a22:Number = col2.y;
- var det:Number = a11 * a22 - a12 * a21;
- det = 1 / det;
- out.x = det * (a22 * bX - a12 * bY);
- out.y = det * (a11 * bY - a21 * bX);
- return out;
- }
- }
- }
-