首页 文章

二维轨道物理学

提问于
浏览
15

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

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

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

v = sqrt( G * M / r )

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

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

F = G M m / r^2

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

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


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次 . 我知道这会很快累积错误,但它至少应该让我开始 .

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

2 回答

  • 3

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

  • 10

    是的,这些方程式保存在2D空间中,因为您的2D空间只是3D世界的2D表示 . (“真正的”2D宇宙将具有不同的方程,但这与此无关 . )

    远射:您是否可能使用距离行星表面的距离为r?

    如果不是这样的话,试着把你的时间缩短一半;如果这有很大的不同,请继续减少它,直到行为停止变化 .

    如果这没有区别,尝试将初始速度设置为零,然后观察它下降几次迭代并测量其加速度以查看它是否为GM / r2 . 如果答案仍然没有_l85028_ ll试着搞清楚 .

相关问题