# Kollision zweier Kugeln... Wo ist Newton ??



## Kr0e (30. Dez 2011)

Hallo!

Ich muss/will zwei Kugeln kollidieren lassen. Kollisionserkennung mache ich mit der Differenzglecihung  der beiden Bewegungsgleichungen und löse sie nach r1+r2 auf. Klappt wunderbar auch sehr schnelle Kugeln entgehen meinem Algorithmus nicht. Den Stoß berechne ich nach Newton und seinen altmodischen und leider unrelativen Gleichungen. Mein Problem ist nun die Rotation!

Ich dachte erst, hmm... Ist ja praktisch betrachtet auch nur ein Stoß in orthogonaler Richtung.. Mein Prof hat zwar gesagt, dass Rotation nicht gefordert ist aber mich interessiert das, vorallem weil ich damals bei meiner Facharbeit an ein ähnlioches Problem gestoßen bin...

Mein Problem ist einfach, dass ich zu Rotationen wenig bei Google finde... Stöße und so werden häufig im Zusammenhang mit Snookergames erläutert und jeder der Physik in der Schule hatte, sollte das sowieso können, aber die Rotation wird in der Schule leider selten 1. vektoriell und 2. mit verschiedenen Massen oder Reibungskoeffizienten gemacht.

Ich vermute, dass man sich eine Rotationübertragung ähnlcih wie einen Stoß vorstellen könnte und daher evt. mit den gleichen Formeln berechenbar sein könnte, wie 0815 Stöße . Halt nur in Abhängigkeit der Reibungskoeffizienten etc...

Naja, ich steh etwas auf dem Schlauch, nicht zuletzt weil mir hier etwas physikalisches Wissen fehlt...

Vlt. ist ja hier iwer mit Physikkenntnissen =)!!
Guten Rutsch morgen 

Gruß,
Chris


----------



## vanny (31. Dez 2011)

So ganz ist mir dein Vorhaben noch nicht klar, "2 Kugeln kollidieren lassen.." wie beim Snooker oder 2 Pistolenkugeln in der Luft oder  die KlickKlack Dinger am Pendel? ^^

Die Möglichkeiten sind dort zu verschieden, um dir da konkret unter die Arme greifen zu können denke ich.

Gruß Vanny



> Mein Prof hat zwar gesagt, dass Rotation nicht gefordert ist aber mich interessiert das...


seltene und lobenswerte Einstellung... ist leider viel zu oft Mangelware:toll:


----------



## Kr0e (31. Dez 2011)

Hi Vanny!

Danke für dein Interesse, mir zu helfen =). Es geht einfach um Kugeln im 3 dimensionalen Raum mit verschiedenen Radien. Diese Kugeln können beliebige Vektorgeschwindigkeiten haben und beliebige Massen. Daher könnten sie in jeglicher Situation kollidieren.

Der Impuls Austausch in Geschwindigkeitsrichtung ist kein Problem wie gesagt, dafür gibts ja diese tollen Newtonschen Gleichungen. Mein Gedanke ist einfach, wie die Rotation jeder Kugel die jeweils andere Kugel bei einer Kollision beeinflusst.

Also z.b. eine Kugel mit Spin die auf eine ruhende Kugel prallt: Hierbei könnte ich mir vorstellen, dass der Spin ggf. die Geschwindigkeit/Richtung zusätzlich beeinflusst im echten Leben... Kennt man ja vom Billard im echten Leben... Aber mein Problem ist, dass ich einfach keine Formel finde, die die GEschwindigkeit mit Rotation beschreibt... Und einfach selbst drauf los denken halte ich für gefährlich, da dies ohne jegliche wissenscahftliche Grundlage wäre...


Danke!

Gruß,
Chris


Ich vermute das Grundproblem ist einfahc, dass mir hier etwas Physikalisches Wissen fehlt. Ich hab gestern mal bei anderen Engines "gespickt" bzw. deren Docs mal z. T. überflogen. Überall ist die Rede vom Lösen von Differentialgleichungen und speziellen numerischen Verfahren um dies algorithmisch zu lösen. Dummerweise kann ich mir nicht vorstellen, inwiefern Differentialgleichungen mit Bewegungsglecihungen zu vereinbaren sind.... Ich denke, dass ist auch der Grund, warum mein Prof. dies nicht fordert... Der Komplexitätsgrad wächst anscheinend enorm sobald Rotation oder sogar eine NICHT-Kugelform als Objekt benutzt wird... Rigid Body Dynamics... Hm. Lesen Lesen Lesen...


----------



## Illuvatar (31. Dez 2011)

Hi,

