Creación de un sistema solar "fijo" básico para albergar una simulación de viaje espacial en 3D

Estoy tratando de simular un "sistema solar" virtual/imaginario en el software, solo un proyecto de pasatiempo por ahora. Lamentablemente, esto me ha hecho darme cuenta exactamente de cuántas matemáticas he olvidado desde la universidad.

La precisión completa no es importante, y no busco hacer nada sofisticado... no hay necesidad de cálculos de varios cuerpos, solo bastará con una estrella y un planeta. Solo quiero algo que pueda hacer una simulación ligera o un juego.

Tendré un archivo de configuración con algunos parámetros iniciales básicos para cada planeta. Al comienzo de la simulación, tiempo = 0 segundos, todos los planetas estarían alineados en una fila (planificando simplemente colocarlos en el mismo eje a su distancia de perihelio de la estrella). Me gustaría que los planetas se movieran alrededor de sus órbitas a la velocidad correcta según los parámetros proporcionados. Entonces, si decido establecer time = 1e10, necesito poder calcular las posiciones x e y de cada planeta en su órbita en ese momento preciso.

Soy flexible con respecto a QUÉ parámetros deben proporcionarse. Entonces, si esto se vuelve más fácil usando algún otro método para definir la órbita, estoy abierto a ello. Ahora mismo estoy pensando en perihelio, masa y tiempo transcurrido.

(Dado que esta es una simulación 3D, eventualmente también me gustaría trabajar con la inclinación, pero estoy tratando de comenzar de manera simple por ahora, por lo que todas las inclinaciones serán cero).

Aquí hay algunos datos de parámetros de muestra a continuación en caso de que ayude a proporcionar un mejor ejemplo.

Masa estelar = 2.00e30

Masa del planeta = 3.30e23

Perihelio del planeta = 5800000

(Ej. ¿Dónde estaría este planeta, en coordenadas X/Y, en el tiempo = x?)

Si alguien publica una fórmula que puedo conectar, no me quejaré. Pero si pudiera señalarme en la dirección correcta sobre qué aprender o refrescar mi memoria, me gustaría intentar resolver esto por mí mismo. Hasta ahora he estado mirando las ecuaciones de la tercera ley de Kepler, pero no estoy seguro de si ese es un buen lugar para comenzar. Me siento un poco culpable de haber olvidado prácticamente todas las matemáticas que aprendí en la universidad hace poco más de una década, y quiero revertir parte de esa decadencia. ¡Ojalá esto tenga sentido!

