如何处理多个同时发生的弹性碰撞?

use*_*342 7 language-agnostic algorithm physics game-physics physics-engine

我是通过使用维基百科上的基本方程碰撞成对的2D凸对象(无旋转)来计算结果的.但是,当存在依赖关系时,例如两个对象同时命中另一个对象:

在此输入图像描述

例如,在这里,对象1和2在完全相同的时间击中3,成对方法失败.根据我计算碰撞的顺序(先是1-3或先2-3),我会得到不同的结果.通过碰撞的重复迭代仍将给出依赖于顺序的结果.

我已经设置了它,所以我可以弄清楚哪些对象彼此接触,所以我的代码会知道在计算其中一对时,对象3在那一刻与另一个对象发生碰撞(所以1-3碰撞会知道关于2-3碰撞,反之亦然).我也知道边缘/角落与什么接触.

无论什么解决方案都需要健壮...例如,如果设置变得更复杂,就像这两个例子:

在此输入图像描述

这个过程需要能够处理这个问题,甚至更糟.任何可能的同时接触/碰撞链.我将手头上的所有数据描述它们,所以我"只"需要知道如何解决这些系统的一般情况.我目前没有对旋转做任何事情,这简化了事情.

看起来它可能涉及将对象分组在一起,但是由非正交的边缘引起的干扰(参见最后一个带有六边形的示例)似乎会使该方法失败.

我之前看过一个类似的问题,但答案从未被检查过(死胡同?).我不确定冲击传播会如何解决我的第一个例子,因为C在第一次碰撞后就会移开......所以有什么震撼可以传播?编辑:好的,我现在看到同时碰撞和震动传播是两个不同的想法,这就是为什么它看起来没用.

com*_*orm 4

这种多接触物理的动态模拟会产生线性互补问题。有一些算法可以解决此类问题;该数学与用于线性规划问题的数学相关。

解决此类问题的需求比您想象的更为普遍。任何类型的模糊现实模拟(即重力、地面和非弹性碰撞)很快都会导致物体相互搁置;准确而稳健地处理从空间动态碰撞到滑动和滚动物体再到“块堆叠”配置的过渡在技术上可能具有挑战性。

我建议寻找有关该主题的书籍或其他资源。您实际需要哪些技术取决于您的具体应用程序,但您也许能够找到一些有帮助的库。