Kollision zweier Kugeln im R²

bene2808

Aktives Mitglied
Hallo Forum,

schon seit Jahren programmiere ich an Simulationen für Gravitation. Dabei werden massebehaftete Kugeln dargestellt, die natürlich auch kollidieren können sollen. Für die Kollision verwende ich den physikalischen elastischen Stoß. Und hier mein Problem: Wenn sich zum Beispiel Planeten in der Simulation bilden, bewegen sie sich meiner Meinung nach (evtl. Einspruch erwünscht!) unrealistisch langsam aufeinander zu. Dies liegt nicht an zu schwacher Gravitation, sondern daran, dass der Impuls der Kugeln der Planeten, der jeweils auf den anderen Planeten gerichtet ist, von den internen Kollisionen abgeschwächt wird. Erhöhe ich allerdings die Impulserhaltung, bildet sich nie ein einigermaßen stabiles System.🙁
Mit diesem Problem ärgere ich mich schon seit Ewigkeiten herum und es muss doch eine einfache brauchbare Lösung geben... Ich habe jetzt eine Demo geschrieben, die ich im Anhang hochgeladen habe. Probiert sie einfach mal aus! Die interessante Methode ist updateCircles(). Außerdem kann man noch die Konstante remainingImpulse verstellen.

Für jede Hilfe (auch nur Ideen) wäre ich dankbar!🙂
 

Anhänge

Dein Problem ist, dass du die Kugeln Zwangsdistanzierst. Daurch verfälschst du deren Potenzial. Atom-Simulationen arbeiten mit dem "Lennard-Jones-Potential".
Ohne diesen Codeblock verhält sich die Gravitation nartürlicher. Ich hab sogar einer fast stabilen trabanten erzeugt.^^
 
Danke schon mal für die Antwort! 🙂

habe jetzt das Zwangsdistanzieren ausgeschaltet, aber dann entsteht auch unnatürliches Verhalten. Die Kugeln kleben manchmal aneinander. In größeren Ansammlungen entstehen außerdem Extrema, sodass diese "Planeten" explodieren oder Kugeln von sich schießen. Das liegt vermutlich daran, dass die Kollisionsformel nicht optimal funktioniert, wenn die Kugeln sich überschneiden. 😕

Vom Lennard-Jones-Potential habe ich jetzt auch schon mehrmals gehört, eine Versuchsimplementierung hat aber auch zu viel zu starker Abstoßung geführt. Dabei hat sich bei manchen Kollisionen auch extreme Beschleunigung entwickelt, die die Kugeln dann aus dem System herauskatapultiert hat...😵

Also wenn es bei dir klappt, dann zeig doch mal bitte deinen Code, das wäre mir echt eine große Hilfe 😀
 

Zurück
Oben