Advanced Games Physics
Inhaltsverzeichnis zum
Inhalt

Stoßgesetze

Der elastische Stoß zwischen mehr als zwei Objekten

Eine Näherungslösung

Auf den ersten Blick scheint die Umsetzung eines Billardspiels nur eine mehrfache Anwendung des "dezentralen Stoßes" zwischen zwei Körpern zu sein. Aber das ist leider nicht so. Denn der elastische Stoß zwischen mehr als zwei Objekten bleibt sicherlich nicht aus, wenn sich meherere Kugeln auf dem Spielfeld befinden. Sicher passiert das nicht allzu oft, doch muss über diesen Fall nachgedacht werden.

In siehst Du einen solchen außerordentlichen Fall: Drei Kugel kommen aus unterschiedlichen Richtungen mit unterschiedlichen Geschwindigkeiten und kollidieren miteinander. Wollen wir entsprechend der und den Impuls- und den Energieerhaltungssatz für das Drei-Körper-Problem aufstellen. Es gelten wieder:
Formel
Formel

Da dieses Geschehen sehr komplex zu werden scheint, sollten wir mit einem übersichtlicheren Fall () beginnen.
Drei Körper kollidieren

Abb. Drei Körper kollidieren

Der Impulserhaltungssatz für drei Körper fordert, dass
()
Formel
und der Energieerhaltungssatz, dass
()
Formel
sowohl die Summe der Impulse, als auch die Summe der Energien vor und nach dem Stoß gleich sein müssen.

Nun sehen wir schon, wo der Hase im Pfeffer liegt! Wie haben drei Unbekannte v'1, v'2 und v'3, aber nur zwei Bestimmungsgleichungen, nämlich den Impulserhaltungssatz und den Energieerhaltungssatz. Damit kann das Drei-Körper-Problem allgemein nicht gelöst werden! Die Lage verbessert sich auch nicht, wenn - wie beim Billard - alle Kugeln die gleiche Masse m aufweisen.

Ein Ausweg bietet sich, wenn der Ablauf des Stoßes nicht auf einen unendlich kleinen Zeitabschnitt beschränkt wird, sondern, wie auch im realen Geschehen, eine endliche Zeitspanne in Anspruch nimmt. Dann nämlich können die zusammenstoßenden Körper deformiert werden, was die Anwendung von Feder-Masse-Systemen auf die zusammenstoßenden Körper erlaubt. So können die Abläufe während des Stoßes durch Differentialgleichungen beschrieben werden.

Idealisierte 3-Körper Stoßsituation

Nur, wenn es gelingt, die Anzahl der Unbekannten auf zwei zu reduzieren, können wir eine Lösung angeben. Dies ist der Fall, wenn es eine Symmetrie in den Bewegungen von zwei der drei am Stoß beteiligten Kugeln in Bezug auf die dritte Kugel gibt. Der besseren Übersichtlichkeit wegen, wollen wir uns zunächst auf den in dargestellten Idealfall beschränken.

Ideal weil,
  1. die Richtungen der betragsgleichen Geschwindig­keits­vektoren v2 und v3 mit den Richtungen der Zentrallinien der zusammen­stoßenden Kugeln übereinfallen,
  2. Kugel 1 sich parallel zur x-Achse bewegt
  3. und
  4. alle Kugeln im Augenblick des Zusammen­stoßes symmetrisch zur x-Achse angeordnet sind.


Dann haben wir die folgende Situation:
  1. die Einfallswinkel der Kugeln 2 und 3 (β2 und β3) bezüglich der Richtung, in der sich die Kugel 1 bewegt, sind gleich groß, haben aber entgegengesetzte Vorzeichen,
  2. die Beträge der Vektoren v2 und v3 sind gleich groß
  3. und
  4. die vertikalen Komponenten der Impulse m·vy2 und m·vy3 heben sich im Stoßmoment auf, da sie ja gleich groß sind, aber entgegengerichtet wirken. Daher wirken nur die horizontalen Komponenten!

Symmetrisches Drei-Körper-Problem

Abb. Symmetrisches Drei-Körper-Problem
Und schließlich, das geht aus dem 3. Punkt hervor, müssen die Ausfallswinkel der Vektoren v2 und v3 wieder symmetrisch sein, weil die Stöße jeweils ausschließlich zentral sind, daher müssen die Ausfallswinkel gleich den Einfallswinkeln sein.

