RegistrierenRegistrieren   LoginLogin   FAQFAQ    SuchenSuchen   
Verhalten von Kugeln bei Kollision
 
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik
Autor Nachricht
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 27. Nov 2012 11:58    Titel: Verhalten von Kugeln bei Kollision Antworten mit Zitat

Hallo smile Ich hab mal ne simple frage an euch Physiker.

Ich programmiere gerade zur Übung eine 2D-Simulation von Kugeln, die sich in nem Raum bewegen. Natürlich sollen die sich bei ner Kollision auch beeinflussen. Die ganze Frage ist eigentlich nur, welche Gesetze man da beachten muss.

Wichtig sind eigentlich nur Bewegungsrichtung und Masse.

Kann auch gut sein, dass das ganze extrem einfach ist, aber ich komme gerade selber net drauf. Augenzwinkern

PS: Keine Reibung o.ä. ^^
TomS
Moderator


Anmeldungsdatum: 20.03.2009
Beiträge: 18547

Beitrag TomS Verfasst am: 27. Nov 2012 12:17    Titel: Antworten mit Zitat

Müssen es ausgedehnte Kugeln sein oder tun es auch Massenpunkte?
_________________
Niels Bohr brainwashed a whole generation of theorists into thinking that the job (interpreting quantum theory) was done 50 years ago.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 27. Nov 2012 14:21    Titel: Antworten mit Zitat

Es müssen leider Kugeln mit nem Radius sein. Augenzwinkern

Man kann das ganze auch auf Kreise beschränken... Letztendlich ist die Simulation ja so oder so 2D. Augenzwinkern

Ich würde in etwa sowas erwarten: (erstmal nur die Richtung betrachtet)

Wenn zwei Kugeln aufeinander prallen, dann entsteht zwischen denen ja eine Achse, die Tangente des Kreises am Punkt der kollision.


Ich würde sagen, die neue Bewegungsrichtung der Kugel wird an dieser Achse reflektiert. Aber das ergibt für mich nur dann sinn, wenn beide Kugeln gleich groß sind.
TomS
Moderator


Anmeldungsdatum: 20.03.2009
Beiträge: 18547

Beitrag TomS Verfasst am: 27. Nov 2012 14:32    Titel: Antworten mit Zitat

Ja, du musst die Energie- und Impulserhaltung der Kugeln berücksichtigen und dazu praktisch das Reflexionsgesetz nutzen.

Das könntest du aber auch mit Punkten realisieren. Entweder bestimmst du die benötigten Parameter geometrisch aus den Bahnkurven / Geschwindigkeitsvektoren, oder du streust tatsächlich Punkte aneinander, allerdings unter Berücksichtigung des Streuquerschnitts für Kugeln, den du einmalig berechnest und für jede Kollision wiederbenutzt (ggf. kannst du da auch eine Zufallsverteilung drüber legen)

_________________
Niels Bohr brainwashed a whole generation of theorists into thinking that the job (interpreting quantum theory) was done 50 years ago.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 27. Nov 2012 14:59    Titel: Antworten mit Zitat

Aber macht das tatsächlich keinen unterschied, ob eine Kugel mit wesentlich mehr masse auf eine kleine Kugel trifft oder ob die Masse identisch ist?

Also bleibt die neue Richtung nach dem Reflexionsgesetz für alle Massen gleich?

(PS von deinem Zweiten Teil versteh ich fast nichts, war zwar in Mathe fit, aber net in Physik^^)
TomS
Moderator


Anmeldungsdatum: 20.03.2009
Beiträge: 18547

Beitrag TomS Verfasst am: 27. Nov 2012 15:21    Titel: Antworten mit Zitat

Ja, du benötigst natürlich Größe, Masse und Geschwindigkeit und Bahnkurven / Geometrie zur Berührung der Kugeln. Aber die Frage ist, ob du immer Kugeln zeichnest und das fürj ede konkrete Situation auswertest, oder ob du Massenpunkte zeichnest.
_________________
Niels Bohr brainwashed a whole generation of theorists into thinking that the job (interpreting quantum theory) was done 50 years ago.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 27. Nov 2012 15:27    Titel: Antworten mit Zitat

Mein Plan war, Punkte zu zeichnen.

