2D空间中有两个移动的矩形A和B.
问题是:
检查两个矩形在移动时是否会发生碰撞;
如果没有碰撞,最小距离是什么(矩形的任意两点之间)。
类似的问题是:How to check intersection between 2 rotated rectangles?和Collision detection between two rectangles in java但是,他们只考虑静态矩形。
谢谢!
答案 0 :(得分:3)
使用伽利略原理简化问题。在与第一个矩形连接的虚拟移动坐标系中工作。
在该系统中,第一个矩形中心为(0, 0)
,其第一个角坐标为(w/2*Cos(θ_A)-h/2*Sin(θ_A), w/2*Sin(θ_A)+h/2*Cos(θ_A))
,依此类推。
第二个矩形初始中心为(X_B-X_A, Y_B-Y_A)
,速度为(v_Bx -v_Ax, v_By-v_Ay)
。角坐标可能以相同的方式计算。
要检查碰撞,请为第一个矩形的边创建方程(A x + B y + C = 0),并找出第二个矩形的角是否位于这些线上(点谎言在矩形边上,如果它的坐标在该边缘方程中被替换,则给出零符号,并为相邻边方程给出不同的符号)
要找到最小距离,您可以根据时间为角点之间的平方距离编写表达式,并通过分析找到最小值(通过零导数)