Berücksichtigen wir die mathematisch positiven Winkelbezüge, erhalten wir die wahren Winkel für die Stoßberechnung:
()
Formel
Und unter Berücksichtigung der Gleichheit aller Massen und der Tatsache, dass nur die horizontalen Komponenten der Impulse wechselwirken, kann der Impulserhaltungssatz () vereinfacht so geschrieben werden:
()
Formel
Nun berücksichtigen wir noch die Symmetrie-Bedingungen und erhalten dadurch:
()
Formel
Geistesblitz
on/off


umsortieren
()
Formel
Analog gilt für den Energieerhaltungssatz () nach dem Umsortieren:
()
Formel
Auflösen der Quadrate nach der 3. Binomischen Formel
()
Formel
Jetzt wird der erste Faktor in durch ersetzt:
()
Formel
Nach dem Kürzen der übereinstimmenden Faktoren verbleibt:
()
Formel
Nun werden wieder die bekannten von den unbekannten Größen getrennt
()
Formel
ebenso wird mit verfahren. Dadurch erhalten wir die erforderlichen zwei Bestimmungsgleichungen für die drei (eigentlich ja nur zwei!) unbekannten Größen v'1, v'2 und v'3 = v'2:
()
Formel
und bilden nun das Gleichungssystem, das mit Hilfe der CRAMERschen Regel nach den Unbekannten aufgelöst wird:
()
Formel
bzw.
()
Formel
schließlich
()
Formel
bzw.
()
Formel
liefert damit auch den Wert für v3 = v2 und liefern die Beträge der Geschwindigkeiten, nicht deren Vektoren! Diese können erst über die Einführung der Winkel α1 = 0 und β2 bzw. β3 gebildet werden.

Bitte einen Augenblick Geduld
während das Programm geladen wird!

Abb. Dezentraler Stoß - Schrittbetrieb

zeigt die symmetrische Stoßsituation für 3 Körper. Die Geschwindigkeiten v2 = v3 des Paares B2, B3 können in Relation zur Geschwindigkeit v1 der Kugel B1 mittels Schieberegler verändert werden. Damit es hier in der Demo immer zu einem symmetrischen Zusammenstoß kommt, werden die Startorte der Kugeln B2, B3 nach einer Geschwindigkeitsänderung automatisch angepasst.
Die typische Anfangssituation bei einem Billard-Spiel ist die, dass die Kugeln B2, B3 in Ruhe sind und nur die Kugel B1 in Bewegung ist.

Verallgemeinerung des 3-Körper-Problems

Wie zeigt, kann der oben beschriebene, sehr spezielle, Sonderfall () etwas allgemeiner gefasst werden. Denn es kommt ja beim Stoß nicht auf die Symmetrie der beiden Vektoren v2 und v3, sondern auf die Symmetrie ihrer Zentralkomponenten v2Z bzw. v3Z an. Für diese gelten die strengen Symmetriebedingungen wie oben formuliert. Daher gilt jetzt :
()
Formel
Fallen die Geschwindigkeitsvektoren v2 bzw. v3 nicht mit den Zentrallinien überein, dann müssen die Geschwindigeitsvektoren, so wie in Abschnitt Zwei Objekte stoßen aus beliebigen Richtungen aneinander beschrieben, in ihre Zentral- und Tangentialkomponenten v2Z und v2T bzw. v3Z und v3T zerlegt werden.
()
Formel
und
()
Formel
Verallgemeinertes Drei-Körper-Problem

Abb. Verallgemeinertes Drei-Körper-Problem
Wie aus und zu ersehen ist, muss jetzt auch zwischen den Richtungen der Geschwindigkeitsvektoren und denen der Zentrallinien unterschieden werden. Daher müssen die Gleichungen und entsprechend modifiziert werden:
()
Formel
und
()
Formel
Da die tangentialen Geschwindigkeitskomponenten beim Stoß unverändert bleiben, werden die Beträge bzw. die Ausfallswinkel der reflektierten Kugeln zu
()
Formel
bzw.
()
Formel
woraus schließlich die Geschwindigkeitskomponenten in kartesischen Koordinaten (vergleiche ) berechnet werden:
()
Formel
bzw.
()
Formel


Bitte einen Augenblick Geduld
während das Programm geladen wird!

Abb. Erweiterter dezentraler Stoß - Schrittbetrieb

