2026. szeptember 6., vasárnap

A (469219) Kamoʻoalewa aszteroida a föld második holdja, szimuláviója pythonban

Az (469219) Kamoʻoalewa aszteroida a Föld egyik legismertebb kvázi-műholdja (quasi-satellite). Mivel pályája rendkívül közel van a Földéhez, és hosszú távon komplex gravitációs kölcsönhatásban áll a Föld-Hold rendszerrel (ko-orbitális rezonancia), egy egyszerű Kepler-féle kéttest-modell nem elegendő a pontos jövőbeli pozíció meghatározásához. Egy 500 éves szimulációhoz már numerikus integráció (N-test szimuláció) szükséges, amely figyelembe veszi legalább a Nap és a Föld (vagy a Föld-Hold rendszer) gravitációs hatását is

Az aszteroida jelenleg stabil kvázi-holdként kering a Föld mellett, de a kutatások szerint nagyjából ~300 év múlva ki fog lépni ebből az állapotból, és átvált egy úgynevezett patkó alakú (horseshoe) pályára, ahol már sokkal messzebb sodródik majd a bolygónktól, ha valami ben várt esemény meg nem változtatja jelenlegi pályáját.

Előfeltétel a pip install rebound matplotlib numpy telepitése.
Futtatás; https://colab.research.google.com/

----------------
import rebound
import numpy as np
import matplotlib.pyplot as plt

def run_kamooalewa_simulation():
    # 1. Szimuláció inicializálása
    sim = rebound.Simulation()
    
    # Időegység beállítása évekre, távolság Csillagászati Egységre (AU)
    sim.units = ('yr', 'AU', 'Msun')
    
    # 2. Központi és zavaró égitestek hozzáadása (Nap és Föld)
    # A rebound beépített 'NASA Horizons' lekérdezőjét használjuk az aktuális pozíciókhoz
    print("Égitestek adatainak lekérése a NASA JPL-től...")
    sim.add("Sun")
    sim.add("Earth") # Tartalmazza a Föld-Hold rendszer tömegközéppontját
    
    # 3. A (469219) Kamoʻoalewa hozzáadása a JPL azonosítója (SPK-ID: 20469219) alapján
    sim.add("20469219") 
    
    # Tömegközéppontba helyezés, hogy elkerüljük a koordináta-rendszer elcsúszását
    sim.move_to_com()
    
    # Integrátor beállítása (IAS15 egy adaptív lépésközű, rendkívül pontos integrátor)
    sim.integrator = "ias15"
    
    # 4. Idővonal beállítása (500 év, pl. 1000 adatponttal)
    years = 500
    num_points = 1000
    times = np.linspace(0, years, num_points)
    
    # Tömbök az eredmények tárolására
    # A Földhöz viszonyított relatív pozíciót fogjuk vizsgálni (ko-orbitális mozgás)
    earth_distances = np.zeros(num_points)
    asteroid_x = np.zeros(num_points)
    asteroid_y = np.zeros(num_points)
    
    print(f"Szimuláció indítása {years} évre előre...")
    
    # 5. Integráció futtatása lépésenként
    for i, t in enumerate(times):
        sim.integrate(t)
        
        # Égitestek objektumainak kinyerése
        sun = sim.particles[0]
        earth = sim.particles[1]
        asteroid = sim.particles[2]
        
        # Kamo'oalewa távolsága a Földtől
        dx = asteroid.x - earth.x
        dy = asteroid.y - earth.y
        dz = asteroid.z - earth.z
        earth_distances[i] = np.sqrt(dx**2 + dy**2 + dz**2)
        
        # Heliorcentrikus (Nap körüli) pozíció mentése
        asteroid_x[i] = asteroid.x
        asteroid_y[i] = asteroid.y

    print("Szimuláció kész! Grafikonok generálása...")
    
    # 6. Vizualizáció
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
    
    # Első grafikon: Nap körüli pálya (Heliocentrikus)
    ax1.plot(asteroid_x, asteroid_y, label="Kamoʻoalewa pálya", color='blue', alpha=0.6)
    ax1.plot(0, 0, 'yo', label="Nap", markersize=10)
    ax1.set_xlabel("X (AU)")
    ax1.set_ylabel("Y (AU)")
    ax1.set_title("Heliocentrikus pálya az elkövetkező 500 évben")
    ax1.axis('equal')
    ax1.grid(True)
    ax1.legend()
    
    # Második grafikon: Föld-Aszteroida távolság az idő függvényében
    ax2.plot(times, earth_distances, color='crimson')
    ax2.set_xlabel("Idő (év a jelentől)")
    ax2.set_ylabel("Távolság a Földtől (AU)")
    ax2.set_title("Föld - Kamoʻoalewa távolság alakulása")
    ax2.grid(True)
    
    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    run_kamooalewa_simulation()

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


Nincsenek megjegyzések:

Megjegyzés küldése