我正在为游戏开发 2D 物理引擎。我使用简单的迭代方法让重力和质量起作用(我知道我最终必须升级);我可以手动推动群众并观察他们移动,一切都按照我的预期进行。
现在我正在尝试用一颗围绕行星的简单圆形轨道上的卫星提前设置游戏世界。为此,我需要在给定行星质量和所需距离的情况下计算卫星的初始速度矢量;这应该是微不足道的,但我一生都无法让它正常工作。
标准物理教科书告诉我,围绕质量 M 的圆形轨道上的物体的轨道速度是:
v = sqrt( G * M / r )
然而,在应用适当的矢量后,卫星的运行速度不够快,并陷入了尖锐的椭圆轨道。随机修补表明,在一种情况下,它的偏差约为 3 倍。
我的重力模拟代码使用传统的:
F = G M m / r^2
在我的宇宙中 G 设置为 1。
有人可以向我证实这些方程在二维空间中仍然成立吗?我看不出有什么理由不这样做,但此时我真的想知道问题是出在我的代码中还是我的假设中......
Update:我的物理引擎的工作原理如下:
for each time step of length t:
reset cumulative forces on each object to 0.
for each unique pair of objects:
calculate force between them due to gravity.
accumulate force to the two objects.
for each object:
calculate velocity change dV for this timestep using Ft / m.
v = v + dV.
calculate position change dS using v * t.
s = s + dS.
(当然,在适当的情况下使用向量。)
现在我每帧都会做一个物理刻度,每秒发生大约 500-700 次。我知道这会很快积累错误,但它至少应该让我开始。
(顺便说一句,我无法找到一个现成的物理引擎来处理轨道力学——大多数 2D 物理引擎,比如 Chipmunk 和 Box2D 都更关注刚性结构。谁能推荐一个我可以看一下的引擎?)
您需要确保您的 delta t 迭代时间值足够小。为了获得您期望的行为,您肯定必须修改常量。在您的情况和大多数情况下,迭代模拟是一种集成形式,其中错误会快速且不可预测地累积。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)