¿Efemérides para coordenadas fijas del cuerpo centradas en el cuerpo lunar?

Voy a intentar hacer una simulación modesta de la libración de la Luna vista desde la Tierra (geocentro), similar a la técnica que he mostrado en esta pregunta . Lo haré en Python y lo renderizaré en Blender.

Estoy familiarizado con la obtención de datos de tipo Efemérides de JPL Horizons y de Skyfield , los cuales utilizan JPL Development Efemérides (por ejemplo, DE405,...), (ver también la página de Efemérides de Horizon y sus enlaces). A partir de ellas genero tablas locales y las interpolo para animaciones y otros cálculos no críticos.

Sé que al menos algunos de los DE contienen movimiento del cuerpo lunar (por ejemplo, en DE405, ¿pero en DE406 viene por separado? También discutido aquí ) como Carga de archivos auxiliares / Cuadros dinámicos , pero sin conocimiento de primera mano de lectura de Spice Kernel directamente, ¿Hay alguna manera de obtener algo cercano a través de Horizons? Por ejemplo, con la posición de una posición fija en la Luna con respecto al Geocentro de la Tierra, o viceversa, además del movimiento de los dos centros, pude reconstruirlo lo suficientemente bien como para obtener una animación bastante precisa. Sin embargo, esto es lo más lejos que he llegado: no sé cómo especificar una posición de latitud/longitud en la Luna.

Podría manipularlo simplemente haciendo girar la luna sobre su eje a una velocidad angular de rotación fija, pero si es posible controlar el movimiento real del cuerpo rígido lunar, eso sería mucho más útil para mí a largo plazo.

ingrese la descripción de la imagen aquí

Aparte #1: Horizons de JPL no ha usado DE405 durante bastante tiempo. Ahora usa DE431.
@DavidHammen DE405 apareció cuando busqué "nutación" hace mucho tiempo, incluí el par DE405/DE406 para decir que a veces está en el DE, a veces no. Si está incluido en el DE431 propiamente dicho, ¡genial!
Cuidado ahí, @uhoh. El modelo de nutación DE4xxx pertenece a la Tierra, no a la Luna. Lo que quieres son los tres términos de libración.
Además, si quieres la Luna, probablemente sea mejor usar DE421, que ahora tiene ocho años. Aparentemente, hace un mejor trabajo con respecto a la orientación lunar que las versiones más recientes, cuyo objetivo principal era mejorar la precisión con respecto a Marte, Júpiter y Plutón.
Una manera no tan fácil de verificar si un modelo DE4xxx contiene nutaciones terrestres y libraciones lunares es mirar las dos últimas columnas en la segunda fila de la GROUP 1050entrada en el archivo de encabezado ASCII para ese modelo. El modelo no proporciona nutaciones terrestres si el penúltimo (penúltimo o duodécimo) elemento es cero, y no proporciona libraciones lunares del último (decimotercer) elemento es cero.
@DavidHammen OK, gracias. Echaré un vistazo. Para completar, todavía me gustaría saber si hay algún acceso a topos lunares en Horizons. Si puedo obtener las posiciones absolutas del Lunacenter y un punto de latitud/longitud lunar, o aquellas relativas al Geocenter, eso podría ser suficiente al menos para propósitos de animación.

Respuestas (2)

Con los archivos de datos de Spice, la biblioteca de Skyfield para Python ahora puede informar la libración lunar como la sublongitud y la sublatitud del punto de la Luna que mira hacia la Tierra. Para tomar un ejemplo de su documentación:

from skyfield.api import PlanetaryConstants, load

ts = load.timescale(builtin=True)
t = ts.utc(2019, 12, 20, 11, 5)

eph = load('de421.bsp')
earth, moon = eph['earth'], eph['moon']

pc = PlanetaryConstants()
pc.read_text(load('moon_080317.tf'))
pc.read_text(load('pck00008.tpc'))
pc.read_binary(load('moon_pa_de421_1900-2050.bpc'))

frame = pc.build_frame_named('MOON_ME_DE421')

