Cálculo de posiciones planetarias

En breve, comenzaré mi tercer año en la Universidad de Ciencias de la Computación, soy desarrollador de software y se me pedirá que trabaje en un proyecto de último año.

Mi idea para mi proyecto de fin de carrera es escribir una aplicación de escritorio que permita al usuario especificar una fecha/hora y devolver todas las posiciones de los planetas en ese momento.

Esperaba que alguien pudiera indicarme la dirección correcta de cómo comenzaría a hacer los cálculos o calcular esto, ya que soy consciente de que la posición es relativa y un poco abierta: cualquier refinamiento del alcance de mi proyecto también sería aceptado con gusto. ya que me gustaría incorporar otras cosas.

Solo para reiterar: esta no es una pregunta de programación, y no estoy pidiendo a alguien que "haga mi proyecto por mí", pero agradecería cualquier sugerencia útil.

Respuestas (5)

Echaría un vistazo a Stellarium , es una aplicación de código abierto que hace exactamente lo mismo. Podrías leer el código, que creo que en su mayor parte está en C++.

Si quieres empezar desde cero, es decir, desde las propias matemáticas, hay un libro citado a menudo, Astronomical Algorithms de Jean Meeus.

También puede consultar los modelos científicos del Sistema Solar, como el VSOP francés (Variations Séculaires des Orbites Planétaires) o el Jet Propulsion Laboratory Development Ephemeris de la NASA .

No recomiendo mirar el software existente, a menos que solo desee proporcionar una interfaz de usuario a la biblioteca de otras personas. En ese caso, está la biblioteca NOVAS de USNO , la biblioteca Python pyEphem/ephem y varias otras.

Gracias por indicarme la dirección de materiales relevantes, ¡muy apreciado!

No puedo indicarle ningún algoritmo específico; pero lo que estás preguntando son cálculos de efemérides.

El desafío en estos es que durante largos períodos de tiempo, las perturbaciones causadas por las interacciones gravitatorias entre todos los planetas y lunas se suman y ya no se puede tratar el problema como una colección de objetos que se mueven en órbitas keplerianas. Como resultado, en lugar de poder simplemente ejecutar fórmulas simples, debe calcular iterativamente una gran cantidad de pequeños pasos teniendo en cuenta la atracción gravitatoria de cada objeto sobre todos los demás objetos. No sé en qué escala de tiempo/nivel de precisión esto comienza a ser significativo.

Durante períodos de tiempo mucho más largos, la incertidumbre en las posiciones exactas de los planetas hace que las predicciones sean imposibles. Durante varios cientos de millones de años, cambiar la posición de un solo planeta en un nanómetro dará como resultado configuraciones orbitales completamente diferentes al final del cálculo.

Hola, Dan, ¿podría sugerir un problema más realista que podría abordarse con el desarrollo de software si este es un poco... loco? Todavía estoy en la fase de diseño en este momento y todavía estoy refinando mi idea.
@AdLib Esa es una pregunta muy abierta y no es algo que sienta que pueda responder. Tampoco estoy seguro de que el problema que preguntaste esté más allá del alcance de un proyecto de último año. A menos que la mayor parte de su esfuerzo se dedique a la visualización, un modelo Kepleriano probablemente no sea suficiente. Es casi seguro que es un modelo perturbativo relativista general completo (debido a la necesidad de aprender GR al menos). No tengo una buena idea de dónde caería un modelo perturbativo newtoniano. Probablemente necesite hablar con alguien en la facultad de astronomía de su escuela para evaluar eso.
@AdLib También en la lista desconocida para tratar de responder a su pregunta está qué tan grande se supone que debe ser su proyecto de último año. Mis estimaciones anteriores se hicieron asumiendo que está en algún lugar entre 1/3 y 1/2 del trabajo de su último año.
Una calculadora de efemérides debería ser lo suficientemente simple de hacer, si tienes un buen modelo y no tienes miedo a las matemáticas. Los modelos estándar utilizados para generar efemérides ofrecen una precisión razonable al menos durante algunas décadas alrededor de su época.
Hola Dan, agradezco tu respuesta, sé que la pregunta es un poco abierta e indirecta. Mi proyecto vale el 60% de mi calificación y básicamente en mi cabeza (lo sé, ¿verdad?) tenía una herramienta de estilo educativo para niños pero con algunos cálculos avanzados como esta calculadora de efemérides que mencionó Daggerstab. Esta es la dirección en la que me gustaría llevarlo, y no le tengo miedo a las matemáticas; desafortunadamente, no soy un experto en física, es un gran interés para mí y me gustaría trabajar con él. Gracias chicos.
Y nuevamente, me gustaría expresar lo agradecido que estoy por las respuestas, sorprendentemente no hay muchos sitios en Internet que adornen las preguntas del proyecto del año final con una respuesta.