kleine Vorbemerkungen:
- Was meinst du mit Newtons "unrelativen" Gleichungen? Dass die nicht relativistisch sind? Du willst das aber nicht ernsthaft relativistisch rechnen, oder? 
- Wenn du Spin schreibst, meinst du Drehimpuls 

Ok. Ich denke, das große Problem ist folgendes:
Die übliche Berechnung von so einem Stoß verwendet (nichts anderes als) Energie- und Impulserhaltung. Für die makroskopischen Kugeln gelten diese Erhaltungssätze aber nur unter Vernachlässigung der Reibung. Vernachlässigt man die Reibung, hat die Rotation aber leider keinerlei Einfluss. Das sieht man erstens daran, dass die Rotation der Kugel keinen Einfluss auf den Gesamtimpuls der Kugel besitzt und also die komplette Rechnung von dem Stoß gleich bleibt, zweitens werden die Kugeln auch nach dem Stoß genauso rotieren wie vorher, denn: Die Moleküle der Kugeln rotieren ja parallel aneinander vorbei, und das kann nur Auswirkungen haben, wenn man Reibung miteinbezieht.
Will man nun aber die Reibung mitnehmen, kann man die ganze einfache Rechnung mit Erhaltungsgrößen in die Tonne kloppen. Es gibt sicherlich trotzdem Modelle mit denen man sowas rechnen kann (irgendwie kriegen Physikengines das ja hin), die können aber sicher schnell beliebig kompliziert werden - insbesondere da Physikengines nicht nur mit Kugeln rechnen können wollen...

Ich hätte noch eine relativ einfache Idee, die möglicherweise schon befriedigende Resultate bringen könnte - sicher bin ich da aber nicht:
Zwei Kugeln bewegen sich aufeinander zu, jede hat einen bestimmten Impuls und Drehimpuls. Man könnte jetzt den Stoß unendlich kurz modellieren, dann würden (denke ich) die Erhaltungssätze weiterhin gelten - d.h. an den Richtungen, die rauskommen, ändert sich nichts.
Kennt man aber den Berührpunkt kann man aus dem Drehimpuls die Rotationsgeschwindigkeit der beiden Kugeln an diesem Berührpunkt berechnen. Dann könnte man jeweils eine (deltaförmige) Kraft annehmen, die proportional zu dieser Rotationsgeschwindigkeit und zu einer Materialkonstante (Reibung) ist. Die führt zumindest zu einer Änderung der Drehimpulse.
Man hätte dann nach actio=reactio 4 solche Kräfte schätze ich, an jeder Kugel zwei.

Wenn du willst kann ich dazu noch mehr schreiben.


----------



## Kr0e (31. Dez 2011)

Hi! Danke für deine Antwort!

Also das mit der Rotationgeschwindigkeit und Drehimpuls am Berührpunkt ist kein Problem, ich hatte eine ähnlcihe Idee und dass man noch einen Reibungskoeffizienten braucht, damit überhaupt Rotation übergeben wird, ist natürlich klar.

Problematisch stelle ich mir die Tatsache vor, dass in diesem Modell die Bewegungsimpulse unangetastet bleiben würden. (Oder hab ich jetzt was falsch verstanden?) Sprich Drehung würde in diesem Modell zwar ggf. korrekt übergeben werden an die jeweiligen Stoßpartner aber ich glaube, dass zwei Objekte mit Reibungkoeffizienten != 0 bei der Übergabe des Drehimpulses auch die Bewegungsimpulse verändern... Vlt. hab ich aber deine Idee auch noch niucht exakt verstanden...


----------



## Illuvatar (31. Dez 2011)

Nein, das ist richtig. Ich hab aber grade auch keine gute Idee, wie man den Bewegungsimpuls dabei verändern müsste...


----------



## Kr0e (1. Jan 2012)

Hat sich erledigt, ich werde nochmal von unten anfangen und mich mal in Rigid Body Dynamics einlesen. Es fehlt mir hier Wissen und langsam bin ich richtig itneressiert!

Danke für die Hilfe soweit =)!


----------



## Marco13 (1. Jan 2012)

Ich wollte gestern (d.h. heute morgen) schon was dazu schreiben, wirklich "fundiertes" könnte ich aber nicht sagen  Also: Alles nicht so ernst nehmen, was ich schreibe. 

Vorneweg: Ein bißchen was steht dazu z.B. in "An Introduction to Physically Based Modeling: Rigid Body Dynamics" http://www.cs.cmu.edu/~baraff/sigcourse/notesd1.pdf (von der Siggraph 97) - es gibt aber auch noch neuere, z.B. die auf Seiten wie CS7301-002 Physics-Based Modeling and Simulation verlinkten. 

