【问题标题】:Minimum distance between two moving rectangles两个移动矩形之间的最小距离
【发布时间】:2017-05-16 16:24:10
【问题描述】:

在二维空间中有两个移动的矩形 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. 如果没有碰撞,最小距离是多少(矩形的任意两点之间)。

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

谢谢!

【问题讨论】:

  • 请告诉我们您尝试了什么。这在学习过程中以及在 stackoverflow 上提出问题都很重要。您也可以在立即发布问题之前进行一些研究。快速搜索给了我足够的信息来解决这个问题。 stackoverflow.com/questions/10962379/…其他链接:stackoverflow.com/questions/31022269/…
  • 一个观察:矩形之间的最小距离将是两个顶点之间的距离。
  • @JaredGoguen 我不认为这总是正确的。在初始配置中,最小距离可能在一个矩形的顶点和另一个矩形边缘上的非顶点之间。如果矩形彼此远离,则所达到的最小距离将在初始配置中,这不是顶点-顶点距离。
  • @JohnColeman 是的,如果时间被限制为正数。如果允许负时间,则应出现顶点-顶点距离。但是由于您的场景应该很容易从初始条件中识别出来,因此可能只查看顶点-顶点距离。
  • @JohnColeman 考虑顶点移动的矩形和边缘静止的矩形(通过更改参考框架)。然后,如果最小距离出现在顶点和边之间,那么顶点必须平行于边移动(或者距离在以前或将来会更小)。这意味着与边相邻的两个顶点也处于最小距离。这类似于单纯形法中使用的逻辑。

标签: algorithm collision-detection computational-geometry


【解决方案1】:

使用伽利略原理简化问题。在与第一个矩形相连的虚拟移动坐标系中工作。

在那个系统中,第一个矩形中心是(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)。角坐标的计算方法可能相同。

要检查碰撞,请为第一个矩形的边缘制作方程式 (Ax+By+C=0),并找出第二个矩形的角是否曾经位于这些线段上(点位于在矩形边上,如果它的坐标被代入该边方程,给出零符号,并为相邻边方程给出不同的符号)

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

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 2011-03-03
    • 1970-01-01
    • 2015-12-17
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多