Recientemente comencé a usar Skyfield (python) para encontrar las coordenadas (x, y, z) de las cosas en el espacio. Ahora me gustaría transformar entre coordenadas centradas en la Tierra, fijas en la Tierra (giratorias) e inerciales centradas en la Tierra (no giratorias), ya que las "velocidades de los cohetes" a veces pueden transmitirse por Internet en marcos fijos en la Tierra (giratorios). Ver esta respuesta y esta respuesta
Esto es lo que tengo hasta ahora. Las posiciones baricéntricas son directamente de Skyfield, pero solo estoy restando la posición de la tierra de la posición de la luna para obtener la posición inercial centrada en la tierra. Creo que esto está bien para resultados que no son de precisión, no sé si realmente es eso. fácil o si hay algo sutil que me estoy perdiendo.
Sin embargo, me pregunto si hay un marco "oficial" fijo en la Tierra (giratorio), y si Skyfield tiene un método para convertirlo, o en cualquier marco giratorio en general.
Pitón:
from skyfield.api import load, JulianDate
de421 = load('de421.bsp')
earth = de421['earth']
moon = de421['moon']
slc40 = earth.topos('28.562 N', '80.577 W')
jd = JulianDate(utc=(2015,12, 22, 1, 48, 0))
epos = earth.at(jd).position.km # barycentric (ICRS) position of earth
mpos = moon.at(jd).position.km # barycentric (ICRS) position of moon
slc40pos = slc40.at(jd).position.km # barycentric (ICRS) position of SLC-40
mpos_ec = mpos - epos # earth centered (inertial) position of moon
slc40pos_ec = slc40pos - epos # earth centered (inertial) position of SLC-40
Skyfield ≥1.34
Las versiones más recientes de Skyfield introducen un itrs
marco de referencia explícito que gira con la Tierra. Puedes conocerlo a partir de aquí:
Skyfield <1.34
Primero: el principal problema con su técnica de restar las dos posiciones es que no tiene en cuenta el viaje en el tiempo de la luz. En el caso de la observación de la Luna que configuró en su código, el error es de solo unos 38 km, lo que podría estar dentro de sus tolerancias. La forma de solicitar una posición relativa que esté debidamente retroactiva en el tiempo de la luz es a través del observe()
método:
mpos_ec = earth.at(jd).observe(moon).position.km
Segundo: tiene razón en que Skyfield actualmente no tiene un soporte integrado de primera clase para un marco de referencia que gira con la Tierra. Probablemente debería agregar uno. Sin embargo, una solución alternativa que debería ponerlo en funcionamiento de inmediato es decirle a Skyfield que desea observar:
El único truco es que tenemos que hacer la rotación nosotros mismos porque, como notará, la forma en que Skyfield está escrito actualmente solo está dispuesto a aplicar la rotación si está a punto de reducir las coordenadas a polar alt/az para usted. Así que prueba lo siguiente:
# Create an observer at the center of the Earth,
# rotated zero degrees from the Earth's reference frame:
gcrs = earth.topos(
latitude_degrees=0,
longitude_degrees=0,
elevation_m=-6378136.6,
)
# Ask where the observer was at a given time:
g = gcrs.at(jd)
# Then ask for a relative position as usual:
p = g.observe(moon).position.km
print p
# Now the tricky part: each observer.at() has
# an attribute `altaz_rotation` which is the rotation
# matrix you want to apply:
print einsum('ij...,j...->i...', g.altaz_rotation, p)
¡Déjame saber si los números que obtienes parecen funcionar! Y una vez que haya terminado de reescribir el sistema de tiempo y pueda lanzar Skyfield 1.0, centraré mi atención en hacer que este cálculo sea un poco más conveniente.
matplotlib
y Blender
(ver esto y esto )` desde diferentes puntos de vista. ¡Recuerde que estos son marcos diferentes y la luna aparecerá en un lugar diferente!np.einsum
es muy popular para aquellos que saben cómo usarlo. Para aquellos que no están familiarizados (como yo), las cuatro respuestas a esta pregunta son útiles.einsum
ejemplo de mi propio código fuente, no trato cada vez de recordar cómo funciona desde cero. :)observe()
no tenga sentido: las personas que miran una animación del movimiento de los planetas, tal vez en la que la cámara también se mueve, generalmente parecen esperar ver "dónde están realmente las cosas". son” sin ningún ajuste de tiempo de luz.
UH oh