二维轨道物理学

Dav*_*ven 15 physics 2d gravity game-physics

我正在为游戏开发2D物理引擎.我有引力和群众工作,使用一种简单的迭代方法(我知道我最终必须升级); 我可以手动推动群众,看着他们移动,这一切都按照我的预期运作.

现在,我正试图通过围绕行星的简单圆形轨道中的卫星提前建立游戏世界.为此,我需要根据行星的质量和所需的距离计算卫星的初始速度矢量; 这应该是微不足道的,但我不能为我的生活让它正常工作.

标准物理教科书告诉我,围绕质量M的圆形轨道中物体的轨道速度为:

v = sqrt( G * M / r )
Run Code Online (Sandbox Code Playgroud)

然而,在应用了适当的矢量后,卫星的速度不够快,并且处于一个尖锐的椭圆轨道上.随机修补显示,在一种情况下,它的关闭时间约为3倍.

我的重力模拟代码使用传统的:

F = G M m / r^2
Run Code Online (Sandbox Code Playgroud)

我的宇宙中G被设置为1.

有人可以向我确认这些方程式仍然存在于2D空间吗?我看不出任何原因,但在这一点上我真的想知道问题是在我的代码还是我的假设......


更新:我的物理引擎的工作原理如下:

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.
Run Code Online (Sandbox Code Playgroud)

(当然,在适当的地方使用向量.)

现在我每帧都做一次物理滴答,每秒大约发生500-700次.我知道这会很快累积错误,但它至少应该让我开始.

(顺便说一句,我无法找到一个处理轨道力学的现成物理引擎 - 像Chipmunk和Box2D这样的大多数2D物理引擎都更专注于刚性结构.任何人都可以建议我可以看一下吗?)

twe*_*ter 10

您需要确保delta t迭代时间值足够小.你肯定要修改常量以获得你期望的行为.在您的情况下和大多数情况下的迭代模拟是一种集成形式,其中错误快速且不可预测地累积.