用 Python 模拟地球椭圆轨道运动时出现问题

问题描述 投票:0回答:1

我正在尝试使用 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 中准确模拟地球椭圆轨道运动的见解或代码示例将不胜感激。谢谢!

python vector trigonometry
1个回答
0
投票

两个主要问题:

  1. 如果你想要运动,你需要在方程中传播时间 (即,正弦和余弦内部的参数需要改变 时间)
  2. 如果你想要椭圆运动,你需要一个方程 椭圆不是圆。

对于问题 1:

看起来您希望 while 循环成为时间传播,但您需要在正弦和余弦函数中添加一些变化的变量。正如您现在所看到的,这些函数内没有任何变化,因此时间没有传播(没有任何东西在移动)。只需添加一个时间变量,该变量会增加每次循环迭代,并将其放入这些函数的参数中。

对于第 2 期:

圆的方程(用正弦和余弦表示)实际上只是椭圆的一个特例(椭圆实际上只是圆锥曲线的一个特例)。椭圆(用正弦和余弦表示)是:

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()

这是地球目前的偏心率值。这会产生以下情节:

© www.soinside.com 2019 - 2024. All rights reserved.