Was ich aber net net ganz verstehe, ist ob die Richtungsvektoren auch abhängig vom Masseverhältniss der Beiden Kugeln ist.
TomS
Moderator


Anmeldungsdatum: 20.03.2009
Beiträge: 18547

Beitrag TomS Verfasst am: 27. Nov 2012 16:12    Titel: Antworten mit Zitat

Gut, Punkte. Dann google mal unter "Streuquerschnitt Billiardkugel"; evtl. funktioniert der folgende Monsterlink (Kap. 4.10)

http://books.google.de/books?id=ZiBBig4BXGcC&pg=PA71&lpg=PA71&dq=streuquerschnitt+billardkugeln&source=bl&ots=3ifqUhBEYr&sig=OIbCl46ft4EE0IASrtgWnu8RzCk&hl=de&sa=X&ei=3ta0UJTaN4vMtAaAvoDoDg&ved=0CEoQ6AEwAw#v=onepage&q=streuquerschnitt%20billardkugeln&f=false

Der Witz ist, dass der Streuquerschnitt harter Billardkugeln isotrop ist (muss das mal nachrechnen, kann ich kaum glauben), d.h. die Wsk. einer Streuung in einen bestimmten Raumwinkelbereich ist unabhängig vom Winkel und lediglich Abhängigkeit von der Größe des Bereiches.

Konkret für die Streuung von Punktteilchen würde das bedeuten:
- du transformierst die Teilchengeschwindigkeiten ins Schwerpunktsystem
- du würfelst einen beliebige Streuwinkel
- du transformierts wieder ins ursprüngliche System zurück

