我正在尝试制作一个简单的游戏,其中发射一艘太空船,然后其路径受行星的重力影响。
类似于该游戏:http : //sciencenetlinks.com/interactives/gravity.html
我想知道如何在此游戏中复制行星对宇宙飞船的影响,以便宇宙飞船可以“环绕”行星以改变方向。
我设法取得了一些伪造的结果,其中宇宙飞船在行星周围绕着一个巨大的椭圆形循环,或者使用Vectors仅受行星重力的影响很小。
提前致谢。
PS:我有丰富的编码经验,与游戏开发者无关。
我正在尝试制作一个简单的游戏,其中发射一艘太空船,然后其路径受行星的重力影响。
类似于该游戏:http : //sciencenetlinks.com/interactives/gravity.html
我想知道如何在此游戏中复制行星对宇宙飞船的影响,以便宇宙飞船可以“环绕”行星以改变方向。
我设法取得了一些伪造的结果,其中宇宙飞船在行星周围绕着一个巨大的椭圆形循环,或者使用Vectors仅受行星重力的影响很小。
提前致谢。
PS:我有丰富的编码经验,与游戏开发者无关。
Answers:
在您的情况下,有一艘太空船,其移动受所有行星的重力影响。每个行星都施加等于“ m1 * m2 / r ^ 2”的力,其中m1和m2代表宇宙飞船和行星的质量,r等于行星与太空船的欧几里得距离。您只需要计算施加到船上的所有力的总和即可。根据牛顿法则,我们知道'f = m * a',其中f是施加在物体上的总力,m是质量,a是加速度。从这一点开始,您可以阅读此页面,以了解如何使用加速度来计算随时间变化的速度和位置。
每个行星都应具有引力场,将其附近的任何物体拉向其中心。换句话说,您应该在模拟的每个步骤中从飞船的位置向行星的中心施加一个力。
该力取决于两个物体的质量,但是在这种情况下,由于飞船的质量与行星的质量相比可能微不足道,因此您可以根据行星的大小尝试不同的常数,直到感觉正确为止。
最重要的是,两个物体之间的距离越大,该力越弱。您可以通过除以两者之间的平方距离来做到这一点。一定距离后,您可能需要“手动”切断并停止施加力。
只需将这个力转化为加速度,基本的物理方程式就可以解决其余的问题。
用伪代码
force=0
for each planet
if distance < constant
force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship