2D Planet Gravity

15

Estoy tratando de hacer un juego simple donde se lanza una nave espacial y luego su trayectoria se ve afectada por la gravedad de los planetas.

Similar a este juego: http://sciencenetlinks.com/interactives/gravity.html

Deseo saber cómo replicar el efecto que los planetas tienen en la nave espacial en este juego para que una nave espacial pueda 'girar' alrededor de un planeta para cambiar de dirección.

Me las arreglé para lograr algunos resultados falsos en los que la nave espacial gira en una gran elipse alrededor del planeta o solo se ve ligeramente afectada por la gravedad de un planeta que usa Vectores.

Gracias por adelantado.

PD: Tengo mucha experiencia en codificación, nada que ver con el desarrollo del juego.

horneado
fuente

Respuestas:

15

En su caso hay una nave espacial, que se mueve afectada por la gravedad de todos los planetas. Cada planeta aplica una fuerza igual a 'm1 * m2 / r ^ 2' en la que m1 y m2 representan masas de nave espacial y planeta, yr es igual a la distancia euclidiana del planeta y la nave espacial. solo tienes que calcular la suma de todas las fuerzas aplicadas a la nave. de las reglas de newton sabemos 'f = m * a' donde f es la fuerza total aplicada a un objeto, m es su masa y a es su aceleración. desde este punto, puede leer esta página para aprender a usar la aceleración para calcular la velocidad y la posición en el tiempo.

Ali1S232
fuente
+1 Buen recurso que vinculaste, explicando el método de integración Runge-Kutta de 4to orden y todo.
David Gouveia
Mi problema en este momento es el camino que toma la nave espacial. Necesito que sea más "como un juego". Hice una imagen simple para mostrar lo que quiero decir. i44.tinypic.com/2w2kdo4.jpg A es lo que tengo ahora, B es lo que quiero.
horneado el
@baked: ¿y aumentar la masa del planeta no funcionaría?
Jesse Emond
55
¡Además del artículo de Gaffer en Juegos, absolutamente necesitas leer este artículo de Codeflow ! Runge-Kutta no parece ser tu mejor apuesta aquí.
sam hocevar
Si tiene A y quiere B, ¿qué le parece reducir la velocidad inicial de su nave espacial?
Ben
4

Cada planeta debe tener un campo gravitacional que atraiga cualquier objeto en su vecindad hacia su centro. En otras palabras, debes aplicar una fuerza desde la posición de la nave espacial al centro del planeta en cada paso de la simulación.

Esta fuerza depende de la masa de ambos objetos, pero en este caso, dado que la masa de la nave espacial es probablemente insignificante en comparación con la del planeta, puede probar diferentes constantes dependiendo del tamaño del planeta hasta que tenga la sensación correcta.

Lo más importante, esta fuerza se debilita cuanto mayor es la distancia entre ambos objetos. Lo harás dividiendo por la distancia al cuadrado entre ambos. Después de cierta distancia, es posible que desee cortar "manualmente" y dejar de aplicar la fuerza.

Simplemente traduzca esta fuerza en una aceleración, y las ecuaciones físicas básicas deberían ocuparse del resto.

En pseudocódigo

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship
David Gouveia
fuente
En realidad, esto es bastante similar a cómo lo he estado haciendo actualmente. ¿Tal vez es solo una cuestión de jugar con las constantes?
horneado el
2
Realmente no estoy seguro, pero diría que probablemente solo sea un ajuste ahora. Y creo que también depende de la fuerza inicial que apliques a la nave espacial para ponerla en órbita.
David Gouveia