Cálculo de las posiciones de la órbita de los satélites jovianos/lunas utilizando datos del JPL

He estado tratando de construir un modelo del sistema solar en un juego. Hasta ahora he logrado colocar cada uno de los planetas en posición utilizando elementos y fórmulas keplerianos de https://ssd.jpl.nasa.gov/?planet_pos Un ejemplo para Júpiter es:

               a              e               I                L            long.peri.      long.node.
           AU, AU/Cy     rad, rad/Cy     deg, deg/Cy      deg, deg/Cy      deg, deg/Cy     deg, deg/Cy
-----------------------------------------------------------------------------------------------------------
Jupiter   5.20288700      0.04838624      1.30439695       34.39644051     14.72847983    100.47390909
         -0.00011607     -0.00013253     -0.00183714     3034.74612775      0.21252668      0.20469106

En este punto, quiero agregar varias de las lunas jovianas, sin embargo, el mismo sitio no parece proporcionar el mismo tipo de datos para estas lunas, quizás porque las lunas se comportan de manera diferente. Desafortunadamente, mis matemáticas no son muy buenas; Por lo general, puedo implementar algo que está escrito, pero no tengo los medios para resolverlo por mí mismo.

Para las lunas jovianas, los datos se enumeran en: https://ssd.jpl.nasa.gov/?sat_elem#jupiter Aquí hay un ejemplo para Ganímedes:

 Sat.           a       e          w           M        i            node      n             P       Pw      Pnode    R.A.        Dec.     Tilt
 (km)        (deg)     (deg)      (deg)       (deg)    (deg/day)    (days)    (yr)          (yr)    (deg)    (deg)    (deg)
 Ganymede  1070400.    0.0013    192.417    317.540    0.177        63.552    50.3176072    7.155   63.549  132.654   268.168    64.543    0.068

Aquí afirman que los datos son " Elementos orbitales medios referidos a los planos locales de Laplace ", a diferencia de " Elementos keplerianos para posiciones aproximadas de los planetas principales ".

Si bien los primeros 6 parámetros parecen ser los mismos (a, e, w, M, i, nodo), los elementos keplerianos también tienen "tasas" o derivados de tiempo (según esta publicación: https://space.stackexchange. com/questions/8911/determining-orbital-position-at-a-future-point-in-time ). Los foros proporcionados amablemente por la NASA para los elementos keplerianos se basan en estas tasas.

Si pudiera entender cómo determinar las "tasas" para las lunas jovianas, entonces podría usar la misma fórmula (¿es esto lo correcto?) Me parece que esas tasas son algo que debería poder calcular a partir de los otros datos proporcionados para las lunas, sin embargo, no he podido determinar cómo.

Mi sospecha es que necesito una fórmula diferente para el cálculo usando los planos de Laplace, o necesito calcular esos valores de 'tasa' y usar la misma fórmula que ya tengo.

Estoy tratando de generar coordenadas cartesianas (x, y, z) para cada Luna donde (0,0,0) es el centro de Júpiter, para una fecha/hora dada (típicamente "ahora").

Estoy empezando a preguntarme si estoy ladrando al árbol equivocado en esto. Alguien puede arrojar algo de luz

¿Ha probado ssd.jpl.nasa.gov/horizons.cgi#top usando la configuración de ELEMENTOS para la luna que desea? Puede obtener los elementos osculadores desde allí.
Sí, aunque me temo que no veo muy bien cómo ayuda. Sí, ese sitio me dará datos estáticos para un rango de tiempo determinado. Quiero poder calcular la posición para una fecha determinada (antes de 2050, ya que parece ser cuando los datos medios pierden validez, y es poco probable que mi juego exista en unos 30 años).
Si desea datos precisos, deberá usar algo como SPICE ( naif.jpl.nasa.gov/naif ). Si observa los elementos osculadores, es posible que descubra que siguen un patrón aproximado que podría imitar. En teoría, podría incluso resolver ecuaciones diferenciales dadas las posiciones iniciales, pero eso lleva mucho tiempo. En última instancia, es una cuestión de teoría de la información (estas órbitas simplemente no son tan simples) y de compensación de tiempo/espacio (si no desea registrar posiciones, tendrá que calcularlas).
Bueno, gracias. Es una pena. Eché un vistazo a SPICE el fin de semana y, aunque obviamente hará lo que quiero, la API me dejó un poco desconcertado y el hecho de que posiblemente tendría que portarlo a iOS. Me las arreglé para poner las lunas en órbita ahora, aunque no estarán en los lugares correctos, lo cual es una pena.
Podría usar los elementos osculadores actuales y pretender que las órbitas de las lunas siempre serán elípticas; eso sería preciso a corto plazo. Además, no dude en ponerse en contacto conmigo directamente para obtener ayuda gratuita (información de contacto en el perfil). SPICE debería compilarse en iOS "tal cual", pero nunca lo he usado allí, así que no estoy seguro. Básicamente es solo una biblioteca de C ++, por lo que, si conoce C ++, debería poder usarlo.
@barrycarter gracias, eso es muy generoso. Volveré a esto porque sé que no estaré satisfecho sin al menos intentarlo. Fuera de tema un poco, pero me sorprendió tu comentario de que las órbitas no siempre son elípticas. ¿Cómo demonios se las arreglan estas cosas para entrar en órbitas que se alteran sin impactar? ¿Es porque están aproximadamente en el mismo plano, por lo que su radio orbital los mantiene lo suficientemente separados?

Respuestas (2)

Un excelente libro de Jean Meeus, "Algoritmos astronómicos", proporciona los cálculos de las posiciones planetarias y las lunas galileanas de Júpiter (Io, Europa, Ganímedes y Calisto). Meeus realmente no explica las matemáticas en gran medida, por lo que es relativamente simple seguirlo como un enfoque formulaico. Utiliza VSOP para las posiciones planetarias y la teoría E5 de Lieske para las lunas (puede obtener una explicación de ambas en Wikipedia). Como beneficio adicional, Meeus muestra cómo realizar cálculos para ambos parámetros con un menor grado de precisión, lo que podría mejorar su velocidad de cálculo. Aunque este libro puede ser un poco denso, es posible que desee leer sobre la diferencia entre "tiempo de efemérides" y "tiempo terrestre", ya que esto también afectará su precisión.

Gracias por esta sugerencia. Resultó que seguí el consejo de @barrycarter arriba y busqué SPICE. Ahora estoy publicando una respuesta a continuación que es el resultado de eso.

Gracias a las personas que han intentado ayudarme con esto, tanto cuando publiqué la pregunta por primera vez como más tarde.

Con el sólido consejo de @barrycarter en los comentarios, busqué usar la biblioteca SPICE para calcular las posiciones de los diversos cuerpos celestes de interés.

Después de leer un poco y recibir más consejos de NAIF, me encargué de migrar la biblioteca CSPICE, versión 66, para que funcione en iOS (y, en consecuencia, en macOS).

Luego usé la herramienta SPKMERGE para generar archivos de efemérides que contenían solo los datos que necesitaba para mi aplicación. Luego, la aplicación carga esos archivos a través de CSPICE y genera los datos posicionales que necesita.

La versión modificada de la biblioteca CSPICE para iOS ahora está disponible para otros que quieran usarla.

Se puede encontrar en:

CSPICELib para iOS