修改后的代码如下所示:

import matplotlib.pyplot as plt
import numpy as np

# 行星的轨道半长轴和轨道周期数据
orbit_data = {
    "Mercury": (0.387, 88),
    "Venus": (0.723, 225),
    "Earth": (1.000, 365),
    "Mars": (1.524, 687),
    "Jupiter": (5.203, 4333),
    "Saturn": (9.582, 10759),
    "Uranus": (19.189, 30688),
    "Neptune": (30.071, 60182)
}

# 计算行星的轨道位置
def calculate_orbit_position(semi_major_axis, period, time):
    eccentricity = 0.0167  # 假设所有行星的离心率相同
    mean_motion = 2 * np.pi / period
    mean_anomaly = mean_motion * time
    eccentric_anomaly = mean_anomaly  # 初值
    while True:
        next_eccentric_anomaly = mean_anomaly + eccentricity * np.sin(eccentric_anomaly)
        if np.all(abs(next_eccentric_anomaly - eccentric_anomaly) < 1e-5):
            break
        eccentric_anomaly = next_eccentric_anomaly
    true_anomaly = 2 * np.arctan2(np.sqrt(1 + eccentricity) * np.sin(eccentric_anomaly/2),
                                  np.sqrt(1 - eccentricity) * np.cos(eccentric_anomaly/2))
    distance = semi_major_axis * (1 - eccentricity**2) / (1 + eccentricity * np.cos(true_anomaly))
    x = distance * np.cos(true_anomaly)
    y = distance * np.sin(true_anomaly)
    return x, y

# 绘制太阳系行星的轨道动态图像
def plot_planet_orbits():
    fig, ax = plt.subplots()
    ax.set_aspect('equal')
    ax.set_xlim(-40, 40)
    ax.set_ylim(-40, 40)
    ax.set_xlabel("X (AU)")
    ax.set_ylabel("Y (AU)")
    ax.set_title("Solar System Planets Orbits")

    # 绘制行星轨道
    for planet in orbit_data:
        semi_major_axis, period = orbit_data[planet]
        time = np.arange(0, period, 0.1)
        x, y = calculate_orbit_position(semi_major_axis, period, time)
        ax.plot(x, y, label=planet)

    ax.legend()
    plt.show()

plot_planet_orbits()

这样修改后的代码应该可以解决错误并正确绘制太阳系行星的轨道动态图像


原文地址: https://www.cveoy.top/t/topic/hyyK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录