我正在尝试使用 Python 模拟地球在椭圆轨道上围绕太阳的运动。我尝试使用基本三角学来计算速度和更新位置,但我遇到了地球速度沿轨道未按预期变化的问题。
这是我的代码的简化版本:
import math
earthposx = 0
earthposy = 0
sunposx = 10
sunposy = 10
velocity = 1
while True:
dx = earthposx - sunposx
dy = earthposy - sunposy
angle = math.atan2(dy, dx)
velx = velocity * math.cos(angle)
vely = velocity * math.sin(angle)
earthposx += velx
earthposy += vely
print(velx, vely)
但是,速度((velx) 和 (vely))没有变化,导致地球没有按预期沿着椭圆路径移动。
我正在寻求有关如何正确模拟地球椭圆轨道的指导,考虑沿轨道不同点的速度变化。我应该考虑重力、数值方法,还是应该探索其他方法来进行更准确的模拟?
任何有关如何在 Python 中准确模拟地球椭圆轨道运动的见解或代码示例将不胜感激。谢谢!
看起来您希望 while 循环成为时间传播,但您需要在正弦和余弦函数中添加一些变化的变量。正如您现在所看到的,这些函数内没有任何变化,因此时间没有传播(没有任何东西在移动)。只需添加一个时间变量,该变量会增加每次循环迭代,并将其放入这些函数的参数中。
圆的方程(用正弦和余弦表示)实际上只是椭圆的一个特例(椭圆实际上只是圆锥曲线的一个特例)。椭圆(用正弦和余弦表示)是:
x = a * cos(t)
y = b * sin(t)
哪里
a != b
和0 < (1 - b**2/a**2) < 1
。圆位于 a = b
时,是圆的半径。由于某种原因,您的代码将速度显示为圆的半径。
import matplotlib.pyplot as plt
import math
earth_eccentricity = 0.017
a = 1 # astronomical unit
b = (1 - earth_eccentricity**2)**0.5 # astronomical unit
t = 0 # year
x_track = []
y_track = []
while t <= 1:
x = a * math.cos(2*math.pi * t)
y = b * math.sin(2*math.pi * t)
t += 0.001
x_track.append(x)
y_track.append(y)
plt.plot(x_track, y_track)
plt.show()
这是地球目前的偏心率值。这会产生以下情节: