1 votos

Relaciones de posición, velocidad y aceleración

Hoy hemos enseñado a nuestro profesor de física nuestro código para un motor de física básico.

Nos dijo que este fragmento de código es incorrecto:

 float sumX = AccelerationOnXAxis;
 float sumY = AccelerationOnYAxis;

 velocity += new Vector2(sumX, sumY) * delta;

 Position += velocity * delta;

Donde delta es el tiempo delta entre dos fotogramas (normalmente 1/60).

Como nuestro profesor no es tan bueno explicando, se limitó a murmurar algo con la ecuación de la aceleración / 2.

¿Alguna idea de lo que hicimos mal y de lo que quiso decir?

Gracias de antemano.

2voto

Clive Puntos 1295

Sospecho que tu profesor le echó un vistazo muy rápido, y no se dio cuenta de que estabas usando timesteps. Cuando trabajas con timesteps estás haciendo una aproximación discreta de las ecuaciones diferenciales que describen las relaciones, a saber:

$\frac{dv}{dt} = a$ y $\frac{dx}{dt} = v$

que en la forma discreta, y ordenada para que coincida con su código, se convierten en:

$\Delta v = a \Delta t$ y $\Delta x = v \Delta t$

(Léase en voz alta como: "El cambio en $v$ es igual a $a$ veces el cambio en $t$ ".) Esto será exactamente correcto en el límite donde $\Delta t$ es infinitesimal (como la forma de la ecuación diferencial). Acumulará desviaciones de la respuesta exacta siempre que $\Delta t$ es grande. (Una clase común de problemas con simulaciones basadas en pasos de tiempo).

Probablemente estaba pensando en las ecuaciones de aceleración constante, donde se reordena el primer conjunto de ecuaciones para hacer:

$dv = a dt$ que después de integrar ambos lados se convierte en $v = a t + v_0$

Entonces, utilizando la segunda ecuación se obtiene $dx = (a t + v_0) dt$ que después de integrarlo se convierte en $x = \frac{1}{2}at^2 + v_0 t + x_0$ que es la ecuación normal del movimiento bajo aceleración constante. Tiene la $\frac{1}{2}$ y te da la posición en cualquier punto del tiempo sin calcular las posiciones de los tiempos intermedios. Como puedes ver, las dos expresiones son idénticas si la aceleración es constante ya que una deriva de la otra. Esencialmente lo que estás haciendo en la versión de pasos de tiempo es hacer las dos integrales numéricamente. Esto tiene la desventaja de que se acumulan pequeñas inexactitudes, pero tiene la ventaja de que la aceleración puede cambiar en cada paso de tiempo.

(Técnicamente hay un pequeño error en su código tal y como se ha publicado. Escribiste, "sumY = AccelerationOnXAxis" que mezcla Y y X. Pero la respuesta se mantiene si eso se arregla).

0voto

Lodle Puntos 5070

$s = v \cdot t$ sólo es cierto si $v$ se mantiene constante. Si $v$ cambia con el tiempo, la relación adecuada es $$ s(t) = \int_{t_0}^{t} v(t') \mathrm dt'$$ Para $v = a \cdot t$ con una aceleración constante $a$ esto se convierte en $$ s = \frac{1}{2} a t^2 $$ Así, en lugar de calcular la posición a partir de la velocidad, podrías calcularla a partir de la aceleración directamente.

0voto

StasK Puntos 19497

Su solución es correcta al nivel de su curso. No vemos qué más hay en tu código, así que podría haber otro problema. Sólo puedo adivinar lo que quiere decir con "aceleración / 2". Tal vez no leyó su programa con suficiente atención; podría haber estado esperando una solución que implica $1/2 a t^2$ y cuando no lo vio, siguió adelante.

Su solución no conserva la energía, pero la desviación de la conservación exacta será muy pequeña, e imperceptible a menos que se ejecute durante mucho tiempo y/o se compare la energía con una solución exacta. Dudo que tu profesor se refiera a esto, pero nunca se sabe. Personalmente, no le daría mucha importancia a esta cuestión tan pequeña.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X