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?
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.
Vicente 49
UH oh
ChuckM
UH oh
uwe
ChuckM
ChuckM
saltador
ChuckM