没有初始速度的两个加速球之间的碰撞检测?

时间:2014-06-16 13:03:24

标签: collision-detection physics collision game-physics bulletphysics

最初,两个非接触的半径R1和R2的球体在静止的空间中。
然后在时间= 0时分别给它们两个加速度a1和a2。发现它们是否会接触。它们的初始位置分别表示为(x1,y1,z1)
和(x2,y2,z2)。加速度具有3D中的各个组件。它们分别表示为(a1i,a1j,a1k)和(a2i,a​​2j,a2k)。

球体成功碰撞的数学条件是什么?或者解决这类问题的编程思路应该是什么。

注意:如果你可以根据问题中提到的变量给出令人满意的条件,例如r1,r2,x1,y1,z1,x2,y2,z2,a1i,a2i,a​​1j,a2j ,a1k和a2k

3 个答案:

答案 0 :(得分:2)

使用给定的变量名称:

  • 时间0处的点1的位置是(x1,y1,z1)
  • 时间0处第2点的位置为(x2,y2,z2)
  • 时间t的第1点的位置为p1(t) = (x1,y1,z1) + 0.5 * (a1i,a1j,a1k) * t * t
  • 时间t的第2点的位置是p2(t) = (x2,y2,z2) + 0.5 * (a2i,a2j,a2k) * t * t
  • 时间t的交叉点条件为| p1(t) - p2(t) | < r1+r2

| ... |表示欧氏距离,即| (x,y,z) | = sqrt(x*x+y*y+z*z)

这产生了条件:

sqrt((x1+0.5*a1i*t*t - x2+0.5*a2i*t*t)^2+
     (y1+0.5*a1j*t*t - y2+0.5*a2j*t*t)^2+
     (z1+0.5*a1k*t*t - z2+0.5*a2k*t*t)^2) < r1 + r2

如果此条件为真的t,则此时球体会接触/交叉。

我尝试将其提供给WolframAlpha并解决t,但没有成功。 无论如何,实施纯粹的分析解决方案将很难。

答案 1 :(得分:1)

非常感谢帮助我。幸运的是,我找到了解决方案。我在这里分享所有热心这个问题的人。

答案 2 :(得分:0)

它们是球体,因此如果它们的中心之间的距离小于它们的半径之和,它们会重叠。 如果加速使得球体遵循直线,那么只需要计算这些轨迹之间的距离,3D中的轨迹是它们的方向向量的混合乘积和将它们的两个应用点联合起来的向量(比方说,初始位置)您的球体)除以其方向向量的叉积模块。 之后,您应该看到第一个球体何时将位于与另一个轨迹的距离最小的点上。完成后,您只需计算该瞬间第二个球体的位置,看它们是否重叠