¿Qué tal esta respuesta sobre el desbordamiento de pila ? El código allí podría darle una idea para comenzar. (Básicamente, un primer ciclo para calcular las fuerzas gravitatorias totales en cada objeto y un segundo ciclo para calcular el cambio en sus posiciones durante el siguiente intervalo de tiempo).
Este artículo en wikipedia da algunos consejos sobre por dónde empezar. Si desea agregar algo de complejidad, esta página del curso de Princeton es útil.
Esos recursos son útiles, pero en esencia, su respuesta son solo enlaces. Considere desarrollarlo un poco o convertirlo en un comentario. Ah, y por cierto, bienvenido a esta parte de la red SE.
No vale la pena una respuesta completa, pero solo como referencia, una órbita requiere 6 parámetros para definirla de manera única . Es posible que desee configurar su archivo de entrada para usar los 6 para empezar, pero elimine todo lo que no necesite o no entienda inicialmente. Definitivamente, deberá comenzar definiendo el semieje mayor (en lugar del perihelio, aunque técnicamente el perihelio también podría funcionar) y la excentricidad (equivalente a definir la energía de su órbita).
Si tuviera un vector de velocidad inicial para el planeta, tendría suficiente para comenzar la simulación. Como señala @zephyr, esta sería una órbita elíptica básica. Agregar un tercer cuerpo haría las cosas mucho más difíciles, ya que ahora tendría el "problema de los tres cuerpos" que no tiene una solución de forma cerrada.
@barrycarter Bueno, la posición inicial (similar a definir el semieje mayor) tendría que definirse, así como la velocidad (similar a definir la elipticidad). Agregar un tercer cuerpo tampoco debería ser un problema para él, ya que no está tratando de representar una solución en forma cerrada, sino que hace una simulación numérica explícita.
@zephyr Asumí que la posición inicial del planeta sería (5800000, 0, 0) por definición, ya que parece la mejor manera de configurar un sistema de ejes. Buen punto con respecto a la simulación: para dos cuerpos, la respuesta elíptica serviría como verificación de la simulación.
Guau, sugerencias mucho más útiles de lo que esperaba. :) Había notado la página de Orbital Elements en Wiki, y esa es una opción, pero espero poder simplificar un poco haciendo algunas suposiciones. Y sí, la suposición de la posición inicial (5800000, 0, 0) es correcta. ¡Tengo mucho que leer ahora!
Si bien la integración numérica es muy interesante, @Manius declaró explícitamente que no necesita interacciones de n cuerpos y quiere poder establecer el tiempo después de la época explícitamente. Estoy pensando que estaría mejor con una solución de "planetas sobre rieles", pero no tengo el tiempo ni los conocimientos para explicarlo correctamente...
Sí. No estoy buscando hacer una simulación del tipo "Universe Sandbox" en la que estés jugando con grandes cuerpos celestiales, y no estoy simulando marcos de tiempo de más de unos pocos cientos/miles de años, por lo que serán efectivamente órbitas estáticas. El objetivo es tener más de una simulación de vehículo de exploración (todavía básica) en la que básicamente voy a decidir qué objeto celeste es el principal y hacer que la "nave" orbite alrededor de eso. Cada objeto tendrá una "esfera de influencia gravitacional" que se activa cuando la nave se acerca lo suficiente. Así que solo necesito un método de procedimiento para mover cosas grandes.
Supongo que otro método (incluso más simple, aunque no fomentaría el realismo) sería simplemente determinar cómo trazar una elipse arbitraria en el espacio 3D y usar una variable de tiempo para determinar una ubicación en la elipse. En realidad, quiero poder dibujar líneas para delinear la órbita de cada objeto, por lo que probablemente sería útil de todos modos.
La respuesta es asombrosamente fácil. Los planetas viajan alrededor de una estrella en un círculo. (Es posible que haya escuchado que es una "elipse", pero necesitaría un monitor con una resolución de billones de píxeles por pulgada para representar esto: y no podría verlo de todos modos). Dice que no está interesado en más efectos ( como Marte empujando ligeramente alrededor de la Tierra), y eso es sensato ya que, de nuevo, es totalmente imposible que puedas verlo. Entonces, simplemente no podría ser más simple. Los planetas giran alrededor de la estrella en círculos. Tener dos parámetros para la distancia y la duración del año.
...simplemente escriba las distancias conocidas y la duración de los años. Fácil.
Sí, usa la "ley de Kepler" para pasar de "masa" / "radio" a "duración del año". Explicado en todas partes en línea, 1728.org/kepler3a.htm astronomynotes.com/gravappl/s8.htm , etc. en la "simulación" de su computadora (en realidad es un "diagrama"), todo lo que necesita es el radio y el tiempo. ¡Disfrutar!
esto le brinda todas las fórmulas que necesita (es trivial), para "conectar" los dos valores y obtener el otro. ajdesigner.com/phpgravity/keplers_law_equation_mass.php ¡ Espero que ayude!
¡ Atención ! He editado audazmente esta pregunta. Manius, usas el término "simulación". Este es un término técnico específico que no tiene absolutamente ninguna conexión, de ninguna manera, con lo que está tratando de lograr. Siéntete libre de usar mi edición de alguna manera si te ayuda. Pero tenga en cuenta que no desea mencionar "simulación" en absoluto, a menos que lo desee específicamente (es increíblemente poco probable que lo desee).
Puede echar un vistazo a VSOP87 que calcula la posición de todos los planetas en cualquier momento. en.wikipedia.org/wiki/VSOP_(planets) y hay un enlace para generar código: neoprogrammics.com/vsop87
Vea mi otro comentario, quiero una "simulación" (probablemente cruda) dentro de este entorno de "representación de diagrama", como lo llamó. Título actualizado para reflejarlo mejor.

Respuestas (3)

El enfoque más fácil es hacer una integración numérica de la ecuación de movimiento de su sistema. Para eso necesitas recordar que la fuerza gravitacional de a sobre b es

F a b = GRAMO METRO a METRO b r a b 3 r a b
dónde r a b = X b X a y eso
METRO a = F
dónde METRO es la masa de tu objeto, F es la suma de las fuerzas aplicadas al objeto y a es la aceleración.

Para hacer la simulación, entonces tienes que seguir este esquema numérico

  1. establece algunas condiciones iniciales para tu problema: posición inicial X pag del planeta y X de la estrella y velocidades iniciales v pag y v .
  2. calcular la fuerza F de la estrella en el planeta y las aceleraciones del planeta y la estrella:
    METRO a = METRO pag a pag = F pag
  3. actualizar la velocidad del planeta y la estrella usando la aceleración respectiva:
    v ( t + Δ t ) = v ( t ) + Δ t × a
  4. actualice las posiciones del planeta y la estrella usando su respectiva velocidad:
    X ( t + Δ t ) = X ( t ) + Δ t × v
  5. recalcular la distancia entre el planeta y la estrella r pag = X pag X y vuelve a 2.
Así es como funcionan las simulaciones de física. Por supuesto, siempre puede involucrarse más y usar matemáticas "más inteligentes". Lo que se presenta aquí es un método de Euler simple para aproximar la evolución futura de algo. A medida que profundiza en esto, puede buscar métodos más sólidos como Runge-Kutta . Dependiendo de su idioma, es probable que haya una implementación de las matemáticas detrás de estos métodos ya configurada, por lo que solo tiene que conectar y usar.
Oh, pero un método simple es exactamente lo que necesito. Me tomaré el tiempo para comprender completamente esto, ya que debería haber sido capaz de resolver esto solo, pero tal vez la próxima vez. Gracias por la ayuda con esto (el sitio no me permite votar nada). El lenguaje es Java.
No hay necesidad de hacer esto, ya que los planetas se mueven en círculos ; y las matemáticas anteriores estarían más allá del requisito. El OP simplemente muestra una representación de diagrama de un planeta que gira alrededor de una estrella. No hay "simulación" involucrada en absoluto. (¡Es inconcebible que el OP quiera comenzar a hacer análisis de elementos finitos, o similares!)
Tenga en cuenta que eliminé audazmente la palabra "simulación" de la pregunta, usando una sugerencia de edición, ya que eso no es absolutamente lo que quiere el OP. Tal vez ayude a aclarar la situación.

Apéndice: asegúrese de hacer clic aquí: http://www.sankara.net/mom.html

(elija el botón "Helios", arriba a la derecha)

Como una pregunta "increíblemente retórica", je, ¿puedes ver alguna elipsis en las órbitas de los planetas? Me imagino que el resultado final de tu juego se parecería a esa aplicación web. Supongo que las líneas rosa/naranja que muestran la transferencia de las dos naves espaciales (reales) de la Tierra a Marte serían algo así como en tu juego.

Simplemente reiteraría que, literalmente, para un juego, o cualquier "visualización de un sistema planetario" concebible, todo lo que tienes que hacer es "dibujar un círculo" y "poner un punto en él que se mueva en un círculo". Hacer visualizaciones del sistema de planetas como si fueran juegos es muy fácil , ¡ya que la escala es tremendamente grande, je!

(Nuevamente, puede simplemente obtener la duración del año de las fórmulas triviales vinculadas a continuación, recordando que debe modificar drásticamente la escala de tiempo).

¡Espero eso ayude!


Para que conste:

Para crear un diagrama en movimiento que muestre planetas en órbita:

(1) como dices, colócalos a la distancia deseada y conoce la masa . (2) calcule la duración del "año" .

(Es trivial hacer eso con, como usted dice, las ecuaciones de Kepler. Fácil de encontrar, ejemplo: ecuaciones complementarias ).

Por supuesto, escalarás el tiempo. (¿Qué pasa con 1 año terrestre es un minuto?) (De hecho, por supuesto, tendrá que aumentar radicalmente el tamaño del cuerpo, o simplemente no verá absolutamente nada).

Tenía una ventana abierta, así que hice esto en un motor de juego; ¡se necesitan 7 clics y 3 líneas de código!

ingrese la descripción de la imagen aquí

Nota: mencionó "simulación" en su pregunta original. Ese término tiene un significado técnico específico (especialmente para cualquier persona en este sitio) y no tiene ninguna relación con lo que está preguntando. ¡Disfrutar!


FTR Deduzco de su otra pregunta que desea mostrar puntos suspensivos extremos de "videojuego". Puramente como una cuestión de interés, para su información, la forma en que literalmente lo hace para un juego similar a un viaje espacial (ya sea una aplicación o una PC) es

(a) trivialmente, solo haga que el planeta se mueva hacia adentro y hacia afuera (cualquier porcentaje que desee) cada medio año. (Simplemente use una transformación separada, de modo que haya una transformación para que circule y una transformación para que entre y salga) o

(b) empujarlo como se describe, por ejemplo, aquí, usando sin y cos (O, todos los motores de juego o API de gráficos/animación tienen una llamada de "ping pong" y/o "suavizado en los extremos", solo utilícelo).

Un recordatorio de que su visualización cambiará drásticamente de la realidad ya que presentará 10 o 20 meses en, digamos, 10 o 20 segundos.

