3

我正在开发一个Android游戏,我想知道如何检测一个知道它的位置(x和y)、宽度和高度的矩形和一个知道x、y、宽度和高度的三角形的碰撞。三角形始终是直角三角形,因为将矩形与其对角线相除,因此 (x,y) 参数将是斜边中的一个位置,而不是三角形的中心。任何帮助,将不胜感激!

4

2 回答 2

6

我终于使用函数 intersect for two lines 完成了这项工作。线由初始点 (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;
}

要知道三角形是否与矩形相交,请检查三角形中的每条线与带有上述函数的矩形中的每条线的交点。

于 2013-01-28T12:05:57.637 回答
0

看看伟大的多边形相交库。您可以在 Android 上使用 C++ 版本。

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

于 2013-01-23T13:05:47.110 回答