相关疑难解决方法(0)

如何处理同时碰撞,以便处理顺序无关紧要?

假设有3个球同时发生碰撞.我发现我解决碰撞的顺序会对最终结果产生影响,而这种结果在任何情况下都没有意义.

为了解释并保持简单,请考虑1D中的3个球,所有质量相同,弹性碰撞.顶部的数字是速度,箭头是方向.假设他们目前都在互相接触,即在碰撞中

 -->2   -->1 <---3
   O     O       O
   A     B       C
Run Code Online (Sandbox Code Playgroud)

这表示球A从后面击球B,球B和C在面上碰撞.

现在,如果我们首先用B解决碰撞A,然后用C解决碰撞B,但是使用B的新速度,如果我们改为解决B与C的碰撞,然后用B解析A,则应该给出相同的结果(使用B)的新速度.

但事实并非如此.

第一种情况:A与B,其次是B与C

A与B给出

 -->1   -->2
   O     O  
   A     B  
Run Code Online (Sandbox Code Playgroud)

和B给出C(但使用上面2的新B速度,而不是1的原始速度)

 <--3   -->2
   O     O  
   B     C  
Run Code Online (Sandbox Code Playgroud)

因此最终的结果是

 -->1   <--3  ---->2
   O     O       O
   A     B       C
Run Code Online (Sandbox Code Playgroud)

第二种情况:B与C,其次是A与B

B与C给出

 <--3   --->1
   O     O  
   B     C
Run Code Online (Sandbox Code Playgroud)

A与B(但使用上面3的B的新速度,而不是原始1)

<--3    -->2
   O     O  
   A     B  
Run Code Online (Sandbox Code Playgroud)

因此最终的结果是

 <--3  -->2   ---->1
   O     O       O
   A     B       C
Run Code Online (Sandbox Code Playgroud)

你可以看到最终状态不同.

我究竟做错了什么?更重要的是,处理这个问题的正确方法是什么?

对于具有许多球的模拟以及与墙壁的碰撞,这种情况是非常可能的.(例如,球击中墙壁并同时被另一个球击中,会产生与上述相同的问题,顺序给出不同的结果).

目前,我使用循环迭代所有对象并一次解决每个对象之间的冲突.因此我使用的顺序是任意的(顺序只是数组中球的索引).

collision-detection

6
推荐指数
1
解决办法
816
查看次数

标签 统计

collision-detection ×1