【发布时间】: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。换句话说,θ 是矩形需要逆时针旋转以使长边与速度平行的角度。 (见下图)。
问题是:
检查两个矩形在移动时是否会发生碰撞;
如果没有碰撞,最小距离是多少(矩形的任意两点之间)。
类似的问题是: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