Hallo,
ich möchte mit Visual Basic 6 eine Gravitationssimulation schreiben. Im Modell gibt es zunächst in einem zweidimensionalen Raum einen Planeten und ein Objekt,das von dem Planet angezogen wird, und dessen Orbit ich mit der Simulation darstellen will.
Dazu habe ich folgende Rechnung angestellt:
Variablen (Vektoren sind großgeschrieben, Zahlen klein):
O, P: Ortsvektoren des Objektes und des Planeten
R: Richtungsvektor, der angibt in welche Richtung die Gravitation wirkt (Einheitsvektor)
A: Momentane Gravitaionsbeschleunigung
k: Konstante
f: Gravitaionskraft
mp: Masse des Planeten
mo: Masse des Objektes
Zuerst wird der Richtungsvektor R errechnet und zum Einheitsvektor gemacht, die länge wird später mit dem Gravitationsgesetz errechnet.
R = (P-O) / Betrag(P-O)
Danach nach dem Gravitaionsgesetz f errechnet
f = k * mp * mo / (Betrag(P-O)²)
Nun wird die Gravitationsbeschleunigung A nach F = m*a (A = F / m) mit Richtung und entsprechender Länge errechnet
A = (R * f) / m
danach wird A nur noch zur momentanen Geschwindigkeit addiert und der Ortsvektor O mit der Geschwindigkeit verrechnet.
Diese Berechnungen erfolgen immer im gleichen Zeitabstand (ca. 10 ms). Merkwürdigerweise ist die entstehende Umlaufbahn keine Ellipse wie sie nach Kepler eigentlich sein sollte, sondern eine sich ständig ändernde Umlaufbahn; Egal welche Anfangswerte ich für die Geschwindigkeit wähle (und das Objekt natürlich nicht kollidiert oder aus dem Gravitationsfeld kommt).
Ich dachte zuerst dass es an der hier vernächlässigten Gegenwirkung (Gravitationswirkung von dem Objekt auf den Planeten) liegt, als ich diese hinzugefügt habe hat das aber nichts geändert.
Rundungsfehler kann ich eigentlich auch ausschließen da ich den Datentyp Double verwende, der sehr genau ist.
Wo liegt der Fehler in meiner Rechnung?
mfg
Raber