2011-05-10 51 views
-1

使用位的代碼是這樣相交的量:查找有關兩行

static bool Intersects(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2, out Vector2 intersection) 
    { 
     intersection = Vector2.Zero; 

     Vector2 b = a2 - a1; 
     Vector2 d = b2 - b1; 
     float bDotDPerp = b.X * d.Y - b.Y * d.X; 


     if (bDotDPerp == 0) 
      return false; 

     Vector2 c = b1 - a1; 
     float t = (c.X * d.Y - c.Y * d.X)/bDotDPerp; 
     if (t < 0 || t > 1) 
      return false; 

     float u = (c.X * b.Y - c.Y * b.X)/bDotDPerp; 
     if (u < 0 || u > 1) 
      return false; 

     intersection = a1 + t * b; 

     return true; 
    } 

我能確定,其中兩行碰撞。但是,座標是相對於窗口而言的,而不是彼此。例如,假設兩條線彼此垂直。其中一個在0,0處與第二個像素重疊一個像素。這意味着要解決這個衝突,我需要移回1個像素。但是,如果我在400,400進行同樣的測試,它會告訴我它相交爲399,399。我顯然不需要通過399,399來解決衝突。

我正在使用這個信息,以找出如何很多行重疊,所以我可以適當地將它們移回。我該怎麼做才能做到這一點?

回答

0

這個答案很明顯,我想通了。

只是減去A1和A2從outVect的X和Y:

(outVect.X-a1.X), (outVect.Y-a1.Y) 

這否定了它的位置。