home *** CD-ROM | disk | FTP | other *** search
- package Box2D.Common.Math
- {
- public class b2Sweep
- {
-
-
- public var localCenter:b2Vec2;
-
- public var a:Number;
-
- public var c:b2Vec2;
-
- public var a0:Number;
-
- public var c0:b2Vec2;
-
- public var t0:Number;
-
- public function b2Sweep()
- {
- localCenter = new b2Vec2();
- c0 = new b2Vec2();
- c = new b2Vec2();
- super();
- }
-
- public function Advance(t:Number) : void
- {
- var alpha:Number = NaN;
- if(t0 < t && 1 - t0 > Number.MIN_VALUE)
- {
- alpha = (t - t0) / (1 - t0);
- c0.x = (1 - alpha) * c0.x + alpha * c.x;
- c0.y = (1 - alpha) * c0.y + alpha * c.y;
- a0 = (1 - alpha) * a0 + alpha * a;
- t0 = t;
- }
- }
-
- public function GetXForm(xf:b2XForm, t:Number) : void
- {
- var alpha:Number = NaN;
- var angle:Number = NaN;
- if(1 - t0 > Number.MIN_VALUE)
- {
- alpha = (t - t0) / (1 - t0);
- xf.position.x = (1 - alpha) * c0.x + alpha * c.x;
- xf.position.y = (1 - alpha) * c0.y + alpha * c.y;
- angle = (1 - alpha) * a0 + alpha * a;
- xf.R.Set(angle);
- }
- else
- {
- xf.position.SetV(c);
- xf.R.Set(a);
- }
- var tMat:b2Mat22 = xf.R;
- xf.position.x -= tMat.col1.x * localCenter.x + tMat.col2.x * localCenter.y;
- xf.position.y -= tMat.col1.y * localCenter.x + tMat.col2.y * localCenter.y;
- }
- }
- }
-