Koordinaten von Körpern im Sonnensystem?

Status
Es sind keine weiteren Antworten möglich.

rootie

Neues Mitglied
Guten Tag!

Ich schreibe grade als Jahresprojekt für eine Informatikausbildung ein Programm ähnlich "Celestia", dem man Körper mit bestimmten Positionen und Werten vorgeben soll, und das Programm rechnet dann Sekunde für Sekunde die Gravitationskräfte aus und versetzt die Objekte dementsprechend.


Die Grundlegenden Berechnungen habe ich fertigprogrammiert, jetzt würde ich das Programm gerne Testen. Wenn ich Sonne + Erde simuliere (Sonne statisch bei (0|0|0), Erde bei (150.000.000km|0|0)) und der Erde dabei die durchschnittliche Orbitalgeschwindigkeit laut wikipedia (als vektor in z-richtung) gebe, komme ich nach den Berechnungen für ein jahr bis auf 6 mio km an die startposition ran.
Nehme ich den Mond dazu, habe ich in etwa die selben Ergebnisse für die Erde, der Mond aber landet irgendwie 300 mio km entfernt.......

aber ich bin mir recht sicher, dass die Startwerte die ich dem Mond gegeben habe falsch sind (Position wie die der Erde nur z = Abstand Mond-Erde und Geschwindigkeitsvektor = Erdgeschwindigkeitsvektor mit der Mond-Orbitalgeschwindigkeit als x-wert)

Wo bekomme ich richtige Werte? Gibt es überhaupt so etwas wie ein Koordinatensystem in der Form? Wo liegen die Achsen? Und wo bekommt man Positionen / Geschwindigkeitsvektoren für Planeten / Monde / Asteroiden / Satteliten etc?


danke schonmal ;)

mfg
 
Zitat von rootie:
Und wo bekommt man Positionen / Geschwindigkeitsvektoren für Planeten / Monde / Asteroiden / Satteliten etc?
Anfangspositionen und -geschwindigkeiten für die Planeten, Pluto, die Sonne und den Mond gibt es z.B. hier in Tabelle 8.8.1.

Für andere Himmelskörper wird es keine so bequemen fertigen Tabellen geben. Du müsstest dir dann geeignete Bahnelemente besorgen und sie mittels der einschlägigen Formeln selber in kartesische Positionen und Geschwindigkeiten umrechnen. Oder du lässt sie dir direkt vom JPL für das gewünschte Objekt und den gewünschten Zeitpunkt ausgeben, indem du dem Ephemeridenserver sagst, du möchtest als Ephemeris Type nicht den üblichen OBSERVER sondern VECTORS.

Tschau,
Thomas
 
Hallo,

mit dem Thema habe ich mich auch schon beschäftigt...
Welche Schrittweite verwendest du? Bei zu grosser Schrittweite pflanzt sich der Feher sehr schnell fort...
Du musst zuerst für alle Körper die Position P(t+^t) berechnen und abspeichern, erst danach dürfen die neuen Positionen zum Weiterrechnen verwendet werden.
Nicht vergessen, dass auch die Sonne eine beschleunigte Bewegung um das Baryzentrum durchführt.
Für deine Aufgabe wäre zur numerischen Intergation ein Runge-Kutta Verfahren geeignet. Habe ich auch mal in C++ implementiert ;)
Kann dir gerne Unterlagen mailen

CS
Wolfgang
 
Moin!

@ Thomas_Schmidt
Danke für den Link zu dem NASA-Programm, mit den Werten werd ich mal n bissn rumspielen ;)


@ lx200at

ich hab das so gelößt, dass jeder Körper ein Vektorarray sein eigen nennt. In 2 verschachtelten for-Schleifen wird jede Kraft, die jeder Körper auf jeden Einzelnen anderen auswirkt, berechnet und als Vektor in dem Array gespeichert. Erst, wenn diese Berechnungen alle durchgeführt wurden, werden die Arrays addiert, mit der Eigenbewegung (Schwung) verrchnet und die Position verändert.

Als Schrittweite verwende ich im Moment 1 :mauer: da brauch ich für 1 jahr bei Sonne + Erde + Mond etwa 4,5 Minuten für die Berechnungvon einem Jahr. Reicht es nicht, wenn ich die Positionsveränderung, die ich am Ende jeder Sekunde auf die Position addiere, ganz einfach vergrößere (10-fache Positionsverschiebung = 10-fache Zeit, man darf es halt nur nich übertreiben mit der verschnellerung) ?
Oder muss ich das mit in die Formeln einbringen - weil meine Rechenmethode hab ich jetz schön auf 1 sekunde eingestellt, daher fallen bei vielen Umrechnungen viele Werte raus, und die Berechnungen sind einfacher und daher wohl auch schneller. Außerdem ist der Code weitaus besser zu verstehen als vorher^^



mfg
 
Hallo,

da dämmert mir was...
Probier doch einmal ein Schrittweite von 10000s, wenn die Schritweite zu klein ist, dann explodieren die Rundungsfehler förmlich :Trost:

CS
Wolfgang
 
Zitat von lx200at:
Hallo,

da dämmert mir was...
Probier doch einmal ein Schrittweite von 10000s, wenn die Schritweite zu klein ist, dann explodieren die Rundungsfehler förmlich :Trost:

CS
Wolfgang

Moin!
Sorry dass ich mich erst jetz melde, konnte aus persönlichen Gründen nicht weiterarbeiten.....


