如何改进大簇的圆碰撞逻辑并防止重叠

问题描述 投票:0回答:1

我有一个处理二维空间中圆碰撞的模拟,使用标准中点轴重叠分离逻辑来实现物理分辨率。对于涉及少于 3 个圆圈的碰撞,可以正确解决重叠问题。然而,涉及多个圆的碰撞是有问题的,尤其是具有圆“簇”的情况。

例如,考虑圆圈被吸引向中心点。内圈将被其他圈包围,模型很快就会崩溃。剩下的是 never-ending jittery mess,因为每个后续帧都包含未解决的重叠。

我对这个问题的理解是,重叠仅在个别情况下得到解决。理想情况下,您可以执行一种全局碰撞解决方案并分离所有圆,而不会在任何地方留下重叠。我见过的一些解决方案(以及我已经尝试过的):

  • 每帧碰撞的多次迭代(理论上,这可以重复,直到没有重叠)
  • 对帧进行子步进以减少每次更新的运动,从而减少最初的重叠量

虽然这些解决方案有帮助,但它们价格昂贵,而且似乎依赖于蛮力。但最关键的是,他们并没有真正解决问题。

如果有答案,我认为它涉及一次查看整个地图/所有实体,然后执行一种可能从最内圈开始并向外扫描的算法。

我应该注意,我使用四叉树来划分空间并检测碰撞,但我认为这对解决碰撞的方式没有太大影响。

algorithm optimization collision-detection collision overlap
1个回答
0
投票

为什么会有重叠?只需计算每个步骤是否会发生重叠,如果是,则计算当前圆在何处(沿着当前轨迹)与另一个圆相接触。然后,您可以将圆平移到这个精确位置,并计算两个圆的新速度矢量。由于不再有重叠,因此不应出现抖动。如果有,只需使碰撞变得无弹性并增加一些动能损失,这样困在中心的圆圈就会很快失去弹跳的能量。

© www.soinside.com 2019 - 2024. All rights reserved.