Velocidad orbital inicial vs constante

Estoy trabajando en una simulación de física básica para un juego y necesito simular la gravedad. Tengo un sistema funcionando que se está comportando más o menos correctamente hasta ahora, pero quiero ver si puedo enviar un proyectil a una órbita estable dándole una velocidad inicial .

Entiendo que la siguiente ecuación expresa la velocidad de una órbita estable alrededor de una masa,

v = GRAMO METRO r

Puedo usar esta ecuación para crear una órbita estable, pero no establecer una velocidad inicial y luego dejar que la gravedad haga el trabajo. Solo funciona si calculo los componentes {x, y} de v y establezco ese vector como la velocidad de los proyectiles cada vez que renderizo la escena. La dirección del vector siempre se calcula para ser perpendicular en dirección a la línea que representa la fuerza gravitacional hacia el centro de la masa.

Entonces, mi pregunta es esencialmente si esta ecuación está destinada a encontrar una velocidad inicial adecuada y, de no ser así, ¿hay otra forma? No tengo claro si existe alguna distinción significativa entre calcular v como una velocidad orbital estable versus v como una velocidad inicial que se resuelve en una órbita estable.

O, alternativamente, podría ser más apropiado decir que necesito darle al proyectil y la fuerza o aceleración inicial que se resuelve en una órbita estable (como una velocidad de escape, más o menos).

Gracias.

EDITAR: así es como calculo el vector de aceleración gravitacional en un punto determinado. Sean (x, y) el punto de interés, (x1, y1) el centro de masa, dx la aceleración de la componente x y dy la aceleración de la componente y:

        1) seperation of the points

        sep_x = x1 - x;
        sep_y = y1 - y;

        2) effect of gravity given distance between points

        gravity = (G * mass) / radialDistance ^ 2

        3) break down into components

        dx = (gravity * sep_x) / radialDistance ^ 3
        dy = (gravity * sep_y) / radialDistance ^ 3
¿Qué te imaginas como posición inicial? ¿Está trabajando con un objeto que se pone en órbita? o algo cayendo en órbita?
Lo más probable es que caiga en órbita. Me gustaría poder tomar cualquier posición inicial y calcular la velocidad inicial necesaria como un vector {x, y}. Mi sospecha es que ese es un cálculo completamente diferente que solo usar la ecuación anterior, pero no estoy seguro.
Parte de su problema podría ser que no hay un vector que resulte en una órbita estable, hay un número infinito de ellos. Podría ser posible determinar las desigualdades que darán como resultado una órbita estable, pero a menos que especifique la órbita con mayor precisión, probablemente sea lo mejor que pueda hacer.
Veo. Tomemos el ejemplo de un satélite: requiere una fuerza proporcionada por propulsores para permanecer en órbita, ¿no es así? Parece que debería agregar una función para aplicar fuerza al proyectil, luego calcular la fuerza necesaria para mantenerlo a una velocidad orbital estable ... lo que sería realista, creo.
Sí, los satélites usan propulsores para permanecer en órbita. A corto plazo, se utilizan para mantener el satélite donde "se supone" que debe estar y, a largo plazo, para contrarrestar el arrastre acumulativo de la fricción del aire. En un sistema ideal, una órbita estable no requiere ninguna fuerza aplicada. Si diera más detalles sobre lo que incluye en su modelo, ayudaría.
@AdamRedwine, vea mi edición para obtener un esquema básico del algoritmo que uso para calcular un vector de aceleración para la gravedad.
No entiendo de dónde sacas dx y dy y qué se supone que representan. Estoy de acuerdo con Shimuuar en que sería mejor que resolvieras las ecuaciones de movimiento. En un problema de dos cuerpos esto es muy sencillo.
Debo agregar que 1) asumo que la masa de los objetos en órbita es insignificante en comparación con la masa del objeto que está en órbita, y 2) los componentes dx y dy son una representación vectorial de la aceleración debida a la gravedad -- {dx , dí}. ¿Ese cálculo es incorrecto? GM / r^2 produce un valor escalar, pero necesitamos convertirlo en un vector para que también sepamos la dirección de la gravedad.
Aquí hay un par de enlaces potencialmente útiles: astro.u-strasbg.fr/~koppen/body/TwoBodyHelp.html y en.wikipedia.org/wiki/N-body_problem#Numerical_integration (que llevan a en.wikipedia.org/wiki /Leapfrog_integration , pero tenga en cuenta que este enlace usa una convención diferente para numerar los pasos que mi respuesta).
Y burtleburtle.net/bob/math/multistep.html es una mirada más completa a las opciones que incluyen integradores de alto orden.

Respuestas (3)

El satélite permanecerá en órbita estable si su velocidad inicial es inferior a v C r i t = 2 GRAMO METRO / r a menos que el pericentro de la órbita sea demasiado bajo, en cuyo caso el satélite chocará contra el cuerpo central. En particular, si la velocidad del satélite es GRAMO METRO / r y perpendicular a r permanecerá en una órbita circular estable.

