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!
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!