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

Bar*_* PM 3 collision 2d-games

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

Bar*_* PM 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;
}
Run Code Online (Sandbox Code Playgroud)

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