¿Cómo calcular la velocidad de caída y aceleración?


9

Estoy pensando en hacer un juego de aterrizaje, donde controlas una nave espacial y necesitas aterrizar sin estrellarte. ¿Cuál es una fórmula simple para calcular la velocidad de caída o la aceleración en relación con el tiempo de trabajo de los motores?

Respuestas:


28

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:

Ley de la gravitación universal de Newton

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:

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.


Eso es genial, pero algunas ideas sobre cómo implementarlo en el código serían geniales.
Dvole

1
donde aprendí física shiffman.net/teaching/nature
Ming-Tang

Este chico sabe su física!
MGZero

7

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!
        }
    }
}

2
Manteniéndolo simple. Espero que esto esté en la línea de lo que estaba buscando.
Beska

2

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.


Quedarse sin combustible solo representa un parámetro descendente. Es simplemente una fuerza vectorial con valor decreciente. ¿Me equivoco? En un caso simple, tienes G contra F, donde F es el motor del cohete y G la gravedad de la tierra: en este caso simplemente tienes que medir ambos uno contra el otro, por lo que si no queda combustible F cae a 0, por lo que solo tiene que aplicar G como fuerza vectorial a su objeto. Funciona para todos los valores de F. Mientras F> = G el objeto "debería" moverse en dirección a F.
daemonfire300

2
@ daemonfire300: Usted no comprende - no estoy hablando del efecto de quedarse sin combustible, sino del efecto de quemar combustible. Un ajuste constante del acelerador en su motor produce una cifra de aceleración que sube continuamente, una aceleración constante produce una tasa de consumo de combustible en continuo descenso. Esto significa que los cálculos simples que da FxIII producirán números de uso de combustible incorrectos.
Loren Pechtel

La cantidad de ganancia de aceleración de A = F / M a medida que se quema el combustible será un valor insignificante a menos que la proporción de masa de combustible al vehículo sea absurdamente alta o la tasa de consumo de combustible sea similarmente alta. Este es un juego, después de todo.
Patrick Hughes

@Patrick Hughes: La cantidad de combustible transportada por cualquier verdadero lanzador de cohetes (no estoy contando los casos híbridos de aerofreno / cohete de Marte) es una parte sustancial de su peso total. Suponiendo que el combustible: la relación de aceleración sea fija, producirá una respuesta muy incorrecta.
Loren Pechtel

1
Esta no es una respuesta a la pregunta, solo un comentario sobre la respuesta de @ FxIII.
Jonathan Connell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.