找到两条线上的交叉量

时间:2011-05-10 02:42:42

标签: c# collision-detection

使用这样的代码:

    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来解决碰撞。

我希望使用这些信息来了解多少线条是如何重叠的,这样我就可以适当地移回它们。我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

这个答案非常明显,我想出来了。

从outVect的X和Y中减去a1和a2:

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

这否定了它的位置。