(aber schau dich nochmal um und lass' uns das nochmal genauer diskutieren)

_________________
Niels Bohr brainwashed a whole generation of theorists into thinking that the job (interpreting quantum theory) was done 50 years ago.
DrStupid



Anmeldungsdatum: 07.10.2009
Beiträge: 5160

Beitrag DrStupid Verfasst am: 27. Nov 2012 19:40    Titel: Antworten mit Zitat

Das habe ich schon mal in zwei Varianten programmiert:

1. Simulation für starre glatte Kugeln

Dabei bin ich einfach von vollständig elastischen Stößen ausgegangen. Die Formeln dafür kann man aus Energie- und Impulserhaltung selbst herleiten oder ergoogeln. Das eigentliche Problem ist die Berechnung der Kollisionszeitpunkte. Dazu habe ich zunächst für jedes Kugelpaar berechnet, ob und wenn ja wann die Kollision stattfindet. Bei vielen Kugeln kann das eine Weile dauern. Die Kollisionen habe ich dann nach Zeitpunkt sortiert und der Reihe nach abgearbeitet. Dabei müssen natürlich nach jeder erfolgten Kollision alle Kollisionen neu berechnet werden, an denen die beiden Kugeln beteiligt sind. Außerdem muss man darauf achten, dass die Kugeln sich bei der berechnung der Kollision nicht aufgrund von Rundungsehlern überlappen. Wenn das passiert, dann bleiben sie aneinander hängen.

2. Simulation für elastische glatte Kugeln

Hier habe ich den Kugeln ein geeignetes Lennard-Jones-Potential verpasst und die daraus resultierenden Bewegungsgleichungen mit einem Geschwindigkeits-Störmer-Verlet-Algorithmus numerisch integriert. Damit das bei vielen Kugeln mit vertretbarem Aufwand berechenbar bleibt, muss man das Potential in einer bestimmten Entfernung abschneiden und nur Kräfte zwischen Kugeln berechnen, die sich nahe genug kommen. Das habe ich mit einem Linked-Cell-Verfahren realisiert.

Im zweiten Fall können auch beliebige zusätzliche Kräfte eingebaut werden, was im ersten Fall nur in Spezialfälen möglich ist (z.B. Berücksichtigung der Gravitation durch Wechsel ins frei fallende System).

Kollisionen mit Wänden sind in beiden Fällen leicht zu realisieren.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 27. Nov 2012 21:21    Titel: Antworten mit Zitat

Hallo smile

Ich bin gerade schockiert darüber, wie wenig Physik ich kann, obwohl ich den Mathe LK im Gymnasium ausgesprochen gut überlebt habe. O.o

Also das größte Problem ist ja, das unterschiedliche Massen und Geschwindigkeiten bei einer nicht zentralen Kollision (Mittelpunkte der Kugeln würden nicht aufeinander Treffen) den Richtungsvektor beeinflussen würden, richtig?

Aber weiter kann ich dir leider nicht folgen,TomS. unglücklich
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7294

Beitrag Steffen Bühler Verfasst am: 28. Nov 2012 09:24    Titel: Antworten mit Zitat

Ich würde hier Schritt für Schritt vorgehen:

1. Wenn's eh nur eine Programmierübung sein soll, mach's doch erst einmal für eine Punktmasse, die in einem Rechteck umherfliegt. Wenn die an die Wand stößt, gibt es die bekannte Wechselwirkung, und die entsprechende Geschwindigkeitskomponente invertiert sich einfach.

2. Als nächstes nimm einen weiteren Punkt mit derselben Masse. Auch da ist die Wechselwirkung nicht viel schwerer, oder?

3. Nun verändere die Massen. Auch das wird schnell klar, denke ich.

4. Jetzt laß die Kugeln eine Ausdehnung haben. Dann ist der Kollisionszeitpunkt halt nicht, wenn sich die Zentren berühren, sondern entsprechend früher. Aber programmiertechnisch nicht viel komplizierter.

Viele Grüße
Steffen
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 28. Nov 2012 13:44    Titel: Antworten mit Zitat

Punkt 1 erledigt.

2. Wäre kein Problem, nach meinem Verständniss sähe das so aus, mit Radius:

Neuer Richtungsvektor ist Reflexion des alten an der Kollisionstangente. Müsste irgendwie umsetzbar sein.

3. Das ist die Frage, kollidieren die Kugeln so, dass auch die Zentren kollidieren würden, dann ist das ja net schwer. Aber was passiert, wenn se nicht so kollidieren sondern sich nur schleifen? Also sich gegenseitig nur ablenken....

4. ??
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7294

Beitrag Steffen Bühler Verfasst am: 28. Nov 2012 14:47    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:
Aber was passiert, wenn se nicht so kollidieren sondern sich nur schleifen?


Ach so, Du willst also wie beim Billard "anschneiden", so daß die Impulse der Kugeln nicht einfach ausgetauscht werden, sondern auch noch einen Drall der Kugeln verursachen? Dann wird's allerdings nicht mehr so einfach.

Ansonsten nimm doch einen idealen elastischen Stoß an, dann tust Du Dich nicht so schwer:
http://www.leifiphysik.de/web_ph10_g8/grundwissen/05stoesse/elastisch.htm

Viele Grüße
Steffen
Huggy



Anmeldungsdatum: 16.08.2012
Beiträge: 785

Beitrag Huggy Verfasst am: 28. Nov 2012 16:07    Titel: Antworten mit Zitat

Um dein Problem zu lösen, musst du zunächst das Modell, mit dem du arbeiten willst, klar definieren. Deinen bisherigen Bemerkungen entnehme ich folgendes Modell:

Man hat 2 Scheiben A und B, die sich auf einer Ebene reibungsfrei bewegen. Die Scheiben haben die Massen und und die Radien und . Wenn die Scheiben zusammenstoßen, erfolgt der Stoß vollkommen elastisch und es gibt keine Reibung zwischen den Scheiben. Es kann natürlich sein, dass dir ein anderes Modell vorschwebt. Dann musst du dieses Modell definieren. Ich beziehe mich im folgenden auf meine Modellbeschreibung.

Es sind 3 Fragen zu beantworten:

(1) Stoßen die Scheiben zusammen?

Falls ja:

(2) Wo und wann stoßen sie zusammen?

(3) Wie lauten die Geschwindigkeitsvektoren nach dem Zusammenstoß?

Um diese Fragen zu beantworten, schlage ich dir im folgenden ein standardisiertes Verfahren vor. Ziel ist die transparente Nachvollziehbarkeit. Wenn du dieses Verfahren verstanden hast, kannst du dir anschließend überlegen, ob und wie man es rechentechnisch verbessern kann.


Schritt 1
Verschiebe das Koordinatensystem so, dass sich Scheibe B im Ursprung des Koordinatensystems befindet.

Schritt 2
Führe ein bewegtes Koordinatensystem ein, in dem Scheibe B ruht. Dazu musst du nur die Geschwindigkeitsvektoren ändern:





Schritt 3

Drehe das Koordinatensystem so, dass parallel zur x-Achse wird.


Jetzt sind die Fragen (1) und (2) leicht zu beantworten. Die Scheiben können nur zusammenstoßen, wenn gilt:



Wenn sich Scheibe A links von Scheibe B befindet, muss positiv sein. Wenn sich Scheibe A rechts von Scheibe B befindet, muss negativ sein. Dieser Fall lässt sich auf den vorigen durch Spiegelung an der y-Achse zurückführen.
Der Ort des Zusammenstosses ergibt sich jetzt aus der Bedingung, dass der Abstand der Mittelpunkte beim Zusammenstoß gleich sein muss. Danach lässt sich der Zeitpunkt des Zusammenstosses trivial berechnen.

In dem beschriebenen Modell kann es einen Kraft-/Impulsübertrag beim Zusammenstoß nur in Richtung der Senkrechten zur Tangente an die Scheiben im Berührpunkt geben. Das ist die Gerade durch die beiden Mittelpunkte zum Zeitpunkt des Zusammenstosses. Bezeichnet man den Impulsübertrag mit und , so ist die Richtung dieser Vektoren also festgelegt und es muss gelten:



Mit diesen Bedingungen hat man die Impulserhaltung und die Drehimpulserhaltung garantiert. Es verbleibt nur eine unbekannte Größe, z. B. . Diese bestimmt man aus der Energieerhaltung. Damit ist auch Frage (3) beantwortet. Jetzt muss man nur noch die Schritte 1 bis 3 rückgängig machen, um das Ergebnis in das ursprüngliche Koordinatensystem zu transformieren.


Wenn man bei dem Problem einen Rand hat, muss man zuerst bestimmen, was zuerst geschieht:

a) Stoß Scheibe A mit Rand
b) Stoß Scheibe B mit Rand
c) Stoß Scheibe A mit Scheibe B