Bueno, espere ahora, estoy de acuerdo en que no formulé la pregunta técnicamente a la perfección, pero el objetivo general es hacer lo que todavía llamaría una simulación básica. No di más detalles sobre este aspecto, pero quiero "simular" (en un sentido más técnico que una simple trama matemática) el viaje de un vehículo espacial dentro de este sistema. También tenga en cuenta el elemento de fantasía: es posible que tenga órbitas muy excéntricas (que técnicamente podrían ser inestables durante un período prolongado). Quiero que los términos técnicos como perihelio/afelio también sean significativos, por lo que esto va un poco más hacia "fingir" de lo que me gustaría (todavía quiero puntos suspensivos).
No tendría los recursos informáticos, o el departamento de ingeniería, para hacer un análisis de elementos finitos. Por todos los medios, use la palabra "simulación" como desee, pero como escribí anteriormente: "Ese término tiene un significado técnico específico (especialmente para cualquier persona en este sitio), y no tiene ninguna relación con lo que está preguntando" ¡Disfrute!
Es por eso que estoy usando términos como simulación "cruda" (todavía creo que transmite mi intención lo suficientemente bien en un contexto casual); obviamente no estoy buscando sacar al JPL del negocio. Quiero decir, gracias por la ayuda y las sugerencias, pero creo que estás siendo técnicamente demasiado estricto con el término hasta el punto de que parece un poco desagradable para los aficionados. Creo que dejé bastante claro que no estoy haciendo algo que requiera un equipo de 20 personas y una supercomputadora. Creo que su sugerencia es probablemente una buena solución, pero esperaba admitir al menos órbitas elípticas.
El problema aquí es que las órbitas son elipses, no círculos. Se necesitan más de 3 líneas de código.
Seguro, como mencioné en un comentario, en la medida en que puede representar en un monitor, es solo un círculo (pensé que el OP estaba haciendo un diagrama similar a nuestro sistema solar; no había visto la otra pregunta del OP mostrando puntos suspensivos extremos de "juego de arcade").
hola @Manius solo FWIW prueba el enlace (sankara) que agregué, es bueno. (Es muy posible que el código esté disponible, FWIW).
Saliéndose del tema aquí, pero ¿no son las órbitas más extremas bastante realistas (en otros sistemas solares en particular, o con planetoides/cometas/asteroides)? Ese es un enlace bastante bueno.
hola @Manius con respecto a agregar "aspecto de elipse extrema" en un contexto de juego. Di la solución completa y total en los puntos etiquetados (a) y (b). Tenga en cuenta que el punto (b) incluye literalmente el concepto matemático completo, y específicamente todo el código, para hacerlo. Con respecto al punto (a), tengo la impresión de que aún no ha probado un motor de juego (haga clic para descargar uno y probar), es un poco difícil de explicar, pero lo que está preguntando está completamente integrado en los conceptos fundamentales. ("GameObjects", "Transformar") de cualquier motor de juego; puede rotar instantáneamente y mover cosas hacia adentro y hacia afuera.
lol.. Bueno, si no tuviera experiencia con un motor de juegos, estaría muy adelantado en este momento. No estoy seguro de dónde sacas esa impresión, aparte del hecho de que mi conocimiento de matemáticas ha decaído bastante. Han pasado más de 10-15 años desde que hice lo que consideraría matemáticas "reales". Ya tengo algo de experiencia en desarrollo 3D (bastante más no 3D), pero, por supuesto, algunos motores lo "ayudan" con problemas comunes, lo que no lo ayuda a aprender lo que sucede debajo del capó. Creo que te refieres a gamedev.net. De hecho, he sido miembro allí durante años, es un gran sitio.

No necesitas hacer una simulación física para hacer lo que quieres. Las leyes de movimiento planetario de Kepler funcionarán bien y, por supuesto, explican las órbitas elípticas.

Tendrás que hacer un poco más de matemáticas si quieres que tus órbitas sean elípticas. Las matemáticas que necesita se resumen aquí . Esta es una receta para calcular r y θ en función del tiempo, donde r es la distancia helio(astro)céntrica y θ es la anomalía verdadera, que es la coordenada angular en ese momento. A su vez tendrías que especificar la masa de la estrella (y del planeta si fuera significativo), el período orbital (o semi-eje mayor), la posición del perihelio (astron) y la posición en t = 0 .

La inclinación orbital es independiente de estos cálculos, ya que en este esquema básico no hay nada que altere el momento angular de la órbita y por tanto hay un quinto parámetro que lo define.

Los cálculos son razonablemente simples, aunque tendrá que hacer algo numérico (como el método de Newton-Raphson ) para obtener la anomalía excéntrica en el paso 2.

Si desea comenzar a tener en cuenta las interacciones de 3 cuerpos (o más), tendrá que pensar en simulaciones físicas. Creo que el esquema proporcionado por cphyc funcionará bien siempre que haga que el paso de tiempo sea muy pequeño y no se integre en muchas órbitas. Si está interesado en la estabilidad o la evolución a largo plazo de los sistemas planetarios que configura, tendrá que entrar en esquemas mucho más complejos, ya que el sugerido por cphyc es numéricamente inestable.

Ooo, esa podría ser exactamente la matemática que necesito, "en función del tiempo", ¡no lo noté antes!