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