所以我尝试用pygame在python中模拟两个(甚至更多)行星之间的引力。我已经解决了三个主要问题,但我似乎无法解决。第一个问题是,我试图首先模拟的小卫星朝向大行星的方向是完全错误的,如果你复制粘贴下面的代码,你可以看到它向上移动45度,而不是在同一个y轴上,然后正好进入行星内部。我很确定重力不是这样工作的。第二个问题是,我不知道如何给月球增加一个起始速度,使其能够进入轨道。第三个问题是,如果没有很长的代码行,我不知道如何添加更多的行星/卫星。 任何帮助都会得到报答! 代码:
import pygame
import math
''
w = 1280
h = 720
g = 25
def main():
pygame.init()
running = True
xm1 = float(200)
ym1 = float(660)
xm2 = float(w/2)
ym2 = float(h/2)
mass1 = int(10)
mass2 = int(100)
while running:
screen = pygame.display.set_mode((w, h))
pygame.draw.circle(screen, (0, 255, 0), (xm1, ym1), 15, 15)
pygame.draw.circle(screen, (255, 0, 0), (xm2, ym2), 45, 45)
distance = math.sqrt((xm1-xm2)**2 + (ym1-ym2)**2)
if ym1 > ym2:
ym1 += g * mass2 / -distance ** 2
else:
ym1 -= g * mass2 / -distance ** 2
if ym1 < ym2:
ym2 += g * mass1 / -distance ** 2
else:
ym2 -= g * mass1 / -distance ** 2
if xm1 > xm2:
xm1 += g * mass2 / -distance ** 2
else:
xm1 -= g * mass2 / -distance ** 2
if xm1 < xm2:
xm2 += g * mass1 / -distance ** 2
else:
xm2 -= g * mass1 / -distance ** 2
if distance <= 60:
running = False
pass
pygame.display.update()
main()
我重写了你的代码,所以它实际上模拟了牛顿定律所描述的自由落体。不要紧的是,这种幼稚的实现是非常不稳定的,在小距离的数字上。本质上,这是一个微分方程的数值积分,应该采用Runge-Kutta或类似的方法。总之,要点是
我将把它作为实现vadd、vsub、vmul和vlen函数的练习
相关问题 更多 >
编程相关推荐