Bar*_* PM 3 collision 2d-games
我正在开发Android游戏,我想知道如何检测矩形的碰撞,知道它的位置(x和y),宽度和高度以及知道x,y,宽度和高度的三角形.三角形总是直角三角形,这是将矩形划分为对角线的结果,因此(x,y)参数将是斜边的位置,而不是三角形的中心.任何帮助,将不胜感激!
我最后使用函数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)
要知道一个三角形是否与一个矩形相交,你可以检查三角形中每条线的交点与上面函数的矩形中的每一条线.