Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Kollisionen von Kreisen

  Alt 4. Aug 2008, 04:50
Frage mich bitte keiner mehr woher ich das habe, aber vor einigen Jahren hab ich irgendwo eine rein vektorielle Lösung entweder ge- oder erfunden, die ohne Trigonometrie und ohne Verschiebungen auskommt. Das einzig seltsame bei der Sache ist, ist dass der Gesamtimpuls mehr oder minder schwankt, im Mittel aber relativ stabil bleibt.
Ich habs nie produktiv im Einsatz gehabt, das Resultat schaut erstmal recht richtig aus, aber meine Hand würde ich dafür heute nicht mehr ins Feuer legen wollen. Ich hab grad auch fix versucht nachzuvollziehen nach welchen Regeln das läuft bzw. ob und wie man sich das Geometrisch herleiten könnte, aber schaut mal auf die Uhr...

Wichtig ist, dass das nur für den perfekt elastischen Stoß gleich großen Kugeln gilt, und Reibung wie sie für den Einfluss der Drehung interessant wäre wird nicht berücksichtigt. (In welchem Maße sie das tut ist übrigends völlig beliebig je nach Beschaffenheit der Kugeln. Da wird man keine allgemeingültige Aussage zu machen können.)

Prinzip:
V1 und V2 seien die Richtungsvektoren der kollidierenden Bälle.
S1 sei (V1-V2), und S2 ein dazu orthogonaler Vektor (S1.y; -S1.x)

Man bilde die 4 Vektoren E1, E2, K1, K2:
E1 = V1*S1*S1
E2 = V2*S1*S1
K1 = V1*S2*S2
K2 = V2*S2*S2
(Beachte: Die erste Multiplikation ist das Skalarprodukt, die zweite eine Skalierung der letzten Vektoren S1 bzw. S2)

Dann sind die neuen Richtungsvektoren V1' und V2'
V1' = E2 + K1
V2' = E1 + K2


Ich hab das Projekt von damals mal angehängt. Man verzeihe mir dabei den stümperigen Timer und sehr wahrscheinlich sehr suboptimalen Code - das war nur eine Konzeptstudie

Aber wie gesagt: Ich gebe keine Gewähr auf Richtigkeit. Wenn es aber korrekt ist, ist es ausgesprochen elegant.

Edit: Wenn man bei der Bildung von E* und K* nach der ersten Multiplikation noch durch die Länge von jeweils V1 bzw. V2 dividiert bleibt der Gesamtimpuls stabiler, und der Term erinnert schon deutlich eher an die Winkelberechnung zwischen Vektoren. Jedoch bleiben die Kreise im angehängten Programm auf diese Weise öfter ineinander hängen, wodurch man sie zusätzlich dann noch etwas zurecht schieben muss um das zu verhindern. Ist ja nicht unüblich bei Kollisionsklamotten in einem diskreten System.
Angehängte Dateien
Dateityp: zip balls_109.zip (205,6 KB, 21x aufgerufen)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat