-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來解決衝突。
我正在使用這個信息,以找出如何很多行重疊,所以我可以適當地將它們移回。我該怎麼做才能做到這一點?