Advanced Games Physics
Inhaltsverzeichnis zum
Inhalt

Kollisionserkennung

Kollisionsbehandlung mit nachträglicher Korrektur

Nachträgliche Korrektur des Stoßortes

Eine andere Möglichkeit der Kollisionserkennung arbeitet mit einer Korrektur des Objektortes nach dem Stoß. Es liegt also eine Kollisionsbehandlung mit nachträglicher Korrektur vor. Auch hier findet das unter Vektorbasierte Verfahren für Polygone beschriebene Verfahren Anwendung. Wir gehen davon aus, dass die Oberfläche des einen, fixierten und ruhenden Objektes segmentweise approximiert vorliegt und das andere Objekt kugelförmig sei (die Annahme des zweiten Objektes als kugelförmig vereinfacht die folgenden Betrachtungen) und sich bewegt.
Das oben beschriebene Verfahren liefert eine ganze Reihe von Zusatzinformationen. Neben dem Kollisionsort werden der Normalenwinkel β, der Abstand dist zwischen dem kollidierenden Objekt und der Oberfläche des ruhenden Objektes sowie die Art des Kollisionsortes angegeben. So wird das Merkmal konkav zurück gegeben, wenn das kollidierende Objekt auf einem Segment oder zwischen zwei stumpf aneinander stoßenden Segmenten auftrifft bzw. konvex, wenn eine spitze Ecke bzw. ein freies Segmentende getroffen wurde. Diese Informationen werden für die Berechnung der Reflexion des kollidierenden Objektes verwendet.

Die folgenden Überlegungen sind konform zur Behandlung des dezentralen Stosses.
Aus der Bewegung der Kugel ergibt sich der Geschwindigkeitsbetrag v und der Richtungswinkel α der Flugbahn.

()
Formel

Kollision an einem Segment

Abb. Kollision an einem Segment


Woraus sich unter Verwendung des Normalenwinkels β der Ausfallswinkel β - α ergibt, so dass die zentrale, also senkrechte, Geschwindigkeits­komponente vZ und die tangentiale Geschwindigkeits­komponente vT berechnet werden können ():

()
Formel

Geschwindigkeitskomponenten vor der Kollision

Abb. Geschwindigkeitskomponenten vor der Kollision

Im Kollisionsmoment wird die senkrechte Komponente reflektiert, d.h. ihr Vorzeichen umgekehrt, während die tangentiale Komponente unverändert bleibt. So erhalten wir die Geschwindigkeits­komponenten v'Z und v'T nach der Kollision:
()
Formel

Nach der Kollision werden sowohl der Betrag als auch die Richtung der Geschwindigkeit neu berechnet ():
()
Formel

Geschwindigkeitskomponenten nach der Kollision

Abb. Geschwindigkeitskomponenten nach der Kollision

Die Neuberechnung des Geschwindigkeits­betrages nach der Kollision ist eigentlich unnötig, da die Reflexion ja verlustfrei stattfinden soll. In anderen Fällen aber, z.B. bei Verlust behafteter Reflexion oder bei rotatorischem Anteil, ist dies unverzichtbar!
Um nun wieder die x- bzw. y-Komponenten des Ortes zu erhalten, werden die reflektierte zentrale bzw. tangentiale Geschwindigkeits­komponente v'Z- bzw. v'T entsprechend der Winkel umgerechnet:
()
Formel

Ortskorrektur der eingedrungenen Kugel

Abb. Ortskorrektur der eingedrungenen Kugel

Auch hier tritt das ungewünschte "Eindringen" des kollidierenden Körpers in das andere Objekt infolge der zeitlichen Diskretisierung der Bewegungen ein ().
Die hier vorzunehmende Ortskorrektur erfolgt aus Gründen der besseren Überschaubarkeit nach dem Stoß, wenn der Körper bereits in den anderen Körper "eingedrungen" ist. Wenn nämlich die kollidierenden Körper kompliziertere Geometrien als den einfachen Kreis (Kugel) aufweisen, ist die Prognose des theoretischen Kollisionsortes nicht trivial! So errechnen wir jetzt einen Korrekturfaktor für das Zeitintervall dtCorr, der eine nachträglich Rückrechnung des Kollisionsortes erlaubt.
Um dieses "Eindringen" rückgängig zu machen, muss das eingedrungene Objekt auf der Flugbahn zurück gesetzt werden. Wir berechnen darum aus der senkrechten Geschwindigkeitskomponente vZ und der Eindringtiefe distError die erforderliche Zeit, die bei der Geschwindigkeit vZ den Weg distError zurücklegt. Diese Zeit entspricht dem Korrekturwert dtCorr für dan letzten Frame:

()
Formel

Weil wir wieder davon ausgehen können, dass sich die Geschwindigkeit innerhalb eines Intervalls nicht verändert, können schließlich die korrigierten Orte xCorr und yCorr errechnet werden, indem die Ortsberechnung, die zur Kollision geführt hat, rückgerechnet wird:

