如何检测三角形和矩形交叉点?

时间:2013-01-23 12:47:40

标签: 2d-games collision

我正在开发Android游戏,我想知道如何检测矩形的碰撞,知道它的位置(x和y),宽度和高度以及知道x,y,宽度和高度的三角形。三角形总是直角三角形,这是将矩形划分为对角线的结果,因此(x,y)参数将是斜边的位置,而不是三角形的中心。 任何帮助,将不胜感激!

2 个答案:

答案 0 :(得分:6)

我最后使用两行的函数intersect完成了这个。线条定义为初始点(x,y)和最终点(x,y)

// a1 is line1 start, a2 is line1 end, b1 is line2 start, b2 is line2 end
 static boolean intersects(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2)
{
    Vector2 intersection = Vector2.Zero();

    Vector2 b = Vector2.Subtract(a2,a1);
    Vector2 d = Vector2.Subtract(b2,b1);
    float bDotDPerp = b.getX() * d.getY() - b.getY() * d.getX();

    // if b dot d == 0, it means the lines are parallel so have infinite intersection points
    if (bDotDPerp == 0)
        return false;

    Vector2 c = Vector2.Subtract(b1,a1);
    float t = (c.getX() * d.getY() - c.getY() * d.getX()) / bDotDPerp;
    if (t < 0 || t > 1)
        return false;

    float u = (c.getX() * b.getY() - c.getY() * b.getX()) / bDotDPerp;
    if (u < 0 || u > 1)
        return false;

    intersection = Vector2.Sum(a1,Vector2.Multiply(b,t));

    return true;
}

要知道一个三角形是否与一个矩形相交,你可以检查三角形中每一条线的交点与上面函数的矩形中的每条线的交点。

答案 1 :(得分:0)

查看great polygon intersection library。您可以在Android上使用C ++版本。

另一种可能性是用三角形光栅化矩形图像和另一个图像,如果两个图像之间有任何交叉点,最后逐个像素地检查。