Orientierung eines Vektors bezüglich Objekt
-
Ich habe ein Viereck (nicht zwingend Quadrat, aber oft) das natürlich durch 4 Ortsvektoren beschrieben wird.
Durch diese 4 Vektoren kann ich mir natürlich die jeweiligen Seiten als auch deren Normalenvektoren berechnen.
Und nun möchte ich rausfinden, ob diese Normalenvektoren ins Viereck "rein orientiert" sind, oder vom Viereck weg.
Wie mache ich das, ohne ausrechnen zu müssen welche Seiten genau miteinander kollidieren (rechenzeitaufwendig)?
P.S: Sinn und Zweck der Sache für Leute die Kollision mittels Separating Axis Theorem schonmal umgesetzt haben:
Ich prüfe die Kollisionen zweier Vierecke mithilfe des Separating Axis Theorems. Das klappt prima, aber zusätzlich möchte ich nun die Überlappungen der Projektionen, die man für den Test durchführt, dazu benutzen um den kürzesten Verschiebungsvektor zu finden um die beiden Vierecke wieder voneinander zu trennen.
Der kürzeste Verschiebungsvektor ergibt sich dabei natürlich einfach aus der kleinsten Überlappungen multipliziert mit der normierten Achse, auf die ich teste.
Das Problem: Da jeweils 2 der getesten Achsen bei beiden Vierecken immer gleich sind, ist die Projektion der Vierecke auf diese Achse natürlich identisch. Das bedeutet, dass die Überlappungen gleich sind. Das führt dazu, dass der Algorithmus, den ich im Moment benutze, zweimal die gleichen Verschiebungsvektoren für 2 verschiedene Kollisionsmöglichkeiten ausrechnet.
Ohne Bild ist das schwer zu beschreiben, aber sagen wir mal so: Grundlegend gibts ja nur 4 Verschiebemöglichkeiten, nämlich einfach immer entlang der jeweiligen Seite an dem die Vierecke zusammenstoßen. Und wenn meine beiden Vierecke jetzt auf einer Seite kollidieren, bekomme ich den gleichen Verschiebungsvektor raus, wie wenn das eine Viereck mit der gegenüberliegenden Seite, was natürlich unkorrekt ist.
-
hmm... meint ihr es ist ne gute idee die repräsentation des vierecks ein winziges bisschen zu verfälschen um die achsen einfach unterschiedlich zu machen? (und die projektionen somit auch).
z.B. indem man auf eine komponente jedes vektors der vier eckpunkte nach und nach 0.0001
-0.0001
0.0002
-0.0002oder ähnliche werte aufaddiert.
Das sollte doch keine Genauigkeitsprobleme in Spielen erzeugen, oder?