Respuestas:
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:
( 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á:
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:
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:
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:
// Position of the lander:
var positionX = 100.0;
var positionY = 100.0;
// Velocity of lander
var velocityX = 0.0;
var velocityY = 0.0;
// Acceleration due to gravity
var gravity = 1.0;
// If the player is pressing the thrust buttons
var isThrusting = false;
var isThrustingLeft = false;
var isThrustingRight = false;
// Thrust acceleration
var thrust = -2.0;
// Vertical position of the ground
var groundY = 200.0;
// Maximum landing velocity
var maxLandingVelocity = 3.00;
onUpdate()
{
velocityY += gravity;
positionX += velocityX;
positionY += velocityY;
if (isThrusting)
{
velocityY += thrust;
}
if (isThrustingLeft)
{
velocityX += thrust;
}
else if (isThrustingRight)
{
velocityX -= thrust;
}
if (positionY >= floorY)
{
if (velocityY > maxLandingVelocity)
{
// crashed!
}
else
{
// landed successfully!
}
}
}
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.