Zusätzlich zu der in gezeigten Anordnung, besteht in diesem Beispiel die Möglichkeit, die Richtung α2 des Geschwindigkeitsvektors v2 mit Hilfe eines weiteren Schiebereglers zu verändern. Aber auch in werden die Startorte der Kugeln B3 und B2 der vorgegebenen Startgeschwindigkeit v3 und der Startgeschwindigkeit sowie der Richtung des Geschwindigkeitsvektors v2 angepasst, so dass ein Zusammenstoß aller drei Kugeln gewährleistet ist und die Beträge der zentralen Geschwindigkeitskomponenten v3Z = v2Z gleich groß sind. Im Unterschied zu liegt hier also keine streng symmetrische Anordnung vor, sondern nur in Bezug auf die Zentralkomponenten v2Z bzw. v3Z. Dadurch wird der Eindruck der Asymmetrie erweckt, der aber auch nur ein Sonderfall ist.

Das bisher betrachtet Szenarium entspricht der Situation zu Beginn einer Billardrunde. Dabei läuft die stoßende Kugel unter einem Winkel α1 = 0° auf die als Dreieck angeordnete Restmenge der Billardkugeln zu. Ein Erweiterung auf beliebig orientierte symmetrische Anordnungen ist möglich und wird in angedeutet.
gibt die Winkelverhältnisse wider, wie sie bei beliebig orientierten symmetrischen Anordnungen auftreten.
()
Formel
daraus folgt
()
Formel
 rotiertes symmetrisches Drei-Körper-Problem

Abb. Rotiertes symmetrisches Drei-Körper-Problem

Das Tripel bezieht sich hier auf den Einfallswinkel α1 der ersten Kugel B1. Der Rotationswinkel ε ergibt sich dann als Ergänzungswinkel zum Einfallswinkel α1. Für die weiteren Rechenschritte verweise ich hier auf die und folgende.

Achtung! Auch diese Verallgemeinerung ist keine Lösung für das Drei-Körper-Problem! Für eine eindeutige Lösung für drei Unbekannte, sind drei unabhängige Gleichungen erforderlich! Diese stehen aber nicht zur Verfügung, es können also immer nur Spezialfälle des Drei-Körper-Problems gelöst werden!

Pragmatische Annäherung an das 3-Körper-Problem

Da eine analytische Lösung prinzipiell unmöglich ist, bleibt nur eine Lösung, die funktioniert, also keine Programmabstürze verursacht und der Energie-Erhaltungssatz nicht verletzt. Unter Berücksichtigung der Energierhaltung und der Tatsache, dass alle Kugeln die gleiche Masse haben, werden die zentralen Geschwindigkeiten nach dem Stoß so verteilt, wie es gefühlt richtig wäre.

()
Formel
Physikalisch ist diese Lösung natürlich falsch! Aber betrachten wir doch ein reales Billardspiel. Bedingt durch die Rollreibung vermindern sich die Geschwindigkeiten der angestoßenen Billardkugeln recht schnell bis zum Stillstand. Damit ist die Wahrscheinlichkeit eines diffusen Zusammenstoßes von drei oder mehr Kugeln sehr gering. Sollte diese Situation aber trotzdem eintreten, dann gibt es wenigstens keinen Programmabsturz und das Spiel kann fortgesetzt werden.

Bitte einen Augenblick Geduld
während das Programm geladen wird!

Abb. Pragmatisch erweiterter dezentraler Stoß - Schrittbetrieb

In der in gezeigten Anordnung, wird nun die Geschwindig­keit v2 abweichend von der Geschwindig­keit v3 mit Hilfe eines weiteren Schiebe­reglers eingestellt. Wieder werden die Start­orte der Kugeln B3 und B2 den vorge­gebenen Start­geschwindig­keiten v2 und v3 sowie der Richtung des Geschwindig­keits­vektors v2 angepasst, so dass ein Zusammen­stoß aller drei Kugeln gewähr­leistet ist. Die Beträge der zentralen Geschwindig­keits­komponenten v3Z = v2Z sind nun aber nicht mehr gleich groß! Im Unterschied zu den voran gegangenen Beispielen ist infolge der will­kürlichen Fest­legung der Geschwindig­keiten nach dem Stoß nur noch der Energie-Erhaltungs­satz erfüllt, der Impuls-Erhaltungs­satz wird jedoch verletzt!

