Tengo objetos estáticos y objetos móviles. Las colisiones se detectan utilizando el teorema del eje de separación.
Por ejemplo, en esta situación tengo dos objetos estáticos (en rojo):
y un objeto móvil entre los dos:
Mi algoritmo puede calcular la colisión entre dos de estos objetos, y también escupe un vector de resolución perfecta (es decir, un vector de desplazamiento mínimo) a la colisión.
Entonces, por ejemplo, cuando verifico la colisión entre el rectángulo verde y el rectángulo rojo derecho, el algoritmo escupe un vector que me dice cómo necesito mover el rectángulo verde para resolver la colisión:
Tenga en cuenta que acabo de dibujar esto rápidamente en MSPaint, por lo que en esa imagen podría ser que el vector de traducción mínima empuje el rectángulo verde en la parte superior, pero voy a suponer aquí que empujarlo hacia la izquierda / derecho es en realidad más corto.
La forma general de abordar esto sería resolver solo la colisión de una colisión por cuadro, en lugar de todas a la vez. Pero en mi caso, esto resultaría en un flip-flop:
Primero, el solucionador detecta dos colisiones pero solo resuelve la colisión entre el rectángulo derecho y el rectángulo verde:
Luego, en el siguiente cuadro, detecta solo una colisión que se encuentra entre el rectángulo rojo izquierdo y el rectángulo verde, y lo resuelve:
Como puede ver, esto en realidad no resuelve la colisión (por ejemplo, empujando el rectángulo verde hacia la parte superior), y en su lugar simplemente cambia las chanclas entre los dos estados infinitamente.
¿Como puedo resolver esto?