Es muy fácil ver eso a partir del balance de energía. Anotemos la energía cinética y potencial del satélite.

tu = GRAMO METRO metro r ; T = 1 2 metro v 2

Si la energía total del satélite es negativa, no puede ir al infinito y está confinado a la vecindad del cuerpo central y residirá en una órbita elíptica. Si la energía total es positiva, se irá volando.

Sospecho que resuelves ecuaciones de movimiento incorrectamente. Para cualquier coordenada y velocidad iniciales, el satélite circulará en una órbita elíptica (o circular) o volará en una órbita hiperbólica.

Resolver ecuaciones

Para calcular la trayectoria del satélite, necesita resolver ecuaciones de movimiento. Existe una solución analítica para el caso de dos cuerpos. Pero si desea agregar más cuerpos masivos o tener en cuenta los propulsores o la resistencia atmosférica, deberá usar la integración numérica. Vamos a escribirlos. Los escribí en forma adecuada para la integración numérica.

d X d t = v ; d v d t = a = GRAMO METRO r 3 r + F w h a t mi v mi r / metro

La solución también debe satisfacer las condiciones iniciales.

v ( t 0 ) = v 0 ; X ( t 0 ) = X 0

Aquí hay una regla muy simple para la integración numérica. Δ t es un paso de tiempo para la integración y a ( t i ) es la aceleración en el i-ésimo momento del tiempo.

X i + 1 = X i + v i Δ t
v i + 1 = v i + a ( t i ) Δ t

Este método en particular es una mala elección para la simulación. Hay métodos mucho mejores, por ejemplo Runge-Kutta.

Dado que la velocidad inicial tiene que estar dirigida perpendicularmente a la línea que apunta hacia la masa, tengo que volver a calcular la dirección correcta cada vez. En una configuración de simulación por computadora, cada velocidad debe expresarse como un vector {x, y}; de lo contrario, no tiene sentido; así es como le digo a la partícula a dónde debe moverse a continuación. De lo contrario, creo que mi simulación es correcta, porque cuando establezco la velocidad en el resultado de Vcrit cada vez que mantiene una órbita perfecta. El valor de vis la velocidad requerida <i>después</i> de tener en cuenta la gravedad, no es el valor necesario <i>a pesar de</i> la gravedad, ¿verdad?
En este punto, realmente no entiendo qué intentas lograr. Si solo desea establecer condiciones iniciales y dejar que la gravedad haga el trabajo, debe resolver ecuaciones de movimientos. Ya sea numéricamente o use soluciones exactas para el caso de dos cuerpos. Para ser correcta, la simulación debe ser capaz de reproducir no solo órbitas circulares sino también elípticas e hiperbólicas.
Quiero establecer condiciones iniciales y dejar que la gravedad haga el trabajo, pero lo más importante es que la simulación sea realista. Mi pregunta es si la ecuación antes mencionada es realmente la correcta para lograrlo. Supongo que si estamos hablando de un proyectil pequeño o algo del tamaño de un satélite, las 'condiciones iniciales' tienen que incluir más que solo una velocidad inicial y también una fuerza inicial o ajustes constantes de alguna fuerza, como los propulsores. Además, en mi modelo asumo que la masa de los satélites/proyectiles es insignificante en comparación con la estrella o el planeta que está orbitando.
La posición inicial y la velocidad inicial determinan completamente la trayectoria del satélite (ignorando el disparo de los propulsores)
Correcto, pero si quiero mantener una órbita estable (a un rango relativamente cercano), ¿no necesitaría empuje? Puede ser que mi modelo no esté escalado de manera que pueda ver una órbita estable para un pequeño satélite de masa insignificante sin fuerzas externas. ¿Es eso posible? ¿O debería ser posible tener una órbita estable sin fuerzas externas a cualquier distancia?
@Sean, la forma más ingenua de realizar la simulación (esencialmente, la iteración de Newton-Raphson) no conserva energía. La solución más simple es usar el método de salto descrito en mi respuesta, pero también es posible que tenga un error en su código.

