快速飞行的小物体的碰撞检测

时间:2019-01-07 18:14:12

标签: collision-detection simulation game-physics bounce physics-engine

我想模拟粒子的快速运动,这些粒子比它们通过的帧间间隙距离小两倍以上。考虑以下情况,相同半径的3个粒子以相同的速度移动到中心的一个点。像这样的代码

for(i..) 
  for (j..) 
    check_if_ith_collides_with_jth();`

在最简单的实现中,系统的行为可能类似于以下内容:

enter image description here

但是,当3个(或更多)粒子同时碰撞时,特定的弹跳情况就会发生irl:

enter image description here

我想要任何数量的粒子的解决方案。通常如何解决? 我可以用4个粒子显示更复杂的情况:

enter image description here

是否可以覆盖更大的固定框架?

1 个答案:

答案 0 :(得分:0)

定义“时间”。从您的角度来看,我可能会误解其中的某些内容,并且不确定“框架大小”是否与此有关。我之前已经实现了基于物理学的多粒子碰撞跟踪模拟,并且遇到了此类问题。首先,您需要问问自己,是否所有同时发生的碰撞都会使您受益于该特定应用程序。

在我的回答中,我假设这是一种离散时间事件驱动的sim卡,其中粒子沿其轨迹向前移动,并且对所有对进行碰撞测试。 CPA =接近点。

一种观点可能是检测时间上有一些最小的误差线,您可能会发现相对于该误差线“同时碰撞”的大量线对。因此,在测试它们的任何步骤中,您都可以采用CPA距离在阈值内且预计CPA时间在current_time +/-误差内的所有对。这将捕获所有符合您条件的对。这是可调的,并且对于相同的初始条件,不同的CPA时间和距离阈值将产生不同数量的对。

第二种观点是,由于错误,该级别的信息无法跟踪,您可以将遇到冲突的第一个拳头带走,继续进行模拟,并在下一次通行时抓住其他人。如果没有一些制衡,您可能会错过一些相互“穿越”的事物,但是可以通过调整步长并实施一些逻辑来检查结果来解决此问题。

如果要通过第二个建议来实现,那么建立一个对称的测试用例必然会“失败”以重现理论结果,但这又不是一个有意义的测试。

相同类型的推理适用于在同一位置同时碰撞的三个或更多粒子。除非您设置对称测试用例,否则这种情况不太可能发生,并且如果您将模拟应用于现实情况下,则“噪声”可以使您不必担心那种精度。实施第一个建议可能会得到您提供的特殊情况,但也可能会在确实没有发生多粒子碰撞时对其进行预测。

CPA通常应用于具有恒定加速度的直线运动,但是类似的概念也可以应用于更复杂的情况,尤其是在步长较小的情况下,您可以假设时间步长内的CPA大致为零,或者只是检查之间的距离配对达到阈值。