【问题标题】:Collision detection of moving objects运动物体的碰撞检测
【发布时间】:2016-08-30 00:37:15
【问题描述】:

假设我有几个移动的物体。我知道它们的形状(很简单,比如盒子、球体、圆柱体)和它们的位置函数,虽然超时(这是非线性的)。我想检测它们何时何地与另一个特定的移动物体(一个特殊物体)发生碰撞。我希望存在某种库来检测两个物体碰撞的空间和时间点,但我找不到。

您是否知道任何有效的算法来解决这个问题或任何库(任何语言)来解决这个问题?

【问题讨论】:

  • 碰撞类(实际上是结构)在 Monogame 框架中是开源的。我把它们撕下来并添加到我的游戏引擎中。
  • 你有哪种非线性位置函数?
  • 多项式的参数函数

标签: collision-detection computational-geometry recommendation-engine


【解决方案1】:

那里有很多算法,但它们都是特定于对象类型的。线速度的一般模式是,您采用形状/形状距离的方程,按时间对其进行参数化(给定对象的相对位置和相对速度),然后求解距离为零。

例如,如果你有两个球体,第二个球体相对于第一个球体的相对位置是 X0,第二个球体相对于第一个球体的相对速度是 V,球体的半径分别为 r1 和 r2 ,你会解决D(t) = ||X0 + V*t|| - (r1+r2) = 0

对于非线性运动,您基本上将 X(t) 作为函数,而不是 X(t) = X0+V*t。根据该功能的复杂程度,这可能很容易,也可能很难。假设它很难(可能是),你会选择像 Newton-Raphson 这样的迭代求解方法。幸运的是,距离公式很容易导出。

非线性运动的另一种选择是将其离散化为线性步长。从某种意义上说,这只是一种便宜又有趣的迭代方法,但鉴于大多数处理这类事情的方法都假设线性速度,这可能是应用它们的最直接的方法。

当然,我在那里使用球体是在作弊。盒子和圆柱体在寻找距离时相当烦人,尤其是在它们旋转的情况下。我可以推荐 Ericson 的《实时碰撞检测》作为该主题的标准书籍;它有许多适用于各种形状对的配方,以及适用于更复杂形状的重型方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 2010-11-19
    • 2013-03-22
    • 2014-04-19
    相关资源
    最近更新 更多