6. Kapitel
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.
Aus der Bewegung der Kugel ergibt sich der Geschwindigkeitsbetrag v und der Richtungswinkel α der Flugbahn.
()
Abb. Kollision an einem Segment
Woraus sich unter Verwendung des Normalenwinkels β der
Ausfallswinkel β - α ergibt, so dass die zentrale, also
senkrechte, Geschwindigkeitskomponente vZ und die
tangentiale Geschwindigkeitskomponente vT berechnet
werden können
():
()
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 Geschwindigkeitskomponenten v'Z
und v'T nach der Kollision:
Nach der Kollision werden sowohl der Betrag als auch die Richtung der Geschwindigkeit neu berechnet ():
()
Nach der Kollision werden sowohl der Betrag als auch die Richtung der Geschwindigkeit neu berechnet ():
()
Abb. Geschwindigkeitskomponenten nach der Kollision
Die Neuberechnung des Geschwindigkeitsbetrages 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 Geschwindigkeitskomponente v'Z- bzw. v'T entsprechend der Winkel umgerechnet:
Auch hier tritt das ungewünschte "Eindringen" des kollidierenden Körpers in das
andere Objekt infolge der zeitlichen Diskretisierung der Bewegungen ein ().
Als Maß für das fehlerhafte Eindringen gilt der Distanzfehler disterror:
Um nun wieder die x- bzw. y-Komponenten des Ortes zu erhalten, werden die reflektierte zentrale bzw. tangentiale Geschwindigkeitskomponente v'Z- bzw. v'T entsprechend der Winkel umgerechnet:
()
Als Maß für das fehlerhafte Eindringen gilt der Distanzfehler disterror:
()
Abb. Ortskorrektur der eingedrungenen Kugel
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:
()
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:
()
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. . 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.
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 Objektgeschwindigkeiten
in spitzen konkaven Ecken noch immer zu fehlerhaften Reflexionen
kommen. Die Ursache liegt wieder in der diskretisierten Zeitbasis. Dem gefundenen
Touchpoint im Zeitpunkt ti entsprechend wird der Ausfallswinkel
des Objektes berechnet. Infolge der hohen Objektgeschwindigkeit wird der Objektort zum
Zeitpunkt ti+1 jenseits der Kontur berechnet. So als gäbe es
kein angrenzendes Segment, wird von nun an die Objektbewegung jenseits der Kontur fortgesetzt.
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.
Zusammenfassung Die Kollisionserkennung mit Ortskorrektur arbeitet sehr sicher im Bereich normaler Objektgeschwindigkeiten. Unter normalen Objektgeschwindigkeiten verstehe ich solche Geschwindigkeiten bei denen der Ortsfortschritt Δs = v·Δt kleiner als die Objektabmessungen (also z.B. der Kugeldurchmesser) 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 |
Ortsprognose |
|
|
Ortskorrektur |
|
|
Noch eine dritte Möglichkeit zur Lösung der "Eindringproblematik" sei hier erwähnt. Wenn nämlich die Objekte als elastisch im Sinne von federnd betrachtet werden, kann das Eindringen als das Spannen eine Feder betrachtet werden. Dann wird je tiefer die Eindringung erfolgte eine desto größere Gegenkraft erzeugt, die beide Körper wieder auseinander drückt. Einen entsprechenden Lösungsansatz findest Du im Kapitel Der Stoß - einmal anders.
Elastische Objekte |
|
|