我通过碰撞二维凸面物体对(不旋转)来计算结果,使用维基百科上的基本方程 http://en.wikipedia.org/wiki/Elastic_collision。但是,当存在依赖关系时,例如两个对象同时撞击另一个对象:
例如这里,当对象 1 和 2 同时击中 3 时,成对方法就会失败。根据我计算碰撞的顺序(先 1-3 或先 2-3),我会得到不同的结果。通过碰撞重复迭代仍然会给出依赖于顺序的结果。
我已经进行了设置,这样我就可以弄清楚哪些对象相互接触,因此我的代码在计算其中一对对象时会知道对象 3 正在与另一个对象发生碰撞(因此 1-3 碰撞将知道关于 2-3 碰撞,反之亦然)。我也会知道哪些边缘/角落与什么接触。
无论什么解决方案都需要强大...例如,如果设置变得更加复杂,如下两个示例:
该流程需要能够处理这种情况甚至更糟的情况。任何可能的同时接触/碰撞链。我将拥有描述它们的所有数据,因此我“只”需要知道如何解决这些系统的一般情况。我目前没有做任何关于轮换的事情,这简化了事情。
看起来它将涉及将对象分组在一起,但由不正交的边缘引起的干扰(参见最后一个六边形的示例)似乎会使该方法失败。
I saw 类似的问题 https://stackoverflow.com/questions/12575963/how-to-handle-simultaneous-collision-so-that-order-of-processing-does-not-matter之前被问过,但给出的答案从未被检查过(死胡同?)。我也不确定冲击波传播将如何解决我的第一个例子,因为 C 在第一次碰撞后正在远离……那么有什么冲击波可以传播呢?编辑:好的,我现在看到同时碰撞和冲击传播是两个不同的想法,这就是为什么它看起来没什么用。
这种多接触物理动态模拟 http://en.wikipedia.org/wiki/Contact_dynamics#Non-smooth_approach产生一个线性互补问题 http://en.wikipedia.org/wiki/Linear_complementarity_problem。有算法可以解决这种问题 http://www.cs.unc.edu/~lin/COMP768-F07/LEC/20.pdf;该数学与用于线性规划问题的数学相关。
解决此类问题的需求比您想象的更为普遍。任何类型的模糊现实模拟(即重力、地面和非弹性碰撞)很快都会以物体相互搁置而告终;准确而稳健地处理从空间动态碰撞到滑动和滚动物体再到“块堆叠”配置的过渡在技术上可能具有挑战性。
我建议寻找书籍或其他资源 http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=63就此主题而言。您实际需要哪些技术取决于您的具体应用程序,但您也许能够找到一些有帮助的库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)