Funktion für die aktuelle Entfernung in Lichtsekunden zwischen Mars und Erde

Ich suche nach einer Funktion, die bei gegebener Zeit (z. B. Unix time ) die aktuelle Entfernung zwischen Mars und Erde in Lichtsekunden zurückgibt.

Es kann eine mathematische Funktion oder Programmierfunktion sein (vorzugsweise in Python oder Pseudocode), darf aber nicht auf eine Internetverbindung angewiesen sein.

Diese Frage ähnelt einer Frage, die ich früher gestellt habe , aber auch hier muss ich die Entfernung ohne Internetverbindung ermitteln.

Danke im Voraus!

Nebenbemerkung: Ich plane, Orbitalmechanik zu lernen, aber ich brauche diese Funktion früher. :)

Antworten (2)

Es gibt keine einfache Funktion, die genau ist. Sowohl die Erde als auch der Mars umkreisen sich in Ellipsen (Erstes Gesetz von Kepler). Sie bewegen sich mit unterschiedlichen Geschwindigkeiten (Keplers Sekunde). Um den aktuellen Abstand zwischen ihnen zu finden, müssen Sie ihre Positionen in drei Dimensionen berechnen.

Mit anderen Worten, Sie müssen orbitale Kinematik machen. Wie berechne ich die Positionen von Objekten im Orbit?

Wenn Genauigkeit nicht wichtig ist. Sie können die Umlaufbahnen mit Kreisen in derselben Ebene annähern. Die Erdposition ist dann

( cos ( 2 π t + a ) , Sünde ( 2 π t + a ) )
und Mars ist
( 1.5 cos ( 2 π t / 1.882 + β ) , 1.5 Sünde ( 2 π t / 1.882 + β ) )

Der Abstand zwischen ihnen wird von Pythagoras berechnet

Die Entfernungen sind in AE und die Zeit in Jahren angegeben (die Umrechnung in Lichtsekunden ist dann einfach). a und β sind Konstanten, die so gewählt wurden, dass sie zu den Positionen der Planeten zum Zeitpunkt 0 passen. Die Werte 1,5 und 1,882 wurden gewählt, weil die Umlaufbahn des Mars etwa 1,5-mal größer als die Erde ist und ein Marsjahr 1,882-mal länger als die Erde ist.

Die kreisförmige Annäherung ist jedoch für den Mars schlecht, und dies ignoriert die Tatsache, dass sich der Mars nicht in genau derselben Umlaufbahnebene wie die Erde befindet, sodass die Werte nur ziemlich ungefähr sind.

Vielen Dank! Zwei Fragen, wann ist (was ist das Datum von) t = 0 und was es die Einheit von t ? Was ist der maximale Fehlerprozentsatz? Danke im Voraus.

Hinweis: Dies ist eine Antwort vom Typ "Erweiterter Kommentar", die zwei mögliche Lösungen anspricht, die möglicherweise nicht genau das sind, was Sie benötigen, aber nahe beieinander liegen.

Ein Ding, das Ihnen Positionen von Dingen im Sonnensystem zu einer bestimmten Zeit angibt, wird Ephemeriden genannt .

Ursprünglich waren sie Tabellen mit Vorhersagen (Vergangenheit und Zukunft), die auf Berechnungen basierten. Zur Zeit von Newton wurden sie ziemlich gut, da Newton eine Methode entwickelte, um die Kepler-Gleichung iterativ zu lösen (z . B. die Newton-Methode ). Siehe die Frage Wie haben Newton und Kepler es (eigentlich) gemacht? und die Antworten dort für ein wenig mehr Hintergrund.

  1. Das Python-Paket PyEphem wurde herumgereicht und gut unterstützt und ist die pythonische Reinkarnation von XEphem . Ich habe es nicht verwendet, aber ich glaube, es enthält genügend Informationen über Orbitalparameter in bestimmten Epochen, um eine Ephemeride zu erzeugen, einschließlich einiger Gravitationsstörungen. Mit anderen Worten, es ist viel mehr als Planeten, die sich auf festen elliptischen Bahnen um eine feste Sonne bewegen. Also ich glaube es läuft ohne Internetverbindung.

  2. Ich habe es nie benutzt, weil mir empfohlen wurde, mir Skyfield anzusehen, und es ist genau das, was ich brauchte. Es lädt eine Standard-JPL-Ephemeride herunter, die Sie auswählen, und verwendet sie danach einfach von Ihrer Festplatte. Um jedoch mit Schaltsekunden und anderen zeitbezogenen Effekten umzugehen, muss es gelegentlich im Internet nach Aktualisierungen von Schaltsekundeninformationen suchen, da diese willkürlich sind.

Ich weiß nicht, ob Skyfield einen Modus hat, um das zu vermeiden. Eigentlich ist das eine gute Frage. Wenn Sie mit einer Zeitskala arbeiten, die keine Schaltsekunden hat, bin ich mir nicht sicher, ob sie in ihrer aktuellen Version ausgeführt wird.

Sowohl Skyfield- als auch PyEphem-Python-Pakete wurden geschrieben und werden von @BrandonRhodes gepflegt.

Wenn Sie eine gelegentliche Verbindung zum Internet zulassen können (z. B. jeden Monat oder einige Monate), ist Skyfield extrem einfach und pythonisch zu verwenden. Hier ist zum Beispiel ein Skript, das ich in dieser Antwort verwendet habe . Wenn Sie Zeitformate aus der Systemzeit konvertieren möchten, können Sie meine Fragen in Stackoverflow und Space Exploration durchsuchen. Wenn Sie es jetzt für die Systemzeit Ihres lokalen Computers wünschen, verwenden Sie einfach t = ts.now()direkt anstelle von utc.

import numpy as np
import matplotlib.pyplot as plt

from skyfield.api import load

data   = load('de421.bsp')
ts     = load.timescale()
t      = ts.utc(2016, 7, 5, 9, 50, 0)

jupiter, earth  = data['Jupiter barycenter'], data['Earth']
jpos, epos      = jupiter.at(t).position.km, earth.at(t).position.km
d_instantaneous = np.sqrt(((jpos - epos)**2).sum())

d_light = earth.at(t).observe(jupiter).distance().km  # where WAS Jupiter 48 minutes ago?

clight = 299792.458  # km/s

print "d_instantaneous / c = ", d_instantaneous/clight
print "d_light / c =         ", d_light/clight
Beachten Sie, dass Sie die Ephemeriden auch direkt verwenden können, indem Sie CSPICE ( naif.jpl.nasa.gov/naif/tutorials.html ) verwenden, oder sogar über Perl-Funktionen, die ich geschrieben habe (billiger Plug). Siehe github.com/barrycarter/bcapps/blob/master/ASTRO/README.bsp und andere Dateien in diesem Verzeichnis.
@barrycarter Obwohl in der Frage nicht "Python oder Pseudocode" erwähnt wird, ist dies definitiv der richtige Ort für echten Quellcode!
Hinweis: Ich habe hier nach der langfristigen Offline-Nutzung von Skyfield gefragt: https://github.com/skyfielders/python-skyfield/issues/105 .
jupiter = data['Jupiter barycenter']... und natürlich durch ersetzen, mars = data['Mars barycenter']wenn Sie Mars wollen :-)