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