Recientemente creé mi propio planetario/efemérides, aquí hay algunos pensamientos (incoherentes):

Hay dos tipos de tiempo que se pueden usar como entrada para su programa: tiempo de efemérides (tiempo de coordenadas) y TAI/UTC (tiempo atómico propio). El tiempo coordenado es la variable independiente de las ecuaciones de movimiento.

La entrada a las efemérides VSOP y JPL mencionadas es un tiempo de coordenadas, que no es lo mismo que la fecha y hora UTC en la Tierra. Si desea calcular las posiciones de los planetas en función del tiempo real , primero debe convertir el tiempo en una coordenada de tiempo adecuada. TE405 es un proyecto de código abierto que convierte TAI al tiempo de Efemérides utilizado en las efemérides JPL DE405.

Si desea obtener resultados razonablemente precisos, debe integrar numéricamente las ecuaciones de movimiento de Einstein-Infeld-Hoffmann, incluidos los coeficientes armónicos de los potenciales gravitacionales del Sol, Mercurio, la Tierra, Júpiter y Saturno. También deberá integrar las órbitas de los planetas menores más grandes (Ceres, Pallas, Vesta). La integración numérica de las ecuaciones relativistas es muy intensiva desde el punto de vista computacional y requiere una precisión cuádruple. La NASA usa hardware especial, todos los demás usan una biblioteca de software de alta precisión. A menos que conozca GR, es mejor usar una aproximación de Chebyshev

La precisión es un problema real. Los procesadores Intel tienen registros FP de 80 bits, pero Windows solo admite tipos FP de 64 bits. Al codificar en ensamblador, puede conservar esa precisión.

Una vez que tenga las posiciones de los planetas, no es mucho más trabajo agregar una visualización en 3D del sistema solar usando DX u OPENGL. Para un fondo realista, utilice los catálogos de estrellas brillantes de Hipparcos o Yale. Después de eso, vaya a la base de datos de planetas menores y descargue las órbitas de los primeros 300,000-400,000 planetas menores en formato CSV, cualquier GPU moderna podrá renderizarlos (pero no animarlos) en tiempo real. Obtenga un monitor 3D y prepárese para dejarse llevar.

Si desea reproducir observaciones astronómicas reales, deberá tener en cuenta la precesión/nutación/movimiento polar, etc.

Para replicar los experimentos de alcance lunar, utilice el modelo de elevación digital GTOPO30 .

Cada planeta tiene un período de “gran revolución”. los antiguos conocían estas cifras, y hoy pueden serle útiles. El número de Saturno, por ejemplo, es de 59 años. Esto significa que regresa a cada puesto cada 59 años. Júpiter tiene 83 años, Marte y Mercurio tienen 79 años.

Dependiendo de la cantidad de años bisiestos dentro de esos períodos, puede estar equivocado por un grado... tal vez 2, pero se puede encontrar esa corrección.

¡¡Ahora, no es cálculo!! pero le dará la información que está buscando.