Estoy tratando de implementar un sistema de colisión en un juego 2D que estoy haciendo. El teorema del eje de separación (como se describe en el tutorial de colisión de metanet ) parece una forma eficiente y robusta de manejar la detección de colisión, pero no me gusta el método de respuesta de colisión que utilizan. Al desplazarse ciegamente a lo largo del eje de menor superposición, el algoritmo simplemente ignora la posición anterior del objeto en movimiento, lo que significa que no choca con el objeto estacionario tanto como entra y luego rebota.
Aquí hay un ejemplo de una situación en la que esto sería importante:

De acuerdo con el método SAT descrito anteriormente, el rectángulo simplemente saldría del triángulo perpendicular a su hipotenusa:

Sin embargo, de manera realista, el rectángulo debe detenerse en la esquina inferior derecha del triángulo, ya que ese sería el punto de la primera colisión si se moviera continuamente a lo largo de su vector de desplazamiento:

Ahora, esto podría no importar realmente durante el juego, pero me encantaría saber si hay una manera de lograr de manera eficiente y generalmente desplazamientos precisos de esta manera. ¡Me he estado estrujando el cerebro durante los últimos días, y aún no quiero rendirme!
(Publicación cruzada de StackOverflow, ¡espero que eso no esté en contra de las reglas!)
Paso 1: Para cada polígono, encuentre los dos puntos más lejanos a lo largo de la proyección de ese polígono en la línea perpendicular al vector de movimiento.
Paso 2: Divida cada polígono a lo largo de la línea que conecta estos puntos. La mitad del polígono que se enfrenta al otro polígono a lo largo del vector de movimiento es el "casco delantero". Esta es la única parte del polígono que posiblemente puede colisionar.
Paso 3:Proyecte un vector desde cada punto en el "casco delantero" de cada polígono a lo largo del vector de movimiento hacia el polígono opuesto, y verifique la intersección con cada borde del "casco delantero" del polígono opuesto. (Posiblemente lento, pero las computadoras son bastante rápidas hoy en día, ¿verdad?) (Perdón por la flecha inclinada. Todas las flechas deben ser paralelas).
Paso 4: Tome el vector más corto. Esta es la distancia exacta de colisión.
Paso 5: ¡Voila!
