Calcule la posición de un cuerpo acelerador después de un cierto tiempo [cerrado]

StackOverflow https://stackoverflow.com/questions/153507

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Cómo calculo la posición de un cuerpo de aceleración (por ejemplo, un automóvil) después de un cierto tiempo (por ejemplo, 1 segundo)?

Para un cuerpo en movimiento que no se acelera, es una relación lineal, por lo que supongo que para un cuerpo en aceleración implica un cuadrado en algún lugar.

¿Alguna idea?

¿Fue útil?

Solución

La ecuación es: s = ut + (1/2) a t ^ 2

donde s es la posición, u es la velocidad en t = 0, t es el tiempo y a es una aceleración constante.

Por ejemplo, si un automóvil arranca estacionario y acelera durante dos segundos con una aceleración de 3 m / s ^ 2, se mueve (1/2) * 3 * 2 ^ 2 = 6m

Esta ecuación proviene de la integración analítica de las ecuaciones que indican que la velocidad es la velocidad de cambio de la posición, y la aceleración es la velocidad de cambio de la velocidad.

Por lo general, en una situación de programación de juegos, se usaría una formulación ligeramente diferente: en cada cuadro, las variables de velocidad y posición se integran no de forma analítica, sino numérica:

s = s + u * dt;
u = u + a * dt;

donde dt es la longitud de un cuadro (medido usando un temporizador: 1 / 60o segundo). Este método tiene la ventaja de que la aceleración puede variar en el tiempo.

Editar Un par de personas han observado que el método de integración numérica de Euler (como se muestra aquí), aunque el más sencillo de demostrar, tiene una precisión bastante deficiente. Consulte Velocity Verlet (a menudo utilizado en juegos), y Runge Kutta de cuarto orden (un método 'estándar' para aplicaciones científicas) para algoritmos mejorados.

Otros consejos

Bueno, depende de si la aceleración es constante o no. Si es así es simplemente

s = ut+1/2 at^2

Si a no es constante, debe integrarse numéricamente. Ahora hay una variedad de métodos y ninguno de ellos vencerá haciendo esto a mano por precisión, ya que en última instancia son soluciones aproximadas.

El método más sencillo y menos preciso es método de Euler . Aquí se divide el tiempo en partes discretas llamadas pasos de tiempo, y se realiza

v[n] = v[n-1] * t * a[t]

n es un índice, t es el tamaño de un paso de tiempo. La posición se actualiza de manera similar. Esto solo es realmente bueno para aquellos casos donde la precisión no es tan importante. Una versión especial del método de Euler producirá una solución exacta para el movimiento de proyectiles (vea wiki), por lo que si bien este método es burdo, puede ser perfecto para algunas adaptaciones.

El método de integración numérica más común utilizado en juegos y en algunas simulaciones de química es Velocity Verlet , que es una forma especial del método Verlet más genérico. Recomendaría este si Euler es demasiado crudo.

Puedes buscarlo en Google. He encontrado esto: http: // www. ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Pero si no quieres leer, es:

  

p (t) = x (0) + v (0) * t + (1/2) a t ^ 2

donde

  • p (t) = posición en el tiempo t
  • x (0) = la posición en el tiempo cero
  • v (0) = velocidad en el tiempo cero (si no tiene una velocidad, puede ignorar este término)
  • a = la aceleración
  • t = tu itme actual

Suponiendo que se trata de una aceleración constante, la fórmula es:

distancia = (initial_velocity * tiempo) + (aceleración * tiempo * tiempo) / 2

donde

distancia es la distancia recorrida

initial_velocity es la velocidad inicial (cero si el cuerpo está inicialmente en reposo, por lo que puede eliminar este término en ese caso)

tiempo es el tiempo

aceleración es la aceleración (constante)

Asegúrese de utilizar las unidades adecuadas al calcular, es decir, metros, segundos, etc.

Un muy buen libro sobre el tema es Física para desarrolladores de juegos .

Suponiendo una aceleración constante y una velocidad inicial v0,

x(t) = (1/2 * a * t^2) + (v0 * t)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top