两个移动矩形之间的最小距离

时间:2017-05-16 16:24:10

标签: algorithm collision-detection computational-geometry

2D空间中有两个移动的矩形A和B.

  • 最初,矩形的中心是(x_A,y_A)和(x_B,y_B)。
  • 宽度和长度为w_A,h_A,w_B,h_B。
  • 速度为(v_Ax,v_Ay),(v_Bx,v_By)。
  • 较长边与速度之间的角度为θ_A,θ_B。换句话说,θ是矩形需要逆时针旋转的角度,以便较长的边缘与速度平行。 (见下图)。

问题是:

  1. 检查两个矩形在移动时是否会发生碰撞;

  2. 如果没有碰撞,最小距离是什么(矩形的任意两点之间)。

  3. enter image description here

    类似的问题是:How to check intersection between 2 rotated rectangles?Collision detection between two rectangles in java但是,他们只考虑静态矩形。

    谢谢!

1 个答案:

答案 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),并找出第二个矩形的角是否位于这些线上(点谎言在矩形边上,如果它的坐标在该边缘方程中被替换,则给出零符号,并为相邻边方程给出不同的符号)

要找到最小距离,您可以根据时间为角点之间的平方距离编写表达式,并通过分析找到最小值(通过零导数)