2026. szeptember 6., vasárnap

Kepler-törvények és körmozgás pythonban

Íme egy 3D-s animált Python program, amely a Matplotlib könyvtár segítségével modellezi a Jupiter mozgását a Nap körül valós fizikai képletek (Kepler-törvények és körmozgás) alapján
-----------
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# --- Csillagászati adatok (közelítő értékek) ---
# Jupiter távolsága a Naptól: ~5.2 Csillagászati Egység (AU)
# Jupiter keringési ideje: ~11.86 Föld-év
R_JUPITER = 5.2 
PERIOD_JUPITER = 11.86 

# Animációs beállítások
fps = 30
duration_years = 12  # Mennyi ideig fusson a szimuláció (évben)
frames = fps * duration_years

# Időlépések kiszámítása
t = np.linspace(0, duration_years, frames)
# Szögsebesség (omega = 2 * pi / T)
omega = 2 * np.pi / PERIOD_JUPITER
theta = omega * t

# Jupiter 3D koordinátáinak kiszámítása (enyhe 1.3 fokos pályaelhajlással)
inclination = np.radians(1.3)
x_jup = R_JUPITER * np.cos(theta)
y_jup = R_JUPITER * np.sin(theta) * np.cos(inclination)
z_jup = R_JUPITER * np.sin(theta) * np.sin(inclination)

# --- 3D Grafika inicializálása ---
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# Grafikon határai (AU-ban)
ax.set_xlim([-6, 6])
ax.set_ylim([-6, 6])
ax.set_zlim([-3, 3])

# Tengelyek feliratozása
ax.set_xlabel('X (AU)')
ax.set_ylabel('Y (AU)')
ax.set_zlabel('Z (AU)')
ax.set_title('A Jupiter mozgása a Nap körül 3D-ben')

# Égitestek és pálya megjelenítése
# Nap (Sárga gömb a középpontban)
ax.scatter([0], [0], [0], color='gold', s=300, label='Nap')

# Jupiter teljes pályavonala (halványan)
ax.plot(x_jup, y_jup, z_jup, color='gray', linestyle='--', alpha=0.5, label='Jupiter pálya')

# Jupiter (animált pont)
jupiter_dot, = ax.plot([], [], [], marker='o', color='chocolate', markersize=10, label='Jupiter')
# Jupiter mögötti csóva
trail, = ax.plot([], [], [], color='orange', alpha=0.7)

ax.legend(loc='upper left')

# --- Animációs függvények ---
def init():
    jupiter_dot.set_data([], [])
    jupiter_dot.set_3d_properties([])
    trail.set_data([], [])
    trail.set_3d_properties([])
    return jupiter_dot, trail

def update(frame):
    # Aktuális pozíció frissítése
    jupiter_dot.set_data([x_jup[frame]], [y_jup[frame]])
    jupiter_dot.set_3d_properties([z_jup[frame]])
    
    # Csóva frissítése az utolsó néhány pozíció alapján
    start_idx = max(0, frame - 20)
    trail.set_data(x_jup[start_idx:frame+1], y_jup[start_idx:frame+1])
    trail.set_3d_properties(z_jup[start_idx:frame+1])
    
    return jupiter_dot, trail

# Animáció elindítása
ani = animation.FuncAnimation(
    fig, update, frames=frames, init_func=init, interval=1000/fps, blit=True
)

plt.show()

---------------


Nincsenek megjegyzések:

Megjegyzés küldése