使用这样的代码:
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 :(得分:0)
这个答案非常明显,我想出来了。
从outVect的X和Y中减去a1和a2:
(outVect.X-a1.X), (outVect.Y-a1.Y)
这否定了它的位置。