Das hier vorgestellte Beispiel­programm arbeitet mit dieser Behelfs­lösung. Unser Beispiel­programm simuliert eine Billard­situation mit mehreren Kugeln. Mit den Buttons vert, hori bzw. tria kann die Anordnung der Kugeln ausgewählt werden. An der ausge­zeichneten Kugel 0 befindet sich ein Vektor, mit dem Richtung und Betrag der Start­geschwindig­keit mit der Maus eingestellt werden können.
Wird der START-Button betätigt, rollt die Kugel mit der Nummer 0 auf den Haufen los. Damit die Kugel­bewegungen und Kollisionen gut beobachtet werden können, gibt es keine Rollreibung. D.h. die Gesamt­energie bleibt fortwährend gleich groß!
download processing
download p5.js
run program
Mit den Buttons STEP und NEXT kann das Geschehen schrittweise verfolgt werden. Bei jeder Kollision wird die Bewegung angehalten, mit NEXT fortgesetzt. Die links stehende Anzeige dient der Kollisionskontrolle. Es werden für jede Kugel die Anzahl der Kollisionspartner, die Nummer des Initiators und die Nummern der Parner angegeben. Gleichzeitig wir zu jedem Paar die relative Distanz angegeben.

In einem solch komplexen Szenarium müssen stets alle N Kugeln unter Beobachtung gehalten werden. Dies gilt insbesondere für die Kollisionserkennung, da ja praktisch jede Kugel jede andere Kugel treffen kann. Es werden folglich alle Distanzen zwischen den Kugeln geprüft. Das Prüfungsergebnis wird in ein 2D-Array partner[N][N] eingetragen. Trifft die Kugel i auf die Kugel j erfolgt ein Vermerk im partner[][]-Array, aber ebenso trifft ja die Kugel j auf die Kugel i, was zu einer Dublette führt, gibt es doch nur eine Kollision!
Für die Implementation sind drei Routinen besonders wichtig.
  1. Kollisionserkennung: Im ersten Schritt werden - jeder gegen jeden - alle Kollisionen gesucht, indem die prognostizierten Distanzen zwischen den einzelnen Kugel geprüft werden. Im Erfolgsfall wird in die erste Zeile des Arrays partner[i][0] vermerkt, welche Kugel i mit welcher Kugel j zusammen gestoßen ist. Nichtkollisionen werden mit -1 markiert.
  2. finden der Kollisionspartner: hier werden die Kollisionspartner j in die weiteren Zeilen des Arrays partner[i][j] eingetragen. Damit sind für jeden Partner i die zugehörigen Partner j, auch wenn es mehrere sind, bekannt. Zudem werden die individuellen Zeitincremente dtCorr den Stoßpartnern zu geordnet
  3. Eliminierung von Dubletten: schließlich werden alle Dubletten entfernt und die Kollisionspartner so geordnet, dass im Fall eines Tripel-Stoßes die einzelne Kugel an erste Stelle in der Spalte i des Arrays gerückt wird. Dieser Partner wird als Initiator bezeichnet, auch wenn er nicht immer der aktive Part im Stoß ist.
Die Stoßbehandlung für paarige Kollisionen ist trivial. Die Berechnung des allgemeinen Tripelstoßes erfolgt entsprechend der Pragmatischen Annäherung an das 3-Körper-Problem. Spannend ist jedoch die Detektion des symmetrischen Falles. Hier ist sowohl darauf zu testen, dass die Winkel α2 und α3 als auch die Beträge der Geschwindigkeits­vektoren v2 und v3 bis auf einen kleinen Restbetrag, der Rechen­ungenauig­keiten berück­sichtigen soll, übereinstimmen.

