我正在实施一个物理引擎来模拟蠕虫般的生物。问题是,他们是否能够相互游泳并占据太空中的同一点。所以你对环境有所了解,我在这里提供了一个视频:http://www.box.net/shared/mlddkslszbxd59cfdhpc
所以我需要做的是采用可以克服这一点的碰撞检测和解决算法。对于检测部分,我一直在使用边界圆;每个蠕虫都有一个外部粗圆,如果交叉,则触发围绕每个身体部分放置的较小细粒检测圆周围的检测:
这一点相对容易。更难的是决定在碰撞时做什么。我的第一个想法是简单地迫使有问题的点质量相互远离,但这有一些相当奇怪的效果。我想一个更现实的方法会改变违规点质量的速度,从而使它们偏离正轨。那么我的问题是如何得出这些速度和相关的力量。
为了防止它不完全明显,每个蠕虫都是用弹簧和尖头质量制成的。蜗杆的每个主体部分呈静态矩形,有4个点质量和6个弹簧(因为还有两个对角弹簧)。
为任何帮助干杯,我真的很感激! :-) 本。
答案 0 :(得分:0)
通过计算碰撞前X和Y中每个蜗杆的动量(速度*质量)并在碰撞后将其分配到两个蠕虫之间来计算弹性碰撞(没有能量损失)的最简单方法。 动量通常按质量分割,最简单的是如果蠕虫是相同的质量,那么碰撞后每个的X和Y动量只是之前两者的总动量的一半。
这意味着如果两只相同速度的蠕虫发生碰撞,它们会像镜子一样反弹,如果一只活动的蠕虫将它们粘在一起并以半速向同一方向移动
如果你想在蠕虫体内进行更真实的运动,那么将新动量放入一个区段,然后模拟反冲如何影响蠕虫的其余部分。
答案 1 :(得分:0)
Martin在塑造弹性碰撞方面走在正确的轨道上。然而,我最初没有意识到的事情是我还需要检查每个蠕虫移动的方向,并且只有当它们相互移动时才应用速度变化。其次,还必须通过减去它们将穿透彼此边界圆的量来更新违规点质量的位置。一般来说,我发现这里的答案非常有用:
我几乎使用相同的代码,蠕虫正如预期的那样在彼此之间反弹。
干杯,
本。