Registriert seit: 20. Nov 2009
8 Beiträge
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
27. Feb 2010, 22:30
Hi,
auch wenn es schon etwas her ist, möchte ich meinen Thread noch einmal ausgraben.
Ich habe mich jetzt entschieden, wie ich das Ganze programmieren möchte (von der physikalischen Seite aus):
Nehmen wir einmal an ich habe nur 3 Körper im Universum: Sonne, Erde, Jupiter.
Dann müsste ich über jeden Körper (Ruhe-)Masse m0, Startposition x0 (als Vektor) und Momentangeschwindigkeit v0 an dem Punkt, auf den der Vektor x0 zeigt, wissen.
Da die Sonne bei mir in der Mitte des Bildschirmes stehen bleiben soll, habe ich mir gedacht, dass ich von der Sonne nur m0 und x0 brauche und diese Werte konstant bleiben.
F(Koerper1, Koerper2) = (9,61 * m0(Koerper1) * m0(Koerper2)) / |x0(Koerper1) - x0(Koerper2)| // Das ist die normale Formel um die Kraft zwischen 2 Körpern zu berechnen.
Jetzt würde ich wie folgt die Position von Erde und Jupiter ausrechnen:
a(Erde) = [F(Sonne, Erde) * (x0(Sonne) - x0(Erde))] + [F(Jupiter, Erde) * (x0(Jupiter) - x0(Erde))] // Wenn ich x0 von Erde von x0 von Sonne subtrahiere, habe ich ja letzlich einen Vektor von dem Punkt der Erde zum Punkt der Sonne, der dann nur noch mit der Anziehungskraft "gewichtet" werden muss. Am Ende werden alle gewichteten Vektoren zwischen den Planeten aufaddiert, sodass ich die Richtung und Beschleunigung in einem Vektor habe. Nach meinem Vorgehen, habe ich in a jetzt einen Richtungsvektor, wohin der Planet fliegt, und auch wie "schnell".
v(Erde) = v0(Erde) + dt * |a(Erde)| // a darf hier natürlich nicht der Vektor sein, sondern muss die Länge des Vektors sein, deshalb Betragsstriche. Oder muss ich doch den Vektor a nehmen? Brauche ich nur die Geschwindigkeit als Zahl in v oder ist v ein Vektor (Geschwindigkeitsvektor)? Das ist nämlich schon mal mein 1. Problem.
x(Erde) = x0(Erde) + dt * v(Erde) // Hier müsste v(Erde) nämlich ein Vektor sein ...
Dann würde ich die 3 Zeilen (a, v und x) noch einmal für den Jupiter ausrechnen, allerdings würde ich da nicht die neuen Werte von der Erde nehmen, sondern noch die "alten". Ich denke das gibt weniger Ungenauigkeitsfehler, wenn mein dt hinreichend klein ist.
Neben dem Problem mit der Geschwindigkeit / mit dem Geschwindigkeitsvektor, habe ich noch ein 2. Problem, die "Verhältnisse". Bei der Berechnung der Beschleunigung, gewichte ich ja die Vektoren zw. den einzelnen Planeten mit der Kraft zwischen ihnen, bevor ich alle Vektoren zusammenaddiere. Kann ich das so lassen, oder muss ich noch Faktoren einfügen? Ich weiß nicht wie ich das erklären soll, aber ich befürchte so, werden meine Planeten in null-komma-nix vom Bildschirm fliegen. Schließlich gibt mir F einen Wert in Newton zurück. Ich kann mir beim besten Willen nicht vorstellen, dass ich den einfach mit einem Vektor multiplizieren kann.
Bezüglich des dt kann ich einfach eine beliebige Zahl einsetzen, ohne dass ich dadurch die anderen Werte (verhältnismäßig) ändern müsste, oder? Ich nehme mal an, dass bei dt = 1 jede Stunde die Planeten neu berechnet werden. Ist das richtig so?
Bevor das Thema gleich aufgegriffen wird: Ich möchte es erstmal ganz einfach machen, bevor ich mich an Runge-Kutta & Co ranmache.
Viele Grüße und ein schönes Wochenende noch.
Alex
|