Al leer los muchos comentarios tengo varias preocupaciones.

  • Sobre la cuestión de cómo funcionan la gravedad y las órbitas.

    Estoy un poco preocupado por el uso de la frase "caer en órbita" , que es conveniente pero filosóficamente arriesgada. Un cuerpo en una aproximación parabólica o hiperbólica (es decir, literalmente cayendo) no obtiene una trayectoria cerrada (es decir, una órbita) sin empuje o la intervención de una fuerza exterior (por ejemplo, perturbaciones gravitatorias de un tercer cuerpo). En ese sentido, no hay diferencia entre la velocidad inicial en una órbita particular y la velocidad en evolución en esa misma órbita.

    Inyectar cuerpos en órbita es un problema importante, pero no tengo la sensación de que esto sea lo que Sean está haciendo.

  • En cuanto a lo que se entiende por vector

    No es cierto que el vector deba expresarse como ( X , y ) ser significativo, ( V , ϕ ) es igual de significativo. Generalmente es más conveniente usar representaciones cartesianas en una simulación, pero eso no es fundamental

  • Sobre la cuestión de cómo funcionan las simulaciones

    Si está simulando la gravedad de forma ingenua (y así es como debería hacerlo hasta que se sienta cómodo con la simulación), entonces no debería volver a calcular la órbita desde

    v = GRAMO METRO r
    en cada iteración. Debería actualizar el comportamiento de cada cuerpo en la simulación con la segunda ley de Newton y la gravitación universal (aunque en forma discretizada).

    Las órbitas resultan ser casos complicados, por lo que le sugiero que alterne entre actualizar las posiciones en un paso y las velocidades en el siguiente (es bien sabido que este enfoque de salto de rana conserva la energía orbital cuando otros métodos ingenuos no lo hacen).

    v X , norte + 1 = v X , norte 1 + F X , norte metro Δ t , v y , norte + 1 = v y , norte 1 + F y , norte metro Δ t t
    y
    X norte + 2 = X norte + v X , norte + 1 Δ t , y norte + 2 = y norte + v y , norte + 1 Δ t
    donde el F proviene de la Ley de Gravitación de Newton y la norte representan los pasos de su simulación. El Δ t s aquí representan el tiempo entre paso norte y paso norte + 2 como los he numerado. (Eres libre de eliminar el F / metro pero al encontrar a directamente.)

Gracias. Creo que estoy simulando la forma en que dijiste (la forma ingenua), actualizando dinámicamente el comportamiento de cada cuerpo. La cosa es que cuando configuro la velocidad inicial de mi proyectil en base a v = sqrt(GM/R) no produce una órbita estable, comienza una órbita pero finalmente choca con la masa con bastante rapidez. Es solo cuando abandono la forma ingenua en que funciona. Sin embargo, originalmente no tenía claro si v = sqrt(GM/R) debería funcionar correctamente dentro del contexto de mi simulación 'ingenua'. El enfoque de salto de rana parece interesante, ¿requiere que agregue fuerza externa?
La gravedad debería ser la única fuerza en la simulación. Mis primeras versiones eran lo suficientemente estables como para ver cómo el sistema se alejaba de la pantalla decenas de órbitas más tarde porque me había olvidado de darle al primario una velocidad inicial y, por lo tanto, el sistema tenía un momento total distinto de cero.
Entonces, si establecer mi velocidad inicial (luego dejar que la gravedad funcione de manera ingenua) como v = sqrt (GM / R) no funciona para formar una órbita estable, ¿crees que hay algo más mal con el código?
Probablemente, pero hay otras pruebas que puede hacer... si comienza su cuerpo de prueba sin velocidad , ¿cae directamente? ¿Su aceleración inicial varía linealmente con la masa del primario? Y otras preguntas tan sencillas. Me parece recordar que es fácil confundir las funciones trigonométricas al descomponer la fuerza/aceleración.
Hmm, en ambas pruebas, mi simulación se ve bien. Se derrumba directamente en la masa tal como cabría esperar y la aceleración inicial es linealmente proporcional a la masa. Creo que el problema puede ser un problema de escala. No estoy seguro. ¿No es posible que no pueda ver órbitas estables si estoy operando a una escala demasiado cercana o pequeña? Simplemente no me cuadra... todo parece estar bien en el modelo.
¿Estás seguro de que este no es un caso de inyectar un cuerpo en órbita como mencionaste?

Arruinaste tu código. Estás tomando los componentes de la gravedad dividiendo por 1/r^2 por segunda vez, cuando ya lo hiciste en el paso original de calcular la fuerza gravitacional.

Debe establecer G en 1. Esto solo redefine la unidad de masa, pero evita confusiones porque en unidades ordinarias G es enormemente pequeño.

Aquí está el algoritmo correcto. Simplemente elimina los cubos de los componentes de aceleración.

        1) seperation of the points

        sep_x = x1 - x;
        sep_y = y1 - y;

        2) effect of gravity given distance between points

        gravity = (G * mass) / radialDistance ^ 2

        3) break down into components

        dx = (gravity * sep_x) / radialDistance 
        dy = (gravity * sep_y) / radialDistance

Su simulación original sigue siendo interesante --- está calculando el movimiento en un campo de fuerza 1/r^4, un potencial 1/r^3. Este tipo de cosas no son físicamente relevantes para el sistema solar, pero es un buen ejercicio matemático. Puedes ver que no lo hiciste bien porque las órbitas precesan en dicho campo, en lugar de hacer elipses cerradas.

Para obtener las nuevas velocidades, supongo que multiplicas dx y dy por una pequeña cantidad y las restas de v_x y v_y, las componentes x e y de la velocidad, como deberías, porque no tienes un signo menos en tu fórmula de fuerza. . Luego agrega v_x y v_y veces la misma pequeña cantidad a la posición actual. Todo esto es asumiendo una unidad de masa, lo cual está bien, porque asumo que no mueves tu centro gravitacional en absoluto durante la simulación.