2D行星重力


15

我正在尝试制作一个简单的游戏,其中发射一艘太空船,然后其路径受行星的重力影响。

类似于该游戏:http : //sciencenetlinks.com/interactives/gravity.html

我想知道如何在此游戏中复制行星对宇宙飞船的影响,以便宇宙飞船可以“环绕”行星以改变方向。

我设法取得了一些伪造的结果,其中宇宙飞船在行星周围绕着一个巨大的椭圆形循环,或者使用Vectors仅受行星重力的影响很小。

提前致谢。

PS:我有丰富的编码经验,与游戏开发者无关。

Answers:


15

在您的情况下,有一艘太空船,其移动受所有行星的重力影响。每个行星都施加等于“ m1 * m2 / r ^ 2”的力,其中m1和m2代表宇宙飞船和行星的质量,r等于行星与太空船的欧几里得距离。您只需要计算施加到船上的所有力的总和即可。根据牛顿法则,我们知道'f = m * a',其中f是施加在物体上的总力,m是质量,a是加速度。从这一点开始,您可以阅读此页面,以了解如何使用加速度来计算随时间变化的速度和位置。


+1链接的不错的资源,介绍了四阶Runge-Kutta积分方法以及所有内容。
David Gouveia

目前我的问题是宇宙飞船所走的路径。我需要使其更具“游戏风格”。我做了一张简单的图片来说明我的意思。i44.tinypic.com/2w2kdo4.jpg A是我现在拥有的,B是我想要的。
烘烤

@baked:增加地球的质量是行不通的吗?
杰西·埃蒙德

5
除了有关游戏的Gaffer文章之外,您还绝对需要阅读此Codeflow文章!龙格-库塔也不会像你最好的选择这里。
sam hocevar 2011年

如果您有A而想要B,那么如何降低飞船的初始速度呢?
2012年

4

每个行星都应具有引力场,将其附近的任何物体拉向其中心。换句话说,您应该在模拟的每个步骤中从飞船的位置向行星的中心施加一个力。

该力取决于两个物体的质量,但是在这种情况下,由于飞船的质量与行星的质量相比可能微不足道,因此您可以根据行星的大小尝试不同的常数,直到感觉正确为止。

最重要的是,两个物体之间的距离越大,该力越弱。您可以通过除以两者之间的平方距离来做到这一点。一定距离后,您可能需要“手动”切断并停止施加力。

只需将这个力转化为加速度,基本的物理方程式就可以解决其余的问题。

用伪代码

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

实际上,这与我目前的操作非常相似。也许这只是玩常量的问题?
烘烤

2
确实不确定,但是我想说现在可能只是在调整。而且我认为,这还取决于您向飞船施加的初始力才能使其进入轨道。
David Gouveia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.