算法 – 如何处理多个同时弹性碰撞?

我使用 the basic equations on wikipedia碰撞成对的2D凸对象(没有旋转)来计算结果.但是,当存在依赖关系时,就像两个对象同时击中另一个对象:

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

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

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

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

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

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

这种 dynamic simulation of multi-contact physics产生了 linear complementarity problem.有可用于解决 this kind of problem的算法;数学与用于线性规划问题的数学有关.

解决此类问题的需求比您想象的更为常见.任何类型的模糊逼真的模拟(即,具有重力,地面和非弹性碰撞)将很快结束彼此相对的物体;准确而稳健地处理从空间动态碰撞到滑动和滚动物体到“块堆叠”配置的过渡,在技术上具有挑战性.

我建议在这个问题上寻找books or other resources.确切地说,您实际需要哪些技术取决于您的具体应用,但您可能会找到一些有用的库.

相关文章
相关标签/搜索