求两条线上的交点量

本文关键字:两条线 | 更新日期: 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)

这否定了它的位置。