7. Kapitel
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:
Da dieses Geschehen sehr komplex zu werden scheint, sollten wir mit einem übersichtlicheren Fall () beginnen.
Da dieses Geschehen sehr komplex zu werden scheint, sollten wir mit einem übersichtlicheren Fall () beginnen.
Abb. Drei Körper kollidieren
()
()
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,
Dann haben wir die folgende Situation:
- die Richtungen der betragsgleichen Geschwindigkeitsvektoren v2 und v3 mit den Richtungen der Zentrallinien der zusammenstoßenden Kugeln übereinfallen,
- Kugel 1 sich parallel zur x-Achse bewegt
- alle Kugeln im Augenblick des Zusammenstoßes symmetrisch zur x-Achse angeordnet sind.
Dann haben wir die folgende Situation:
- 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,
- die Beträge der Vektoren v2 und v3 sind gleich groß
- 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!
Abb. Symmetrisches Drei-Körper-Problem
Berücksichtigen wir die mathematisch positiven Winkelbezüge, erhalten wir die wahren Winkel für die Stoßberechnung:
()
Beachte! Für die cos()-Funktion gilt:
folglich ist, da
,
folglich ist, da
,
()
()
on/off
umsortieren
()
()
()
()
()
()
()
()
()
()
()
Bitte einen Augenblick Geduld
während das Programm geladen wird!
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 :
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.
und
()
()
()
Abb. Verallgemeinertes Drei-Körper-Problem
()
()
()
bzw.
()
()
bzw.
()
Bitte einen Augenblick Geduld
während das Programm geladen wird!
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.
daraus folgt
gibt die Winkelverhältnisse wider, wie sie bei beliebig orientierten symmetrischen Anordnungen auftreten.
()
()
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 - Billard
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.
()
Bitte einen Augenblick Geduld
während das Programm geladen wird!
während das Programm geladen wird!
Abb. Pragmatisch erweiterter dezentraler Stoß - Schrittbetrieb
In der in gezeigten Anordnung, wird nun die Geschwindigkeit v2 abweichend von der Geschwindigkeit v3 mit Hilfe eines weiteren Schiebereglers eingestellt. Wieder werden die Startorte der Kugeln B3 und B2 den vorgegebenen Startgeschwindigkeiten v2 und v3 sowie der Richtung des Geschwindigkeitsvektors v2 angepasst, so dass ein Zusammenstoß aller drei Kugeln gewährleistet ist. Die Beträge der zentralen Geschwindigkeitskomponenten v3Z = v2Z sind nun aber nicht mehr gleich groß! Im Unterschied zu den voran gegangenen Beispielen ist infolge der willkürlichen Festlegung der Geschwindigkeiten nach dem Stoß nur noch der Energie-Erhaltungssatz erfüllt, der Impuls-Erhaltungssatz wird jedoch verletzt!
Das hier vorgestellte Beispielprogramm arbeitet mit dieser Behelfslösung. Unser Beispielprogramm simuliert eine Billardsituation mit mehreren Kugeln. Mit den Buttons vert, hori bzw. tria kann die Anordnung der Kugeln ausgewählt werden. An der ausgezeichneten Kugel 0 befindet sich ein Vektor, mit dem Richtung und Betrag der Startgeschwindigkeit 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 Kugelbewegungen und Kollisionen gut beobachtet werden können, gibt es keine Rollreibung. D.h. die Gesamtenergie bleibt fortwährend gleich groß!
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.
-
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.
-
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
-
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.
Besondere Beachtung verdient die Kollisionsbehandlung. 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:
-
bei tiefer Eindringung und geringen Geschwindigkeiten nach dem Stoß kommt es vor,
dass eine der langsamen Kugeln sich beim nächsten Zeitquant nicht aus dem
Kollisionsbereich der anderen Kugel(n) heraus bewegt hat. Damit wird sofort
wieder eine neue Kollision signalisiert, auch wenn diese gar nicht aufgetreten
ist. Die Folge ist, dass sich die betroffenen Kugeln nicht mehr von einander
lösen können. Diese Verhalten entspricht nicht den natürlichen Verhältnissen.
Eine Lösung des Problems besteht in der Erhöhung der refresh-Rate.
- es werden Triplestöße angezeigt, die in Wirklichkeit keine sind. Es liegen nur Einzelstöße in sehr kurzer Distanz vor. Dieses Problem kann programmtechnisch behandelt werden.
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.
Abb. Folgen der Zeitdiskretisierung im 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. In einem solchen Fall werden die stoßenden Objekte als verformbar angesehen.
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.