圆 A 沿 x 轴向右移动。圆 B 沿 y 轴向上移动。我想知道他们是否会发生碰撞。 (不是何时,只是如果。)
半径相同,恒速度不同。
This answer似乎解决了这个问题,我的问题最好应该是这个问题的后续问题。 (抱歉没有足够的声誉来发表评论。)
我似乎无法求解所提供的方程 t(时间)(如果 t 存在,圆圈将发生碰撞):
(Oax + t*Dax - Obx - t*Dbx)^2 + (Oay + t*Day - Oby - t*Dby)^2 = (ra + rb)^2
这里再次以可读的方式:
(CircleA.initialPosition.x + t*CircleA.velocity.x -
CircleB.initialPosition.x - t*CircleB.velocity.x)^2
+
(CircleA.initialPosition.y + t*CircleA.velocity.y -
CircleB.initialPosition.y - t*CircleB.velocity.y)^2
=
(CircleA.radius + CircleB.radius)^2
在我的例子中,这有点简单,因为圆沿着轴移动(一个轴上的速度为 0)并且半径相同:
(CircleA.initialPosition.x + t*CircleA.velocity.x -
CircleB.initialPosition.x)^2
+
(CircleA.initialPosition.y - CircleB.initialPosition.y -
t*CircleB.velocity.y)^2
=
(2*radius)^2
我仍然无法解决它,并且提供了指向auto-solver的链接对我的头脑也没有帮助。
(特别是我不明白
sqrt(-(D4 - D3)^2)
sqrt() 内部的表达式始终为负数,因此它总是失败。我错过了什么?)
除了自动求解器之外,我希望有人能够展示解决 t 方程的方法(也许主持人可以合并这些问题,抱歉给您带来麻烦)。
或者,任何其他方法来解决这个问题,也许使用我不知道的内置 box2d 功能。
最佳答案
接受的解决方案缺少一些东西。为了求解这个方程:
x = (−b ± sqrt(b^2 - 4ac)) / 2a
这意味着:
x1 = (−b + sqrt(b^2 - 4ac)) / 2a
和x2 = (−b - sqrt(b^2 - 4ac)) / 2a
至少 x1 或 x2 需要正才能正确检测到碰撞。如果两者都是负数,则不会发生碰撞。
关于java - 圆-圆碰撞预测(后续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663909/