Java中的空间物体吸引力(重力)

时间:2014-01-06 04:23:54

标签: java gravity

所以我正在尝试用Java编写2D太空游戏,而我正在努力研究行星的引力。伪代码中的步骤会发生什么?

1 个答案:

答案 0 :(得分:3)

每个物体的相关特征:位置,速度和行进方向(跟踪这个速度和速度可能更容易),质量。它当然可以具有其他属性,例如方向,这不会影响这一点。甚至是属性,比如它自己的火箭推力,但让我们从简单的情况开始,应该很明显如何扩展它。

At each animation step, 

  For each object,
    Calculate the gravitational force of every other object, based on our mass,
      their mass, and direction from us to them. 
    Sum those forces together to get the total x and y forces on this object
    Using F=ma, determine the acceleration applied to this object by this force
      (how much its speed changes in the x and y directions).

  For each object
    Use its x and y speeds to update its location.

泡沫。冲洗。重复。

每次通过的步数越小,此模拟的准确度就越高......但当然运行速度会更慢。请注意,计算成本为N平方。

注意计算重力的过程涉及一点触发,以计算出在X轴上施加了多大的力以及在Y轴上施加了多少力。最初的太空战争游戏是在麻省理工学院的PDP-1上进行的。即使对于简单的2体系统(行星和船舶),该机器也没有足够的力量来实时计算三角函数。所以他们所做的就是预先计算两个2D查找表,每个轴对应一个,这样他们就可以在竞技场的任何一点上简单地查找船上的重力。

此外,正如太空战争指出的那样,试图解释所有引力可能是一种巨大的过度杀伤力。除了你看千禧年的时间尺度之外,一个行星对我们太阳系中另一个行星的影响与太阳的引力相比是非常小的。船舶相互之间或行星上的影响也很小。你可以考虑到这一切,但是对于除了船舶导航之外的所有东西使用更简单的建模可能更有效 - 为此,只考虑最近的行星/月亮和可能< / em>太阳。