Besondere Beachtung verdient die Kollisions­behandlung. Erinnern wir uns: Wir haben nicht nur zu prüfen, ob ein normaler Stoß zwischen zwei Partnern oder ein Triplestoß zwischen drei Partnern vorliegt. Sofern wir die Kollisionserkennung mit der einfachen Distanzmethode ausführen, müssen wir auch noch mit den Ungenauigkeiten leben, die uns die Diskretisierung der Zeit synchron zum Bildrefresh bescheren. Das Problem besteht darin, dass eine Kollision erst dann entdeckt werden kann, wenn die Distanz zwischen den Objekten gleich oder kleiner der Summe der Objektradien wird. Dabei ist der Fall gleich in der Behandlung unproblematisch, tritt aber fast nie ein - eben wegen der Diskretisierung der Zeit, die ja auch eine Diskretisierung des Ortes nach sich zieht. Ist nämlich der nächste Zeitquant aktuell, kann das Objekt schon weiter gerollt sein, als es die natürliche Begrenzung des anderen Objektes eigentlich erlaubt. Folglich werden im Fall kleiner, der bei einer Kollision fast immer eintritt, beide Kugeln mehr oder weniger in einander "eindringen", sich also in der Darstellung überlappen. Für das Auge ist eine solche Überlappung kaum wahrnehmbar, aber rechentechnisch können daraus durchaus schwerwiegende Probleme erwachsen:
Diese Probleme treten nicht oder nur abgeschwächt in Erscheinung, wenn die intelligente Kollisionserkennung angewendet wird. Diese erkennt den Stoß nicht erst bei Unterschreitung der Grenzdistanz, sondern erstellt vorab eine Prognose und korrigiert entsprechend das Zeitraster. Allerdings wird dieser Vorteil mit einem erhöhten Rechenaufwand bezahlt!

zeigt die Folgen der Zeitdiskretisierung. Zur Zeit tn bewegen sich alle drei Kugel auseinander zu, sind aber noch nicht kollidiert. Im nächsten frame zur Zeit tn + dt haben sich die Kugeln infolge ihrer Geschwindigkeiten in die neue Position (angedeutet durch die leeren Kreise) bewegt. Jetzt sind für alle drei Kugeln die Kollisionsbedingungen erfüllt. Nach den Kriterien der Kollisionsbehandlung läge ein Dreifachstoß vor. Bei genauerem Hinsehen wirst Du aber erkennen, dass eigentlich zwei Einfachstöße vorliegen. Zu ersehen ist dies aus den Distanzen zwischen den stoßenden Objekten: distance 1,2 ist größer als distance 1,3. Das bedeutet, Kugel 1 trifft zuerst auf Kugel 3 und dann erst auf Kugel 2. Also sollte dieser "Dreifachstoß" als Folge von zwei Einfachstößen Kugel 1 -> Kugel 3 und danach Kugel 1 -> Kugel 2 behandelt werden.

Das Thema "Dreifachstoß" birgt also eine ganze Reihe von Fallstricken, die sorgfältig ausgeräumt werden müssen, damit es im Betrieb keine Programmabstütze gibt. zeigt den Abblauf der erweiterten Kollisionsbehandlung am Beispiel der i-ten Kugel, die mit der j-ten bzw. k-ten Kugel kollidiert.
Folgen der Zeitdiskretisierung im Triple-Stoß
Abb. Folgen der Zeitdiskretisierung im Triple-Stoß
Entscheidungsbaum Triple-Stoß

Abb. Entscheidungsbaum Triple-Stoß


Zusammenfasung: Das Dreikörperproblem des elastischen Stoßes ist analytisch grundsätzlich mit den Mitteln der Erhaltungssätze für Energie und Impuls nicht lösbar. Die hier vorgestellte Lösung erlaubt es, die Anfangssituation eines Billardspieles hinreichend abzubilden. Es wird dabei auf streng symmetrische Stoßanordnungen bezüglich der zentralen Stoßkomponenten orientiert. Allgemeinere Fälle werden mit einer Ersatzlösung, die aber physikalisch nicht korrekt ist, abgefangen. Eine alternative Lösungsmöglichkeit bietet die Nutzung von Feder-Masse-Systemen zur Modellierung des Stoßes.
Wie es das Programmbeispiel zeigt, werden alle symmetrischen Dreifachstoße exakt abgebildet. Für die Kollisionserkennung wird das intelligente Verfahren angewendet, welches mit einer Prognose des Stoßzeitpunktes arbeitet und dadurch die "Durchdringungseffekte" im Stoßmoment vermeidet. Die anfänglich nach dem Programmstart gut zu beobachtende Symmetrie der Bewegungen löst sich später infolge der Zeitdiskretisierung und von Rechengenauigkeitsdefiziten auf.
Für eine realistische Spielesituation dürften diese Ungenauigkeiten aber keine Rolle spielen, da infolge von Reibungsverlusten alle Bewegungen bis zum Zeitpunkt eines unsymmetrischen Tripel-Stoßes bis zum Stillstand verlangsamt worden sind.