home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / Beez.swf / scripts / Box2D / Collision / b2Segment.as < prev    next >
Encoding:
Text File  |  2008-09-03  |  1.6 KB  |  60 lines

  1. package Box2D.Collision
  2. {
  3.    import Box2D.Common.Math.b2Vec2;
  4.    
  5.    public class b2Segment
  6.    {
  7.        
  8.       
  9.       public var p1:b2Vec2;
  10.       
  11.       public var p2:b2Vec2;
  12.       
  13.       public function b2Segment()
  14.       {
  15.          p1 = new b2Vec2();
  16.          p2 = new b2Vec2();
  17.          super();
  18.       }
  19.       
  20.       public function TestSegment(lambda:Array, normal:b2Vec2, segment:b2Segment, maxLambda:Number) : Boolean
  21.       {
  22.          var bX:Number = NaN;
  23.          var bY:Number = NaN;
  24.          var a:Number = NaN;
  25.          var mu2:Number = NaN;
  26.          var nLen:Number = NaN;
  27.          var s:b2Vec2 = segment.p1;
  28.          var rX:Number = segment.p2.x - s.x;
  29.          var rY:Number = segment.p2.y - s.y;
  30.          var dX:Number = p2.x - p1.x;
  31.          var dY:Number = p2.y - p1.y;
  32.          var nX:Number = dY;
  33.          var nY:Number = -dX;
  34.          var k_slop:Number = 100 * Number.MIN_VALUE;
  35.          var denom:Number = -(rX * nX + rY * nY);
  36.          if(denom > k_slop)
  37.          {
  38.             bX = s.x - p1.x;
  39.             bY = s.y - p1.y;
  40.             a = bX * nX + bY * nY;
  41.             if(0 <= a && a <= maxLambda * denom)
  42.             {
  43.                mu2 = -rY * bY + rY * bX;
  44.                if(-k_slop * denom <= mu2 && mu2 <= denom * (1 + k_slop))
  45.                {
  46.                   a /= denom;
  47.                   nLen = Math.sqrt(nX * nX + nY * nY);
  48.                   nX /= nLen;
  49.                   nY /= nLen;
  50.                   lambda[0] = a;
  51.                   normal.Set(nX,nY);
  52.                   return true;
  53.                }
  54.             }
  55.          }
  56.          return false;
  57.       }
  58.    }
  59. }
  60.