Ich denke aber, dass die Vernachlässigung der Reibung nicht zuletzt aus der Tatsache resultiert, dass bei "üblichen" Kugel-Kollisionen die Kollisionszeit als unendlich kurz angesehen wird: Die Kugeln treffen aufeinander, und es wird "instantan" ein Impuls von der einen auf die andere abgegeben. Tja. Wie lange berühren sich zwei Billardkugeln, die aufeinanderprallen? :bahnhof: Gerechtfertigt und modelliert wird das AFAIR mit Formeln, die aus sowas wie Elastic collision - Wikipedia, the free encyclopedia hergeleitet sind. 

Ich könnte mir vorstellen, dass ein Ansatz zur Einbeziehung der Reibung darin bestehen würde, dass man nicht die Kugel über Zentrum+Radius beschreibt, sondern tatsächlich die Auswirkung der Kollision auf den _Kollisionspunkt_. 
Die "einfache" Modellierung ist ja:
- Wenn eine Kugel auf eine ruhende Kugel trifft, werden Kraftstöße auf die Kugeln angewendet, und ihre Bewegungsrichtungen ändern sich. 
- Wenn eine _rotierende_ Kugel auf eine ruhende Kugel trifft, werden Kraftstöße auf die Kugeln angewendet, und ihre Bewegungsrichtungen ändern sich - die Rotation spielt keine Rolle!

Um die Reibung zu berücksichtigen, könnte man sagen:
- Wenn eine _rotierende_ Kugel auf eine ruhende Kugel trifft, werden Kraftstöße auf _die sich berührenden Punkte der Kugeloberflächen_ angewendet. Die Richtung und Stärke (bzw. Verteilung) dieser Kraftstöße hängen dabei natürlich von der Rotationsgeschwindigkeit und Masse, der Dauer des Kontaktes (d.h. auch der Elastizität der Objekte) und dem Reibungskoeffizienten ab. Das wäre dann der allgemeine Fall, der nicht nur auf Kugeln, sondern auf beliebige Objekte angewendet werden könnte (FALLS er überhaupt physikalisch Sinn macht  ) und solche interessanten Formelmonster generiert wie die in http://www.java-forum.org/spiele-multimedia-programmierung/122625-3d-spiel.html#post792697 gezeigten


----------



## Kr0e (1. Jan 2012)

Danke Marco!

Lustig, den ersten Link hab eben heute Nachmittag iwann auch gefunden =). Sehr interessant, vorallem der Teil über Rigid Body Dynamics.

Eine Sache hatte ich total übersehen bzw. nicht bedacht. Wenn man Positionen von Objekten altmodisch aktualisiert (also alle 20 ms den geschwindigkeitsvektor addiert), so hat man das Problem, das die Bewegung der Objekte nur nährungsweise bestimmt wird, sprich das Objekt selbst keine wirklichen Flugbahn folgt sondern eher einer Vektorkette was bei Kollisionerkennung problematisch werden könnte..

Ich hab den ersten Artikel, der schon recht lang war, inzwischen durch und versuche mich an den Partikelsystem und der Integration der Beweungsgleichungen. Das Verfahren, dass dort erklärt wird, nennt sich Eulerverfahren. Das ist so simpel, dass es genau war, was ich intuitiv bislang benutzt habe... Nämlich einfach alle 20 ms z.b. den Vektor addieren, aber dies ist natürlcih viel zu ungenau und es gibt bessere und vorallem schnellere Verfahren, in die ich mich nun einlesen muss erstmal.


Alles in allem viel Aufwand und ein großer Unterschied zwischen einer simplen Animation und einer physikalischen Simulation. 

Gruß,
Chris


----------



## usrr (8. Mrz 2012)

[QUOTE Kr0e ]
Problematisch stelle ich mir die Tatsache vor, dass in diesem Modell die Bewegungsimpulse unangetastet bleiben würden. (Oder hab ich jetzt was falsch verstanden?) Sprich Drehung würde in diesem Modell zwar ggf. korrekt übergeben werden an die jeweiligen Stoßpartner aber ich glaube, dass zwei Objekte mit Reibungkoeffizienten != 0 bei der Übergabe des Drehimpulses auch die Bewegungsimpulse verändern... Vlt. hab ich aber deine Idee auch noch niucht exakt verstanden... 
[/QUOTE]

Richtig. Wie bereits erwähnt wird Reibung benötigt um einen Drehimpuls auszutauschen. Die Reibungskraft ist proportional zur Normalkraft, d.h. die Kugeln müssen mit einer Kraft gegeneinander gedrückt werden. Dadurch wird ein Impuls übertragen.

Wie weit bist du mit deiner Physikengine? Ich beschäftige mich gerade mit dem Thema (nur Oberflächlich) und habe interesse an Infos zum Thema.


----------

