我有一个处理二维空间中圆碰撞的模拟,使用标准中点轴重叠分离逻辑来实现物理分辨率。对于涉及少于 3 个圆圈的碰撞,可以正确解决重叠问题。然而,涉及多个圆的碰撞是有问题的,尤其是具有圆“簇”的情况。
例如,考虑圆圈被吸引向中心点。内圈将被其他圈包围,模型很快就会崩溃。剩下的是 ,因为每个后续帧都包含未解决的重叠。
我对这个问题的理解是,重叠仅在个别情况下得到解决。理想情况下,您可以执行一种全局碰撞解决方案并分离所有圆,而不会在任何地方留下重叠。我见过的一些解决方案(以及我已经尝试过的):
虽然这些解决方案有帮助,但它们价格昂贵,而且似乎依赖于蛮力。但最关键的是,他们并没有真正解决问题。
如果有答案,我认为它涉及一次查看整个地图/所有实体,然后执行一种可能从最内圈开始并向外扫描的算法。
我应该注意,我使用四叉树来划分空间并检测碰撞,但我认为这对解决碰撞的方式没有太大影响。
为什么会有重叠?只需计算每个步骤是否会发生重叠,如果是,则计算当前圆在何处(沿着当前轨迹)与另一个圆相接触。然后,您可以将圆平移到这个精确位置,并计算两个圆的新速度矢量。由于不再有重叠,因此不应出现抖动。如果有,只需使碰撞变得无弹性并增加一些动能损失,这样困在中心的圆圈就会很快失去弹跳的能量。