Hat man mehr als 2 Scheiben, kompliziert sich das Problem noch mal.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 29. Nov 2012 01:35    Titel: Antworten mit Zitat

Vieeelen Dank smile

Also dein Modell ist vollkommen richtig, keine Reibung, nur Richtungsvektor, Masse und Radius.

Also mein Programm macht sich das da recht einfach. Jede Kugel hat einen Richtungsvektor der nach einem Tick (z.B. 10 Millisekunden) zur Position im Koordinatensystem hinzugefügt wird.

Vor jeder Verschiebung (oder danach, eigentlich egal) wird abgefragt, ob irgendwo eine Kollision zwischen Kugeln entstanden ist.

Deshalb ist das mit der Zeitberechnung immer so eine Frage, die Kollision ist halt genau in diesem Zeitpunkt geschehen.


@ Huggy, verstehe ich das Richtig, dass sich Kugeln bei einer Kollision immer senkrecht von der Kollisionstangente weg bewegen?
Huggy



Anmeldungsdatum: 16.08.2012
Beiträge: 785

Beitrag Huggy Verfasst am: 29. Nov 2012 08:41    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:

@ Huggy, verstehe ich das Richtig, dass sich Kugeln bei einer Kollision immer senkrecht von der Kollisionstangente weg bewegen?

Nein!
Nur der Impulsübertrag findet in dieser Richtung statt. Der Impuls und damit die Bewegungsrichtung nach der Kollision ergibt sich aus:



n: nach Stoß
v: vor Stoß
DrStupid



Anmeldungsdatum: 07.10.2009
Beiträge: 5160

Beitrag DrStupid Verfasst am: 29. Nov 2012 19:10    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:
Vor jeder Verschiebung (oder danach, eigentlich egal) wird abgefragt, ob irgendwo eine Kollision zwischen Kugeln entstanden ist.


Davon abgesehen, dass es dann schon zu spät ist, rechnet sich der Computer bei vielen Kugeln tot, wenn er bei jedem Iterartionsschritt alle möglichen Kollisionen abfragen muss.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 30. Nov 2012 11:19    Titel: Antworten mit Zitat

Wie sollte er statt dessen mitbekommen, wann eine Kollision zu stande kam? Letztendlich wäre die Abfrage für eine Kollision in etwa sowas:

if ( (rk1 + rk2) <= sqrt( dx² +dy² ) )
....