()
Formel

Im Gegensatz zur Kollisionserkennung mit Ortsprognose kann es hier bei großen Objektgeschwindigkeit v zu Problemen kommen. Die nachträgliche Ortskorrektur funktioniert nur dann richtig, wenn innerhalb eines frames die Ortsveränderung nicht größer als die Objektabmessung in Bewegungsrichtung ist. D.h. v < D · f r m R a t e . Wäre die Geschwindigkeit v größer, könnte unter ungünstigen Umständen das kollidierende Objekt die Oberfläche des getroffenen Objektes "durchdringen" und sich plötzlich im Inneren dieses Objektes befinden. Da das vektorielle Kollisionserkennungs-Verfahren keinen Unterschied zwischen Innen und Außen macht, bliebe das kollidierende Objekt stets auf der jeweils anderen Seite des getroffenen Objektes!


Im Beispielprogramm wird die Wirkung der Ortskorrektur demonstriert. Betätigung des Buttons Corr/noCorr erlaubt das Zu- bzw. Abschalten der Ortskorrektur. Der Button open/close bietet die Auswahl zwischen einer offenen oder einer geschlossenen Kontur. Weiterhin hast Du die Möglichkeit, mit Betätigung des Buttons step/run zwischen Schritt- oder continuierlichen Betrieb zu wählen. Per drag'n drop kann die Kugel im Spielfeld frei bewegt bzw. der Geschwindigkeitsvektor verändert werden. Neben dem Spielfeld werden der Normalenvektor (blau), der Einfallswinkel (braun) und der Ausfallswinkel (grün) dargestellt. So können, insbesondere während des Schrittbetriebs, die Reflexionen nachvollzogen werden.
download processing
download p5.js
run program

Im Schrittbetrieb werden zusätztlich zu den bereits genannten Informationen die Positionen der Kugel vor der Kollision (schwarzer Umriss), im Kollisionsmoment (grüne Vollkugel) und im Folgeschritt (roter Umriss) dargestellt. So können Auswirkungen von kritischen Situationen bei abgeschalteter Ortskorrektur verfolgt werden.

Wie veranschaulicht, kann es bei hohen Objekt­geschwindigkeiten in spitzen konkaven Ecken noch immer dazu kommen, dass es zu fehlerhaften Reflexionen kommen kann. Die Ursache liegt wieder in der diskretisierten Zeitbasis. Dem gefundenen Touchpoint im Zeitpunkt ti entsprechend wird der Ausfallswinkel des Objektes berechnet. Infolge der hohen Objekt­geschwindig­keit wird der Objektort zum Zeitpunkt ti+1 jenseits der Kontur berechnet. So als gäbe es kein angrenzendes Segment, wird von nun an die Objekt­bewegung jenseits der Kontur fortgesetzt.
fehlerhafte Reflexion in konkaven Ecken

Abb. fehlerhafte Reflexion in konkaven Ecken


Dieses Beispielprogramm verfügt über eine erweiterte Auswahl von unterschiedlichen Konturen, die mit dem Button Contour ausgewählt werden können. Weiterhin hast Du die Möglichkeit, mit Betätigung des Buttons step/run zwischen Schritt- oder continuierlichen Betrieb zu wählen. Und wie üblich kannst Du per drag'n drop die Kugel im Spielfeld frei bewegen bzw. den Geschwindigkeitsvektor verändern.

download processing
download p5.js
run program


Zusammenfassung Die Kollisions­erkennung mit Ortskorrektur arbeitet sehr sicher im Bereich normaler Objekt­geschwindigkeiten. Unter normalen Objekt­geschwindig­keiten verstehe ich solche Geschwindig­keiten bei denen der Orts­fortschritt Δs = v·Δt kleiner als die Objekt­abmessungen (also z.B. der Kugel­durch­messer) ist. Bei größeren Geschwindigkeiten und insbesondere an konkaven Ecken kommt es unter ungünstigen Umständen dazu, dass sich Objekte durchdringen und ihren Weg plötzlich auf der jeweils anderen Seite des Polygons fortsetzen.

Zum Vergleich beider Verfahren, Kollisionserkennung mit Ortsprognose und der Kollisionserkennung mit Ortskorrektur, sind hier deren Vor- und Nachteile aufgelistet:


Verfahren Vorteile Nachteile
Orts­prognose
  • Objekt­geschwindigkeit unbegrenzt
  • geringer Rechen­aufwand
  • auf einfache Geometrien beschränkt
Orts­korrektur
  • auch kompliziertere Geometrien (z.B. Polygone) können behandelt werden
  • geringer Rechenaufwand
  • relative Objekt­geschwindigkeit auf Objektlänge·­frmRate beschränkt