p = (earth - moon).at(t)
lat, lon, distance = p.frame_latlon(frame)
lon_degrees = (lon.degrees - 180.0) % 360.0 - 180.0
print('Libration in latitude: {:.3f}'.format(lat.degrees))
print('Libration in longitude: {:.3f}'.format(lon_degrees))

Más documentación está aquí:

https://rhodesmill.org/skyfield/planetary.html#computing-lunar-libration

¡Esto es genial, gracias! Dado que uso Skyfield con frecuencia, este método es una mejor solución para mí. Para tu información, acabo de preguntar ¿Cómo obtener los parámetros lunares L, B, C del paquete Skyfield de Python?

Voy a saltar y dar una respuesta antes de que Mark Adler salte y te diga que uses Spice en lugar de algunas Efemérides de desarrollo (muy posiblemente obsoletas).

Mi respuesta: usa Spice .

Spice proporciona núcleos para las orientaciones de la Tierra y de la Luna con respecto a la ICRF como funciones del tiempo. A partir de ellos, puede calcular la orientación relativa de la Luna con respecto a la Tierra en cualquier momento.

Para usar Spice, tendrás que aprender a programar en C o C++ (o en Fortran, si realmente quieres torturarte). Confiar estrictamente en una interfaz HTML lo marca como un novato. Avanzando en la cadena, Python es un buen lenguaje de inicio, pero aún en el territorio de los novatos. (Tenga en cuenta la diferencia ortográfica. Noob y newb no son ortografías alternativas de la misma cosa).
A menos, por supuesto, que use Python como el pegamento que hace que C, C ++, Fortran y otros lenguajes se comuniquen entre sí. Eso es complicado.
De hecho, soy un nómada del lenguaje. Aprendí FORTRAN en un Sigma-7, e incluso he visto "cinta de corrección" de tarjetas perforadas (para cubrir los agujeros equivocados), aunque no estoy seguro de si era real o solo una broma. También he tocado C ++ varias veces a lo largo de los años, pero estoy tratando de seguir con Python: cada vez que aprendo uno nuevo, me olvido de los demás, y ahora con esta alergia a las llaves que he desarrollado. ..
Tuve una exposición reciente a la lectura del kernel con Python , lo pensaré un poco. Pero, ¿está diciendo que no puedo obtener ninguna información de orientación lunar a través de la interfaz web de Horizons o TELNET?
TBH, que Python rechace las llaves en lugar del espacio me puso en el campamento anti-Python durante mucho tiempo. Esto va muy en contra de la corriente de los discapacitados visuales. La familia de lenguajes C lo hace bien, en mi no tan humilde opinión. Los frenos son mucho mejores que los que if (condition) then do_stuff(); endifse ven en los derivados de Algol. ¿Usando espacios en blanco? Buena suerte integrando su secuencia de comandos de Python que usa espacios y algunas otras secuencias de comandos de Python de personas que usan pestañas. Y buena suerte comunicando su estructura a los discapacitados visuales.
Dicho esto, uso Python mucho para scripts pequeños y para probar un algoritmo. A menos, por supuesto, que el pequeño script o algoritmo incluya expresiones regulares. En ese caso, volveré a mi primer y único recurso, que sería perl. No hay lenguaje que supere a Perl cuando se trata de expresiones regulares.
OTOH, la expresión perl @foo{@foo} = (1) x scalar @fooes bastante alucinante. El hecho de que sepa lo que esto significa y que borre varias líneas de código no significa que todos deban saber lo que eso significa. Todo lo contrario. Perl solo es superado por APL con respecto a los lenguajes de solo escritura. Dicho esto, no me sorprendería ni un poco si hay un módulo perl en algún lugar que proporcione la funcionalidad de Spice.
¡Me encantaba usar Perl! La mayoría de las cosas que he hecho han tenido que trabajar dentro de un ecosistema existente, pero cuando tuve la oportunidad de hacer algo nuevo, Perl vino al rescate. Pero entonces el próximo proyecto tenía que estar en Pascal, el siguiente tenía que estar en Visual C++... Bien, echaré un vistazo a esa expresión si encuentro un emulador de Perl en línea. Mientras tanto, he preguntado aquí sobre la cinta correctora de tarjetas.