Wenn die Summe des Radius kleiner oder gleich des Abstandes der Mittelpunkte ist,.. Das wird von modernen Rechnern ohne Verzögerung erledigt, selbst die Abfrage von 10 Kugeln wäre schnell erledigt und mehr Kugeln brauche ich auch net.

@ Huggy, danke, verstehe das sogar. smile
DrStupid



Anmeldungsdatum: 07.10.2009
Beiträge: 5160

Beitrag DrStupid Verfasst am: 01. Dez 2012 12:52    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:
Wie sollte er statt dessen mitbekommen, wann eine Kollision zu stande kam?


Er mus vorher berechnen, wann eine Kollision stattfinden wird.

ruhig_brauner hat Folgendes geschrieben:
Letztendlich wäre die Abfrage für eine Kollision in etwa sowas:

if ( (rk1 + rk2) <= sqrt( dx² +dy² ) )


Bei (rk1 + rk2) < sqrt( dx² +dy² ) überlappen sich die Kugeln bereits. Wenn Du das zulässt, kann es passieren, dass sie das auch noch im nächsten Iterationsschritt tun. Dein Algorithmus wird dann eine Kollision ausführen, die es eigentlich gar nicht gibt.

ruhig_brauner hat Folgendes geschrieben:
selbst die Abfrage von 10 Kugeln wäre schnell erledigt und mehr Kugeln brauche ich auch net.


Das vereinfacht die Sache. Ich habe mit ein paar Größenordnungen mehr gerechnet. An der Fehleranfälligkeit Deines Algorithmus ändert das allerdings nicht. Du musst die Kollisionsbedingung (rk1 + rk2) == sqrt( dx² +dy² ) möglichst exakt treffen.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 02. Dez 2012 19:26    Titel: Antworten mit Zitat

Aber das ist quasi nicht zu machen, also genau die Bedingung in einem Iterationsschritt zu treffen.

Ich könnte ne art Kontrolle Einbinden, die eine der beiden Kugeln verschiebt, falls sie sich überlappen.

Ansonsten fällt mir keine Möglichkeit ein, den Kollisionszeitpunkt vorher zu berechnen. Klar, mathematisch kein Problem, aber bei so einer Simulation wäre das mehr aufwand als nötig.

Möglich wäre auch, die Koordinaten X und Y sowie die Bewegungsvektoren statt ganzzahlig mit Fließkommazahlen darzustellen. Bei der Ausgabe wäre dass egal, aber so fallen die Ungenauigkeiten weniger auf und man kann mit einer höheren Auflösung die Kollision abfragen. Augenzwinkern

Aber wenn mir jemand sagen kann, wie man das Problem umgehen kann, immer her damit. smile
TomS
Moderator


Anmeldungsdatum: 20.03.2009
Beiträge: 18547

Beitrag TomS Verfasst am: 02. Dez 2012 19:46    Titel: Antworten mit Zitat

Wenn du die Relativgeschwindigkeit der Kugeln kennst, dann kannst du berechnen, ob sie sich im nächsten Zeitschritt überlappen werden, d.h. im jetzigen kurz vor der Kollision stehen. Wenn du deine Zeitschrittweite nicht anpassen willst, dann müsstest du die beiden Kugeln sozusagen etwas früher zur Kollision bringen.
_________________
Niels Bohr brainwashed a whole generation of theorists into thinking that the job (interpreting quantum theory) was done 50 years ago.
DrStupid



Anmeldungsdatum: 07.10.2009
Beiträge: 5160

Beitrag DrStupid Verfasst am: 02. Dez 2012 20:30    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:
Ansonsten fällt mir keine Möglichkeit ein, den Kollisionszeitpunkt vorher zu berechnen. Klar, mathematisch kein Problem, aber bei so einer Simulation wäre das mehr aufwand als nötig.


Ob das nötig ist oder nicht hängt davon ab welche Fehler Du akzeptierst. Wenn die Simulation halbwegs realistische Ergebnisse liefern soll, dann kommst Du um eine möglichst exakte Berechnung nicht herum. So furchtbar kompliziert ist das auch nicht. Du musst die Kollisionsbedingung (rk1+rk2)=sqrt[dx(t)²+dy(t)²] nach t auflösen und die kleinere der beiden Lösungen berechnen. Wenn diese größer oder gleich Null und kleiner oder gleich dem regulären Iterationsschritt ist wird die Kollision ausgeführt. Wie ich schon in meinem ersten Beitrag schrieb, kann man das mit einer sortierten Liste aller vorausberechnten Kollisionen erheblich optimieren.

