Ich habe statische und bewegliche Objekte. Die Kollisionen werden mit dem Trennachsensatz erfasst.
In dieser Situation habe ich zum Beispiel zwei statische Objekte (in rot):
und ein bewegliches Objekt zwischen den beiden:
Mein Algorithmus ist in der Lage, die Kollision zwischen zwei dieser Objekte zu berechnen und spuckt außerdem einen Vektor mit perfekter Auflösung (dh einen Vektor mit minimaler Verschiebung) aus.
Wenn ich zum Beispiel die Kollision zwischen dem grünen und dem rechten roten Rechteck überprüfe, spuckt der Algorithmus einen Vektor aus, der mir sagt, wie ich das grüne Rechteck verschieben muss, um die Kollision aufzulösen:
Beachten Sie, dass ich dies in MSPaint gerade schnell gezeichnet habe, so dass es in diesem Bild tatsächlich sein kann, dass der Minimum-Übersetzungsvektor das grüne Rechteck oben herausdrückt, aber ich gehe hier davon aus, dass es nach links herausdrückt / rechts ist eigentlich kürzer.
Der allgemeine Weg, dies zu erreichen, besteht darin, nur die Kollision einer Kollision pro Frame aufzulösen, anstatt alle auf einmal. In meinem Fall würde dies jedoch zu Flip-Flops führen:
Zunächst erkennt der Solver zwei Kollisionen, löst jedoch nur die Kollision zwischen dem rechten und dem grünen Rechteck auf:
Im nächsten Frame erkennt es dann nur eine Kollision zwischen dem linken roten und dem grünen Rechteck und löst sie auf:
Wie Sie sehen, wird die Kollision dadurch nicht behoben (z. B. indem das grüne Rechteck nach oben gedrückt wird), sondern es werden einfach die Flops unendlich zwischen den beiden Zuständen gewechselt.
Wie kann ich das lösen?