1

我正在实现一个物理引擎来模拟类似蠕虫的生物。问题是,它们能够相互游过并占据空间的同一点。所以你对环境有一些了解,我在这里提供一个视频:http: //www.box.net/shared/mlddkslszbxd59cfdhpc

所以我需要做的是结合一个碰撞检测和解决算法来克服这个问题。对于检测部分,我一直在使用包围圈;每个蠕虫都有一个外部粗圆圈,如果交叉,则会触发围绕每个身体部分放置的较小细颗粒检测圆圈的检测:

蠕虫与粗粒和细粒碰撞圆相互作用的示例

那一点相对容易。更困难的一点是在发生碰撞时决定做什么。我的第一个想法是简单地迫使有问题的点质量彼此远离,但这会产生一些相当奇怪的效果。我猜想一种更现实的方法会改变违规点质量的速度,从而基本上将它们击落。那么我的问题是如何推导出这些速度和相关的力。

以防万一它不完全明显,每个蠕虫都是由弹簧和点质量制成的。蠕虫的每个身体部分在静止时呈矩形,有 4 个点质量和 6 个弹簧(因为还有两个对角弹簧)。

为任何帮助干杯,我真的很感激!:-) 本。

4

2 回答 2

0

模拟弹性碰撞(没有能量损失)的最简单方法是计算碰撞前 X 和 Y 中每个蠕虫的总动量(速度 * 质量),并在碰撞后将其分配给两个蠕虫。动量通常会除以质量,所以最简单的是,如果蠕虫的质量相同,那么碰撞后每个蠕虫的 X 和 Y 动量只是之前两者总动量的一半。

这意味着,如果两条以相同速度行驶的蠕虫相撞,它们会像镜子一样反弹,如果一条移动的蠕虫与一条静止的蠕虫相撞,它们会粘在一起并以一半的速度向同一方向移动

如果您想在蜗杆内进行更逼真的运动,则将新的动量放入单个段中,然后模拟后坐力如何影响蜗杆的其余部分。

于 2011-07-30T23:46:13.700 回答
0

Martin 在弹性碰撞建模方面走在了正确的轨道上。然而,我最初没有意识到的是,我还需要检查每个蠕虫移动的方向,并且只有在它们相互移动时才应用速度变化。其次,还必须通过减去它们穿过彼此边界圆的量来更新违规点质量的位置。一般来说,我发现这里的答案非常有用:

https://gamedev.stackexchange.com/questions/12059/why-do-objects-interpenetrate-in-this-simple-collision-solver

我几乎使用相同的代码,并且蠕虫按预期相互弹跳。

干杯,

本。

于 2011-08-01T23:45:30.513 回答