Estoy desarrollando un juego 2D que incluye colisiones entre muchos discos. Me gustaria saber como puedo obtener el angulo correspondiente a la nueva direccion de cada disco. Para cada disco tengo esta información: dirección (entero), velocidad (flotante) y posición ( ; , que son ambos números enteros).
Por supuesto, sé que la nueva dirección será la opuesta a donde ocurre la colisión (el disco golpeado en la parte inferior izquierda irá a la parte superior derecha), pero no sé cómo calcular exactamente el nuevo ángulo.
En el caso ideal donde la colisión es instantánea y solo hay un único punto de contacto, las fuerzas experimentadas por cada objeto solo pueden ser a lo largo de la línea que conecta los centros y pasa por el punto de contacto. En realidad, la "fuerza" será infinita, pero impartirá un impulso finito (es decir, un cambio en la cantidad de movimiento) durante el intervalo de tiempo infinitesimal durante el cual ocurre la colisión. No puede haber componente de impulso ortogonal a esto, porque eso equivaldría a una "fuerza" tangencial al círculo. Con cualquier coeficiente de fricción finito, no puede afectar un círculo empujando la tangente a él en solo un punto.
Esta restricción, junto con la conservación de la cantidad de movimiento en dos direcciones y la conservación de la energía, es suficiente para determinar el movimiento de ambos círculos dadas las condiciones iniciales (que necesitan 4 escalares para definirse por completo).
Si el círculo objetivo está inmóvil antes de la colisión, su dirección de movimiento posterior es bastante fácil de encontrar: está exactamente a lo largo de la línea que conecta los centros de los dos círculos en el momento del contacto. (Asegúrese de seguir el camino correcto a lo largo de esta línea; solo una de las direcciones es sensata). a él en la colisión. Si quiere números, diga que el círculo en movimiento hace contacto cuando su centro está en , y el otro centro está en . Entonces el ángulo en el que 2 se aleja de la colisión es
Por supuesto, si desea llevar esto al siguiente nivel de realismo, es posible que deba tener en cuenta los siguientes efectos:
Finalmente, para la precisión numérica, sugiero mantener todos los números como flotantes en los cálculos y solo redondear a los enteros más cercanos al renderizar.
usuario10851
Robar
N. Virgo