La forma más simple es la integración de Euler. Tiene que almacenar el vector de posición y el vector de velocidad. En cada cuadro:
- medir el tiempo transcurrido desde el último paso de integración: dt
- Calcule la fuerza vecor debido a sus motores: F
- calcule el vector de aceleración: A = F / m donde m es la masa de la nave espacial.
- agregue el vector de gravedad: A = A + G asegúrese de que G apunte hacia el centro del planeta
- actualizar el vector de velocidad V = V + A · dt
- actualizar el vector de posición X = X + V · dt
( x para escalares, X para vectores)
asegúrese de que dt sea pequeño ...
El | G | es de aproximadamente 9.8 m / s² para la tierra y aproximadamente 1.6 m / s² para la luna
En general, la fuerza de acción debida a la interacción gravital es:
Afecta a cada cuerpo y apunta hacia el otro.
El escalar G es la constante gravitacional muy famosa , es aproximadamente 6.67e-011 N (m / Kg) ²
Como estás interesado en la aceleración:
Solo necesita saber la masa del planeta (m2) y el radio (r) para calcular su aceleración.
Por lo general, la aceleración que mueve el planeta hacia su nave espacial es insignificante porque generalmente m1 es insignificante en comparación con m2.
Sin embargo, si está intentando aterrizar en un pequeño asteroide, probablemente tenga que usar la fórmula general que agrega esa fuerza al vector de fuerza total en el segundo paso.
EDITAR:
Según se requiera alguna pista sobre la implementación. Necesitará:
- Una biblioteca de vectores
- Modelo de motor
- Modelo fisico
- Detección de colisiones
- Interfaz de usuario (entrada y representación gráfica)
En primer lugar, la biblioteca de vectores: su juego puede ser mono / bi / árbol / cuatro ... dimensional, en la medida en que considere que su caso es una proyección de una palabra en 3D, se mantienen las rutas físicas.
Si n es la dimensión que elige (probablemente 2 o 3 en su caso), la biblioteca debe tener:
- una entidad de almacenamiento de vectores (una lista de n números de punto flotante para cada vector)
- un operador de suma (suma componente por componente)
- un operador de multiplicación escalar (cada componente multiplicado por un flotador)
- una multiplicación de puntos entre vectores (multiplicar componente por componente y resumir todo)
- la longitud del vector (raíz cuadrada de un vector punto-multiplicado por sí mismo)
Puede usar una biblioteca que haga esto o implementar una usted mismo; un vector puede ser una estructura o una clase, la elección es tuya.
Cada motor debe ser descrito por:
- un vector que indica su fuerza de empuje y dirección
- un escalar que indica el uso de combustible por segundo cuando está a plena potencia;
su entrada de usuario se utilizará para proporcionar a cada motor un número que estará entre 0 (motor no utilizado) y 1 (potencia máxima): el factor del motor (uso).
Multiplique el factor del motor por su vector de empuje para obtener la confianza real del motor y resuma todos los resultados de todos los motores disponibles; esto te dará la F del segundo paso.
Su factor de motor se puede utilizar para conocer el uso real de combustible para cada motor: multiplique el factor del motor por el uso de combustible y por dt para conocer el uso instantáneo de combustible; puede restar este valor de la variable de capacidad total de combustible (esto le da la oportunidad de actualizar su masa total m si la masa de combustible es considerable).
Ahora puede continuar utilizando la integración para calcular la nueva posición, verificar la colisión con la superficie de su planeta; en su caso, use la longitud del vector de velocidad para decir si el aterrizaje fue un éxito o un desastre.
Obviamente, se pueden / deberían realizar otras verificaciones de colisión, algunas entidades de superficie no se pueden permitir como punto de aterrizaje, por lo que cada colisión es fatal.
Dejo cómo obtener información y cómo presentarle su nave espacial; puede usar el factor del motor para representar el estado del motor cuadro por cuadro, por ejemplo.
Como la otra excelente respuesta parece un poco teórica, aquí está la versión de código simple:
fuente
Desafortunadamente, las matemáticas aquí se ponen peludas. La respuesta de FxIII está bien para el caso general de un objeto que cae pero estás hablando de un cohete, y los cohetes queman combustible.
He visto un código que lo hace, pero estaba completamente indocumentado y nunca pude resolver las matemáticas detrás de él. A menos que esté limitado por la CPU de alguna manera, no me molestaría y simplemente la fuerza bruta: el enfoque de FxIII se aplica en una escala de tiempo bastante corta y ajusta el empuje (o el uso de combustible si calcula que el cohete se acelera a medida que el combustible se quema para mantener la aceleración especificada en lugar del empuje especificado) entre cada iteración a medida que el cohete quema combustible.
fuente