Estoy escribiendo un programa que convierte la posición en el sistema de coordenadas ECI (CIS, EPOCH JD2000.0) a coordenadas WGS 84 (CTS, ECEF). Para hacerlo, estoy siguiendo lo que se describe en este documento e implementando el código C++.
Mi conocimiento de la astrofísica es muy limitado, por lo que me cuesta entender algunos términos. Especialmente, parece que no puedo entender correctamente cómo se calcula el tiempo sideral medio de Greenwich y por qué siempre obtengo valores diferentes.
Por ejemplo (suponiendo que el tiempo es 2019-01-01 08:00:00
y la fecha juliana es 2458484.833333
):
14:42:45.3766
.14:42:45.350
.06:42:45.379163
(con una compensación clara deSegún las ecuaciones de la página A-26, GMST depende del número de siglos julianos (Tu). La expresión de H0 es exactamente la misma que la de CelesTrak para θ(0h). Sin embargo, no puedo entender realmente qué significa du , o más específicamente, por qué el documento muestra du → ±0.5, 1.5, 2.5...
. Además, para encontrar Λ (que se dice que está en segundos de tiempo ) las expresiones utilizan valores en radianes y segundos de tiempo indistintamente.
¿Alguien podría arrojar luz sobre esto?
Para hacerlo, estoy siguiendo lo que se describe en este documento e implementando el código C++.
Ese es un documento muy antiguo que está utilizando. Está utilizando el modelo de precesión de la IAU de 1982. Ha habido múltiples actualizaciones desde entonces. El último conjunto de cambios está trabajando para eliminar el concepto de hora sideral de Greenwich. (En términos de software, GMST y GAST son conceptos obsoletos. Si bien aún se admite actualmente, se dejará de admitir en alguna versión futura del modelo de rotación de la Tierra).
Aparte de usar una versión obsoleta de un concepto obsoleto, ¿qué hiciste mal? La expresión que está utilizando para calcular GMST se encuentra en la parte superior de la página A-26:
Tenga en cuenta que hay un desajuste de unidades en la ecuación (1). La ecuación (2) arroja un resultado en unidades de segundos siderales, mientras que la ecuación (3), cuando se multiplica por la hora del día, arroja un resultado en unidades de radianes. Este último debe convertirse a segundos siderales. Para hacer esto, simplemente multiplique ambos términos en la ecuación (3) por :
Aplicando esto al 01 de enero de 2019 a las 08:00:00 UTC se obtiene lo siguiente:
Notas al pie:
Hay un problema con el uso de fechas julianas para expresar el tiempo cuando se trata de una alta precisión. El problema es que agregar 2,45 millones y cambiar la hora desde el mediodía del 1 de enero de 2000 genera posibles problemas de truncamiento. La siguiente fecha juliana representable después de la medianoche del 1 de enero de 2000 es 40 microsegundos después de la medianoche. Yo mismo trato de mantenerme alejado un par de órdenes de magnitud del nivel de cuantización, lo que significa problemas para las fechas en el nivel de milisegundos.
Casi todos los paquetes científicos que respaldan las fechas julianas usan un par de números de doble precisión o usan algún tipo de fecha juliana modificada, como el tiempo desde el 12 del mediodía del 16 de noviembre de 1858 (omite los 2,4 millones principales en la fecha juliana), el tiempo desde el 12 del mediodía del 23 Mayo de 1968 (omite los primeros 2,44 millones), o tiempo desde J2000.
El término en las ecuaciones (2) y (4) se conoce mejor como dUT1. Esta es la diferencia entre UT1 (tiempo que usa la rotación media de la Tierra como reloj) y UTC (tiempo que corre a la misma velocidad que un reloj atómico, pero con segundos bisiestos ocasionalmente insertados para mantener UT1 y UTC sincronizados). Esos segundos bisiestos siguen . Simplemente ignora el término si ese es el caso, pero recuerde que las fracciones de segundo no tienen sentido.
Calculé el GMST usando el método descrito en http://aa.usno.navy.mil/faq/docs/GAST.php . Esta debe ser una fuente autorizada y reclama una precisión de 0,1 segundos.
En pseudocódigo:
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
Este cálculo concuerda con la calculadora en línea. El método aquí (o como se describe en el enlace) debería ser fácil de implementar.
Carlos Araguz
david hamen
binghy
david hamen