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

Java中的空间物体吸引力(重力),java,gravity,Java,Gravity,所以我想用Java写一个2D太空游戏,我想计算出行星的引力。伪代码中的步骤是什么?每个物体的相关特征:位置、速度和行进方向(跟踪x速度和y速度可能更容易)、质量。当然,它可能具有其他属性,例如方向,但这些属性不会影响这一点。甚至是属性,比如它自己的火箭推力,但让我们从简单的例子开始,它应该是显而易见的如何扩展它 At each animation step, For each object, Calculate the gravitational force of every o

所以我想用Java写一个2D太空游戏,我想计算出行星的引力。伪代码中的步骤是什么?

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

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上运行。那台机器没有足够的能量来实时计算触发函数,即使是对于它简单的两体系统(行星和飞船)。因此,他们所做的是预先计算两个2D查找表,每个轴一个,这样他们就可以简单地查找运动场中任何一点上飞船上的重力


此外,正如太空战所指出的,试图解释所有引力可能是大材小用。在我们的太阳系中,一颗行星对另一颗行星的影响与太阳引力相比是非常小的,除非你看的是千年的时间尺度。船只之间或行星之间的相互影响也很小。你可以解释所有这一切,但是使用更简单的模型来做任何事情都比船上导航更有效——对于这一点,只考虑最近的行星/月亮,也许是太阳。

我不赞成这个,但是最简单的办法是使用一个已经为你做过的库,我认为它们确实存在。虽然我不确定,因为我从来没有做过这样的事情。你能解释一下:那些东西是什么吗重力只有在两个质量相似的情况下才会相互影响(苹果从树上掉下来时,不会迫使地球朝着它落下)对不起-苹果确实迫使地球朝着苹果落下-但这几乎是无法测量的。。。请原谅我们的解决方案将失败,因为计算将以离散时间增量进行,而真正的物理将持续运行。最好使用数值方法得到快速计算估计值,使用泰勒级数的高阶项。要求是“最简单”和“2d游戏”。我认为,我的建议已一再证明足以达到这一目的。但是,如果你能提供更好的选择,那就太好了;为您的建议发布伪代码作为竞争性答案。注意:另请参见右侧的“相关”问题。看起来这之前已经讨论过了