An Rundungsfehlern kann es nich liegen, ich hab heute moch n bissn rumprobiert, und im Moment funktioniert das bei Schrittweite 1 sek 1a, sobald aber die Schrittweite hochgesetzt wird, werden die Werte falsch. Es ist aber nicht das Problem von vor ein paar Wochen (das war n blöder Programmierfehler -.-) sondern mehr eine Physikalisch-Mathematische Sache denke ich:

Darf ich die physikalischen Berechnungen alle für eine Sekunde machen, um dann nachher die entsprechenden Positionsverschiebungen pro Sekunde zu haben, und dann diese Verschiebung einfach mit der Schrittweite in Sekunden zu multiplizieren, um daraus dann wirderrum die Verschiebung für die "berechnete" Zeit zu bekommen? Solange die Sprungweite nicht zu groß wird, ist das doch hoffentlich kein Problem, Oder?

Ich meine das so:

neue Posi = alte Posi + Schrittweite * (Ausgleichskraft*Gewicht)


Ich meine relativ kleine Genauigkeitseinbußen kann ich verkraften (ich will damit ja keine hochwissenschaftlichen Analysen machen, und falls doch, besorg ich mir halt nen Rechner mit mehr Dampf^^) und zu Vorstellungszwecken sollten 10 bis 100-fache Geschwindigkeit allemal ausreichend sein denk ich...

Außerdem habe ich sowieso am Performancerad gedreht - ich Döspaddel hab natürlich alle Kräfte 2 Mal berechnet, einmal für den einen Körper und dann noch einmal das Gleiche für den anderen -.- Die Berechnungszeit ist nach der Optimierung um etwa 30 bis 40% gesunken^^
 
Hallo rootie,

ich hab so ein ähnliches Programm auch mal geschrieben, allerdings hatte ich die Planetenpositionen nicht direkt selbst berechnet, sondern auf die sog. "VSOP87"-Theorie zurückgegriffen. Die besteht aus einer Sammlung von gewissen vorberechneten Werten für jeden der 8 großen Planeten sowie einem Satz von Formeln, mit denen man aus diesen Werten die Position des Planeten zu einem gegebenen Zeitpunkt berechnen kann. Das ganze gibt es in mehreren Versionen für verschiedene Koordinatensysteme. VSOP87 soll in der Umgebung von +/- 4000 Jahren um heute recht genau sein, für Anschauungszwecke jedenfalls mehr als ausreichend. Es werden aber wie gesagt nur die klassischen Planeten abgedeckt, für andere Objekte muss man sich andere Lösungen suchen. Für den Erdmond hatte ich ELP2000 verwendet, für alles übrige (nur eine Hand voll Asteroiden und Satelliten) einfach konstante Keplersche Bahnparameter.

Bei einigen Problemen hatte ich damals auch hier im Forum nachgefragt und bekam sehr gute Tipps :). Du kannst ja mal meine Beiträge durchforsten, vielleicht findest Du was nützliches.

Ich kann dir den Code auch schicken (ist C++), schreib mir einfach eine PM.
 
hmmm....interessant, speziell was die Koordinatensysteme angeht, wobei ich mit dem Nasa-Tool schon zurecht komme ;) aber mal gucken was da sonst noch so alles steht^^

und da ich die gesamten Berechnungen schon habe (zumindest so einigermaßen^^), wäre es n bissn blöde sich mit den gesamten Daten jetz im Programm von irgendwo anders zu ziehen, als Datenquelle is das aber eine gute Sache

danke dir ;)


bleibt halt noch die Frage mit der Berechnung, darf man das so einfach machen, oder muss man da so kompliziert rangehen?

mfg
 
Hallo,

>Ich meine das so:

>neue Posi = alte Posi + Schrittweite * (Ausgleichskraft*Gewicht)


Das klappt aber nur bei einer Schrittweite von 1, wenn du SI-Einheiten verwendest dann ist das eben 1 Sekunde…


Ich würde einmal so vorgehen:

Anfangsbedingungen: Position ist p0 (x,y,z), und Geschwindigkeit v0 (x,y,z), für jeden Körper.
Berechne für jeden Körper die resultierende Beschleunigung in a (x,y,z) zum Zeitpunkt t0.
Danach berechnet sich die neue Position zum Zeitpunkt t0+ dt

p1 = p0 + v0*dt + (a*dt^2)/2

Das wäre einmal ganz einfach und numerisch nicht gerade optimal. Es gibt viel bessere Verfahren, die aber wahrscheinlich deinen Rahmen sprengen würden.
 
und da ich die gesamten Berechnungen schon habe (zumindest so einigermaßen^^), wäre es n bissn blöde sich mit den gesamten Daten jetz im Programm von irgendwo anders zu ziehen

Klar. Erst recht wenn Du vielleicht auch eine gewisse Vorgabe bezüglich der Vorgehensweise hast. Deine Methode ist ja völlig anders, sie setzt viel niedriger an als meine. Für's Verständnis der Zusammenhänge ist das auch viel besser (ich hab ehrlich gesagt nie verstanden bzw. gar nicht erst -versucht- zu verstehen, wie VSOP87 eigentlich funktioniert, ich hab es einfach implementiert und war zufrieden, dass es funktioniert hat ;)). Dafür wird es für dich wahrscheinlich sehr viel schwieriger, eine einigermaßen stabile und eventuell auch noch schnelle Lösung zu entwickeln, da du ja praktisch bei Null anfängst. VSOP87 ist die übliche Methode, Celestia und Stellarium benutzen das auch.
 
Zuletzt von einem Moderator bearbeitet:
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben