J'ai des objets statiques et des objets mobiles. Les collisions sont détectées à l'aide du théorème de l'axe de séparation.
Par exemple, dans cette situation, j'ai deux objets statiques (en rouge):
et un objet mobile entre les deux:
Mon algorithme est capable de calculer la collision entre deux de ces objets, et il crache également un vecteur de résolution parfaite (c'est-à-dire un vecteur à déplacement minimum) à la collision.
Ainsi, par exemple, lorsque je vérifie la collision entre le rectangle vert et le rectangle rouge droit, l'algorithme crache un vecteur qui me dit comment je dois déplacer le rectangle vert pour résoudre la collision:
Remarquez que je viens de dessiner cela rapidement dans MSPaint, donc dans cette image, il se pourrait que le vecteur de traduction minimum pousse le rectangle vert en haut, mais je vais supposer ici que le pousser vers la gauche / le droit est en fait plus court.
La manière générale d'aborder cela serait de résoudre seulement la collision d'une collision par trame, au lieu de toutes à la fois. Mais dans mon cas, cela entraînerait une bascule:
Tout d'abord, le solveur détecte deux collisions mais ne résout que la collision entre le rectangle droit et le rectangle vert:
Ensuite, dans l'image suivante, il ne détecte qu'une seule collision entre le rectangle rouge gauche et le rectangle vert, et le résout:
Comme vous pouvez le voir, cela ne résout pas réellement la collision (par exemple en poussant le rectangle vert vers le haut), et au lieu de cela, bascule simplement entre les deux états à l'infini.
Comment puis-je résoudre ça?