java - 圆-圆碰撞预测(后续)

标签 java libgdx box2d linear-algebra collision

圆 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)) / 2ax2 = (−b - sqrt(b^2 - 4ac)) / 2a

至少 x1 或 x2 需要才能正确检测到碰撞。如果两者都是负数,则不会发生碰撞。

关于java - 圆-圆碰撞预测(后续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663909/

相关文章:

java - 用于查找特定文件的正则表达式

java - Web 服务 - Java 还是 .NET?

java - 动画两个固定点之间的平移 (Libgdx)

iOS 游戏本地化与 lproj 目录不起作用

libGDX iOS 支持和性能?

java - 从 Java 调用 Objective-C 代码的最简单方法是什么?

java - Fragment.java 错误 :(94, 51) 错误:不兼容的类型:NewsFragment 无法转换为 Context

ios - 不稳定的 b2RevoluteJoint Box2D

objective-c - Box2D 多边形未正确碰撞

java - Box2D 使用 LIBGDX 将轮子放在正确的位置