求两条线上的交点量
本文关键字:两条线 | 更新日期: 2023-09-27 17:55:36
使用这样的代码:
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 解决碰撞。
我希望使用这些信息来找出线条的重叠程度,以便我可以适当地将它们移回。我该怎么做才能做到这一点?
这个答案很明显,我想通了。
只需从 outVet 的 X 和 Y 中减去 a1 和 a2:
(outVect.X-a1.X), (outVect.Y-a1.Y)
这否定了它的位置。