Determinación de las posiciones de los planetas

Estoy escribiendo un simulador de sistema solar en 3D que presenta planetas, asteroides, cometas y objetos transneptunianos. También incluye cuerpos diarios de "aproximación cercana" de la base de datos del Laboratorio de Propulsión a Chorro. Estoy calculando las posiciones de los planetas utilizando el documento " Elementos keplerianos para las posiciones aproximadas de los planetas principales " del JPL/Caltech con fórmulas válidas para el rango de 3000 a. C. a 3000 d. C. Parece que los cálculos me dan una posición que no es lo suficientemente precisa cuando se trata de objetos que se acercan: en la simulación, el tiempo de distancia más cercana entre la Tierra y un objeto no coincide con el tiempo teórico.

También probé fórmulas para el rango de 1800 d. C. a 2050 d. C. (que se supone que son más precisas) sin diferencias significativas.

Mi pregunta es: ¿Existe un método más preciso para calcular las posiciones de los planetas que el método que estoy usando?

Supongo que está familiarizado con esto: ssd.jpl.nasa.gov/?ephemerides#planets
¿Qué precisión sería suficiente para sus objetivos? ¿Realmente necesita +/- miles de años o decenas o cientos estarían bien?
Acerca de la precisión, en este momento, cuando descargo los elementos orbitales de un cuerpo que se supone que estará en su punto más cercano a la Tierra ese día, no es así. Puede estar más cerca un día antes o un día después. Supongo que el error proviene de la aproximación en el cálculo de los elementos orbitales de la tierra a partir de las fórmulas, ya que el autor del artículo etiqueta los cálculos como "menor precisión".
@ChuckM OK, para eso, le recomendaría que haga una nueva pregunta e incluya un ejemplo completo y específico (enlaces, valores numéricos) que muestre claramente el desacuerdo numérico. Hay varias personas aquí que pueden ayudarlo con eso, pero cuanto más documente el problema o la pregunta específica, es más probable que la gente lo ayude. Parece que no hay límite para la cantidad de preguntas de buena calidad que puede hacer aquí. También incluya un enlace a esta pregunta como referencia.
¿Qué calendario se utiliza para el rango muy largo de 6000 años? ¿El juliano simple con la duración de un año de 365,25 días o el gregoriano de 365,2425 días? La diferencia en 6000 años es de 45 días. Existe el valor 36525 en una fórmula del papel, parece juliana, no gregoriana.
Julian se usa con la longitud del año como 365.25. Yo uso la época de referencia J2000 (2451545).
@ Vince49: sí, estoy familiarizado con el sitio web, pero no he encontrado una API que me permita extraer estos datos mediante programación.
@ChuckM, verifique mi interfaz gráfica para Horizons, crea automáticamente la URL necesaria y también la divide en un formato legible: win98.altervista.org/space/exploration/NHUGUI.html
@jumpjack, gracias por esto. Realmente útil tener todos los parámetros resueltos.

Respuestas (1)

El "método más preciso" será integrar numéricamente el movimiento orbital para hacer sus propias efemérides aproximadas (vea esto y esta respuesta) o, como señala @ Vince49 , descargar e interpolar las efemérides existentes, en este caso para una gran cantidad de menores ¡cuerpos! Ninguna de las dos es una solución bonita o elegante, pero debido a que la gravedad es de largo alcance y "todo atrae a todo", las órbitas keplerianas no funcionarán aquí.

Las órbitas realistas del sistema solar son solo aproximadamente keplerianas.

Mencionaré que integrarte es divertido y educativo si realmente disfrutas ese tipo de desafío, pero hacerlo bien es mucho más complicado de lo que se muestra en las respuestas vinculadas. Pude hacer coincidir las efemérides del JPL con 1 km durante 1 año para una docena de cuerpos grandes, pero sin abordar correctamente los efectos de las mareas entre la Tierra y la Luna, la posición de la Tierra seguirá degradándose cada año. Tendría que hacer un cálculo más sofisticado que la aproximación que se muestra allí.

Para cuerpos más pequeños, también son importantes las fuerzas no gravitatorias, como la radiación del sol y del propio cuerpo, así como la desgasificación cuando está cerca del sol. Esos pueden aproximarse como lo he descrito en esta pregunta y en esta respuesta .

Así que creo que es probable que tarde o temprano decidas usar las efemérides existentes. Si le gusta programar en C, debería haber documentación disponible para usar cosas como el kit de herramientas Spice para interpolar kernels JPL . Una vez que lo haga bien, puede decidir construir tablas mucho más pequeñas y menos precisas para interpolar, considerando que es posible que necesite hacer miles o decenas de miles de cuerpos menores.

La excelente respuesta de @RoryAlsop incluye varios enlaces útiles, incluida una biblioteca de Python jplephem que interpola los kernels de Spice. Esto podría ser particularmente útil para usted.

El paquete Python Skyfield ya está configurado para descargar e interpolar automáticamente las Efemérides de desarrollo del JPL , pero estas son solo para los principales cuerpos del sistema solar. Como ya está usando Python, supongo que realmente disfrutará leyendo ese paquete. Es un placer usarlo.

Además, el paquete de Python PyEphem realiza una gama más amplia de funciones de órbita para usted. Estoy menos familiarizado con él, así que tendrás que investigarlo tú mismo. Ha existido durante mucho tiempo y descubrí que se basa en XEphem y VSOP87 (y vea también ).

Los paquetes de Python SkyField y PyEphem son compatibles con la misma persona.

¡Es un paquete de software realmente genial que tienes en Github! Le echaré un vistazo esta semana que viene.
@MarkAdler Realmente creo que deberías recuperar tu respuesta. Los dos se complementan entre sí: el mío es una especie de Smörgåsbord, el tuyo va al grano, por lo que es mejor que los futuros lectores los vean a ambos. ¡Una respuesta directa de la NASA es dorada!
De hecho, me retiré de la NASA hace unos ocho meses.
@MarkAdler Felicitaciones, pero el brillo (y la experiencia) de la NASA nunca desaparecen :-)