ruhig_brauner hat Folgendes geschrieben:
Möglich wäre auch, die Koordinaten X und Y sowie die Bewegungsvektoren statt ganzzahlig mit Fließkommazahlen darzustellen.


Das ist im Grunde egal, solange Du genug signifikante Stellen hast.
ruhig_brauner



Anmeldungsdatum: 27.11.2012
Beiträge: 10

Beitrag ruhig_brauner Verfasst am: 02. Dez 2012 20:35    Titel: Antworten mit Zitat

Möglichkeit:

Bewegung -> Kollisionsabfrage -> Zeichnen

Als erstes wird die Kugel bewegt, also die Koordinaten mit dem Bewegungsvektor erweitert. Dann wird abgefragt, ob es zu einer Kollision kam, wenn ja, dann wird der Teil der Bewegung, der zur Überlappung führte, abgezogen und die Kugel bereits in die neue Richtung bewegt.

So kann man das ohne Überlappung regeln...

Wie gesagt, bei Programmen ist es immer recht schwierig, abzufragen, was im nächsten Schritt passieren wird. soll erst Abgefragt werden, ob demnächst eine Kollision kommt, dann müsste man bei jeder Abfrage temporär den Richtungsvektor mit einbeziehen. Da aber in 99% der Fällen keine Kollision vorhanden ist, wäre mir es lieber, wenn die Abfrage schnell von statten geht...
DrStupid



Anmeldungsdatum: 07.10.2009
Beiträge: 5160

Beitrag DrStupid Verfasst am: 02. Dez 2012 21:17    Titel: Antworten mit Zitat

ruhig_brauner hat Folgendes geschrieben:
Da aber in 99% der Fällen keine Kollision vorhanden ist, wäre mir es lieber, wenn die Abfrage schnell von statten geht...


Da gehört Deine Variante aber zu den denkbar schlechtesten Lösungen, weil Du in jedem Iterationsschritt alle möglichen Kollisionen prüfen musst. Bei meiner Methode fällt bei Iterationen ohne Kollision überhaupt kein zusätzlicher Rechenaufwand an und wenn es zur Kollision kommt wird nur ein kleiner Teil aller Möglichkeiten durchgerechnet - nämlich 2·(n-2) anstelle von n·(n-1)/2. Darüber hinaus funktioniert meine Methode auch dann, wenn es viele Zusammenstöße in einem einzigen Iterationsschritt gibt. Deine Variante kann in so einer Situation völlig versagen.
Huggy



Anmeldungsdatum: 16.08.2012
Beiträge: 785

Beitrag Huggy Verfasst am: 03. Dez 2012 09:45    Titel: Antworten mit Zitat

In meinem ersten Beitrag habe ich dir eine Möglichkeit aufgezeigt, die Orte und Zeitpunkte von Kollisionen exakt zu bestimmen. Inzwischen sind dir weitere Möglichkeiten genannt worden. Das geht also.

Diese Rechnung ist aufwendiger als deine Abfrage in kurzen Zeitabständen. Sie spart aber an anderer Stelle Zeit. Angenommen, man hat 10 Kugeln und hat exakt ausgerechnet, dass die nächste Kollision in 10 ms stattfindet. Dann braucht man innerhalb dieser 10 ms keine Abfrage zu machen zu machen, ob Kugeln kollidieren. Wenn man die Kugeln im ms-Abstand bewegt, machst du aber bei deiner Methode in dieser Zeit 10*45 Kollisionsabfragen. Nach den 10 ms lässt du die beiden Kugeln stoßen. Es ist danach nicht notwendig, alle Stoßpunkte und -zeiten neu zu berechnen. Das braucht man nur für die Kugeln zu machen, die gerade gestoßen haben. Das sind nur 16 neue Kollisionsberechnungen. Wenn man den Zeitaufwand der Verfahren vergleichen will und im Mittel alle 10 ms ein Stoß stattfindet, wären also 450 kurze Abfragen mit 16 etwas längeren Rechnungen zu vergleichen.
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik