Ich schreibe einen 3D-Sonnensystemsimulator , der Planeten, Asteroiden, Kometen und transneptunische Objekte enthält. Es enthält auch tägliche „Close Approach“-Körper aus der Datenbank des Jet Propulsion Laboratory. Ich berechne Planetenpositionen unter Verwendung des Dokuments „ Keplerian Elements for Approximate Positions of the Major Planets “ von JPL/Caltech mit Formeln, die für den Bereich von 3000 v. Chr. bis 3000 n. Chr. gültig sind. Es sieht so aus, als ob die Berechnungen mir eine Position liefern, die bei nahen Objekten nicht genau genug ist: In der Simulation stimmt die Zeit der geringsten Entfernung zwischen Erde und einem Objekt nicht mit der theoretischen Zeit überein.
Ich habe auch Formeln für den Bereich von 1800 n. Chr. bis 2050 n. Chr. (die genauer sein sollen) ohne signifikanten Unterschied ausprobiert.
Meine Frage ist: Gibt es eine genauere Methode zur Berechnung der Planetenpositionen als die Methode, die ich verwende?
Die "genauere Methode" besteht darin, entweder die Orbitalbewegung numerisch zu integrieren, um Ihre eigenen ungefähren Ephemeriden zu erstellen (siehe diese und diese Antwort ), oder, wie @Vince49 betont , vorhandene Ephemeriden herunterzuladen und zu interpolieren, in diesem Fall für eine sehr große Anzahl von Minderjährigen Körper! Beides ist keine schöne oder elegante Lösung, aber da die Schwerkraft weitreichend ist und "alles an allem zieht", reichen Kepler-Umlaufbahnen hier nicht aus.
Realistische Umlaufbahnen des Sonnensystems sind nur annähernd keplersch.
Ich werde erwähnen, dass die Integration Spaß macht und lehrreich ist, wenn Sie diese Art von Herausforderung wirklich genießen, aber es richtig zu machen, ist viel komplizierter als in diesen verlinkten Antworten gezeigt. Ich konnte die JPL-Ephemeriden für ein Dutzend großer Körper auf 1 km über 1 Jahr abgleichen, aber ohne die Gezeiteneffekte zwischen Erde und Mond richtig anzugehen, wird sich die Position der Erde jedes Jahr weiter verschlechtern. Sie müssten eine ausgefeiltere Berechnung als die dort gezeigte Annäherung durchführen.
Bei kleineren Körpern sind auch nicht-gravitative Kräfte wie Strahlung von der Sonne und durch den Körper selbst sowie das Ausgasen in Sonnennähe wichtig. Diese können angenähert werden, wie ich es in dieser Frage und in dieser Antwort beschrieben habe .
Daher halte ich es für wahrscheinlich, dass Sie sich früher oder später entscheiden werden, vorhandene Ephemeriden zu verwenden. Wenn Sie gerne in C programmieren, sollte es eine Dokumentation geben, um Dinge wie das Spice-Toolkit zum Interpolieren von JPL-Kernels zu verwenden . Sobald Sie damit vertraut sind, können Sie sich entscheiden, weniger genaue, viel kleinere Tabellen zum Interpolieren zu erstellen, wenn Sie bedenken, dass Sie möglicherweise Tausende oder Zehntausende von Nebenkörpern erstellen müssen.
Die ausgezeichnete Antwort von @RoryAlsop enthält mehrere hilfreiche Links, darunter eine Python-Bibliothek jplephem , die Spice-Kernel interpoliert. Dies könnte für Sie besonders hilfreich sein.
Das Python-Paket Skyfield ist bereits so eingerichtet, dass es die JPL Developmental Ephemerides automatisch herunterlädt und interpoliert , aber diese sind nur für die Hauptkörper des Sonnensystems. Da Sie Python bereits verwenden, würde es Ihnen bestimmt gefallen, dieses Paket durchzulesen. Es ist eine Freude, es zu benutzen.
Außerdem führt das Python-Paket PyEphem eine breitere Palette von Orbit-Funktionen für Sie aus. Ich bin damit weniger vertraut, also musst du selbst nachforschen. Es gibt es schon ziemlich lange und ich habe herausgefunden, dass es auf XEphem und VSOP87 basiert (und siehe auch ).
Die Python-Pakete SkyField und PyEphem werden beide von derselben Person unterstützt.
Vince 49
äh
ChuckM
äh
Uwe
ChuckM
ChuckM
Jumpjack
ChuckM