Ich schreibe ein Programm, das die Position im ECI-Koordinatensystem (CIS, EPOCH JD2000.0) in WGS 84-Koordinaten (CTS, ECEF) umwandelt. Dazu folge ich der Beschreibung in diesem Dokument und implementiere C++-Code.
Mein Wissen über Astrophysik ist sehr begrenzt, daher fällt es mir schwer, einige Begriffe zu verstehen. Insbesondere kann ich nicht richtig verstehen, wie die Greenwich Mean Sideral Time berechnet wird und warum ich immer unterschiedliche Werte bekomme.
Zum Beispiel (vorausgesetzt, die Zeit ist 2019-01-01 08:00:00
und das Julianische Datum ist 2458484.833333
):
14:42:45.3766
.14:42:45.350
.06:42:45.379163
(mit einem deutlichen Offset vonGemäß den Gleichungen auf Seite A-26 hängt GMST von der Anzahl der Julianischen Jahrhunderte (Tu) ab. H0-Ausdruck ist genau derselbe wie der von CelesTrak für θ(0h). Ich kann jedoch nicht wirklich verstehen, wofür das du wirklich steht, oder genauer gesagt, warum das Dokument zeigt du → ±0.5, 1.5, 2.5...
. Darüber hinaus verwenden die Ausdrücke, um Λ (das in Sekunden angegeben wird ) zu finden, Werte in Bogenmaß und Zeitsekunden undeutlich.
Könnte jemand Licht ins Dunkel bringen?
Dazu folge ich der Beschreibung in diesem Dokument und implementiere C++-Code.
Das ist ein sehr altes Dokument, das Sie verwenden. Es verwendet das Präzessionsmodell der IAU von 1982. Seitdem gab es mehrere Updates. Die neuesten Änderungen zielen darauf ab, das Konzept der Sternzeit von Greenwich zu eliminieren. (In Bezug auf die Software sind GMST und GAST veraltete Konzepte. Obwohl sie derzeit noch unterstützt werden, wird die Unterstützung in einer zukünftigen Version des Erdrotationsmodells eingestellt.)
Was haben Sie außer der Verwendung einer veralteten Version eines veralteten Konzepts falsch gemacht? Der Ausdruck, den Sie zur Berechnung von GMST verwenden, befindet sich oben auf Seite A-26:
Beachten Sie, dass es in Gleichung (1) eine Einheitenabweichung gibt. Gleichung (2) ergibt ein Ergebnis in Einheiten von Sternensekunden, während Gleichung (3), wenn sie mit der Tageszeit multipliziert wird, ein Ergebnis in Einheiten von Radian ergibt. Letztere muss in Sternsekunden umgerechnet werden. Multiplizieren Sie dazu einfach beide Terme in Gleichung (3) mit :
Die Anwendung auf den 01. Januar 2019 08:00:00 UTC ergibt Folgendes:
Fußnoten:
Es gibt ein Problem mit der Verwendung von julianischen Daten, um die Zeit auszudrücken, wenn es auf hohe Genauigkeit ankommt. Das Problem besteht darin, dass das Hinzufügen von 2,45 Millionen und die Änderung der Zeit seit Mittag am 1. Januar 2000 zu potenziellen Kürzungsproblemen führt. Das nächste darstellbare julianische Datum nach Mitternacht, dem 1. Januar 2000, ist 40 Mikrosekunden nach Mitternacht. Ich selbst versuche, ein paar Größenordnungen von der Quantisierungsebene entfernt zu bleiben, was Probleme für Daten auf Millisekundenebene bedeutet.
Fast jedes wissenschaftliche Paket, das julianische Daten unterstützt, verwendet entweder ein Zahlenpaar mit doppelter Genauigkeit oder eine Art modifiziertes julianisches Datum, wie z Mai 1968 (die führenden 2,44 Millionen werden weggelassen) oder die Zeit seit J2000.
Der Begriff in den Gleichungen (2) und (4) ist besser bekannt als dUT1. Dies ist der Unterschied zwischen UT1 (Zeit, die die mittlere rotierende Erde als Uhr verwendet) und UTC (Zeit, die mit der gleichen Geschwindigkeit wie eine Atomuhr läuft, aber mit gelegentlich eingefügten Schaltsekunden, um UT1 und UTC synchron zu halten). Diese Schaltsekunden halten . Ignorieren Sie die einfach Begriff, wenn das der Fall ist - aber denken Sie daran, dass Sekundenbruchteile bedeutungslos sind.
Ich habe die GMST mit der in http://aa.usno.navy.mil/faq/docs/GAST.php beschriebenen Methode berechnet . Dies sollte eine maßgebliche Quelle sein und behauptet eine Genauigkeit von 0,1 Sekunden.
Im Pseudocode:
midnight = floor(2458484.833333) + 0.5 // J0 = 2458484.5
days_since_midnight = 2458484.833333 - 2458484.5 // = 0.333333
hours_since_midnight = 0.333333 * 24 // H = 8.0
days_since_epoch = 2458484.833333 - 2451545.0 // D = 6939.833333
centuries_since_epoch = days_since_epoch / 36525 // T = 0.190002
whole_days_since_epoch = 2458484.5 - 2451545.0 // D0 = 6939.5
GMST = 6.697374558
+ 0.06570982441908 * whole_days_since_epoch
+ 1.00273790935 * hours_since_midnight
+ 0.000026 * centuries_since_epoch**2 //=470.712605328
GMST_hours = 470 % 24 // = 14
GMST_minutes = floor(0.712605328 * 60) //=42(.7563197)
GMST_seconds = 0.7563197*60 // =45.38
Diese Berechnung stimmt mit dem Online-Rechner überein. Die Methode hier (oder wie unter dem Link beschrieben) sollte einfach zu implementieren sein.
Carles Aragus
David Hammen
binhy
David Hammen