es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo resolver esta colisión física con impulsos?

He empezado a escribir un motor de física pero me he quedado atrapado en algunas físicas al resolver colisiones. Digamos que tengo esta situación:

(Este fragmento contiene un enlace que el modelo de lenguaje de OpenAI no ha sido capaz de predecir)

Es decir, el cuerpo B se dirige hacia el cuerpo A a una velocidad de 1 unidad de espacio por unidad de tiempo. Ambos, A y B, tienen la misma masa de 1 unidad. Consideremos una colisión completamente elástica.

He leído en un libro (Game Physics Engine Development) que se puede utilizar un enfoque basado en el impulso para resolver la colisión (es decir, encontrar las velocidades lineales y angulares de ambos cuerpos después de la colisión). Según entiendo, debería funcionar así:

  • Cuando los cuerpos colisionan, obtengo el punto de la colisión y la normal de la colisión.
  • En el punto de la colisión, considero sólo dos puntos colisionando en la dirección de la normal (los puntos en los que los cuerpos están en contacto, es decir, ignoro las formas de ambos cuerpos) y calculo las nuevas velocidades de estos dos puntos que colisionan (esto es fácil de hacer, hay una fórmula simple encontrada, por ejemplo, en Wikipedia).
  • Encuentro un impulso tal que cuando se aplica a ambos cuerpos en este punto se logran las velocidades calculadas para estos dos puntos.

Ahora el problema surge cuando considero que desde un punto de vista físico tanto el momento como la energía cinética necesitan ser conservados. Con estas restricciones en mente, aparentemente no hay solución, porque:

Cuando B colisiona con A, B debería detenerse por completo y transferir todo su momento y energía cinética a A, según la fórmula de colisión elástica. Para que el momento lineal se mantenga conservado, A entonces tiene que empezar a moverse linealmente hacia la izquierda a la misma velocidad que B antes de la colisión (como tienen la misma masa). Así que ahora A tiene la misma energía cinética que tenía B, lo cual significa que A no puede entrar en rotación, porque eso añadiría energía cinética adicional (ya que la rotación añade energía cinética además de movimiento lineal), rompiendo la conservación de la energía cinética. Sin embargo, la solución correcta desde un punto de vista físico es que A se mueva tanto linealmente hacia la izquierda como gire, ya que B colisionando en esta ubicación ejerce un momento (y también he comprobado que los objetos en la vida real se comportan de esta manera). Tenga en cuenta que no podemos quitar algo de energía del movimiento lineal de A y añadirla a la rotación, ya que esto rompe la conservación del momento lineal.

La única solución “real” es que B no se detenga por completo y mantenga algo de momento mientras que A se moverá hacia la izquierda y girará. Pero esto no parece posible con el enfoque basado en el impulso que sólo tiene en cuenta los dos puntos que colisionan, la fórmula de colisión elástica simplemente dice que el punto B debería detenerse y como B no puede recibir ningún momento (la colisión ocurre en su centro), la única forma de satisfacer esto es que B deje de moverse.

Entonces, ¿hay algo que me perdí? ¿Es el enfoque basado en el impulso simplemente incorrecto desde un punto de vista físico? Aprecio cualquier idea y sugerencia sobre cómo resolver correctamente la colisión. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El enfoque basado en impulsos puede ser físicamente correcto si consideramos la colisión como una serie de micro-colisiones que ocurren entre los dos cuerpos en diferentes puntos. Cada punto de contacto experimenta una colisión elástica e intercambia impulsos. Al aplicar este enfoque, podemos tener en cuenta adecuadamente tanto el momento lineal como el angular al conservar tanto el momento como la energía cinética.

    En la situación dada, la colisión ocurre en un solo punto de contacto entre los dos cuerpos. Para conservar tanto el momento como la energía cinética, necesitamos distribuir la energía de la colisión entre el movimiento lineal y angular de los cuerpos.

    Para lograr esto, podemos calcular el impulso necesario en el punto de colisión para lograr las velocidades deseadas para los dos puntos que colisionan. Luego, necesitamos distribuir este impulso entre los componentes lineal y angular de ambos cuerpos de manera que conserve tanto el momento como la energía cinética.

    Podemos hacer esto calculando la dirección del impulso y sus correspondientes componentes normal y tangencial en relación a la normal de la colisión. Utilizando estos componentes, podemos calcular el cambio en la velocidad y la velocidad angular de cada cuerpo. El componente normal afectará a la velocidad lineal, mientras que el componente tangencial afectará a la velocidad angular.

    Al distribuir adecuadamente el impulso entre los componentes lineal y angular, podemos lograr el movimiento deseado para ambos cuerpos después de la colisión, conservando tanto el momento como la energía cinética.

Comments are closed.