![]() |
Physikgesetze zur Simulation unseres Sonnensystemes
Hallo,
ich bin dabei eine Simulation für das Mehrkörperproblem zu schreiben und brauche den ein oder anderen physikalischen Rat, da das schon etwas her ist (Keppler, Newton, Massen ziehen sich an, Zentrifugalkraft, ...) Erst mal kurz zur Erklärung, wie ich da ran gehen wollte: TUniversum (fungierend als Liste) TKörper (die Elemente von TUniversum, Planeten)
Ich habe jetzt einige Punkte rausgelassen, das wäre die Geschwindigkeit, die Richtung, etc., das müsste ich nicht unbedingt speichern, da ich diese - zur neuen Positionsbestimmung - immer neu berechnen muss. Desweiteren wäre da die Exzentrizität (keine Ahnung ob ich die brauche). Bevor ich überhaupt anfange, möchte ich wissen, ob ich das überhaupt so angehen kann, oder ob das nicht viel komplizierter ist. Nehmen wir mal an die Sonne bewegt sich nicht vom Fleck und alle Planeten kreisen drumrum. Dann würde ich im Jahre 2000 anfangen, wo die alle ziemlich in einer Reihe standen. Dann muss ich für je nach Delta t alls 1/x Sekunden die neuen Kräfte, Geschwindigkeiten, Positionen, etc. berechnen. D.h. ich addiere alle Kräfte zu den anderen Planeten zusammen + der Zentrifugalkraft. Dann habe ich einen Richtungsvektor. Aber dann fehlt mir noch die Geschwindigkeit, da sie sich ja nach den Kepplerschen Gesetzen verändern (Ellipse -> "Die Fahrstrahlen der Planeten überstreichen in gleichen Zeiträumen gleiche Flächen."). Das wird sicherlich ein Problem. Wenn ich das Erwähnte berücksichtige, bewegen sich die Planeten dann wirklich in Bahnen oder brauche ich noch Exzentritäten o.ä.? Ich hoffe ihr könnt mir helfen ein wenig Licht ins Dunkelne zu bringen. :mrgreen: |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Die Länge des Richtungsvektors ist bereits die Geschwindigkeit. Die Planeten müssen ja am Punkt 0 mit einer Anfangsgeschwindigkeit-/richtung initialisiert werden, sonst fallen sie ja einfach in deine Sonne ;). Wenn du dann die Einflüsse aller Kräfte auf diesen Anfangsvektor anwendest, beinhaltet der neue natürlich auch schon die Geschwindigkeit.
Was oftmals vergessen wird ist, dass Geschwindigkeit bereits eine gerichtete Größe ist, und nicht wie im Alltag oft gebräuchlich nur ein Skalar. (Zu dem wird sie, wenn man sie nur in der gerade vorherrschenden Richtung betrachtet, was u.a. die Längenberechnung dieses Vektors tun kann.) |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Mir ist noch nicht klar, was genau du machen willst. Keplers Gesetze modellieren ja ein ideales Universum. Dafür bräuchtest du nur die exakten Daten der Ellipsen und könntest über die Gesetze die jeweilige Position der Planeten auf diesen zu einem gegebenen Zeitpunkt berechnen.
Oder willst du eine reale Körpersimulation bauen? Dafür brauchst du dann wirklich Beschleunigung, Geschwindigkeit, Position. Zentrifugalkraft allerdings nicht, das ist eine Scheinkraft ;) . In diesem Fall könnten - im Gegensatz zu Keplers statischem Modell - sich allerdings Ungenauigkeiten hochschaukeln, was neben dem Zeit-Delta vor allem von den Startparametern abhängt: Anfangsposition und -geschwindigkeit jedes einzelnen Körpers. Genauer gehst du so vor: Jeder Körper besitzt eine Position p und einen Geschwindigkeitsvektor v. Wie du schon beschrieben hast, summierst du die Kräfte zu allen anderen Körpern und kommst so auf einen Beschleunigungsvektor a. Die neue Geschwindigkeit ist dann v' = v + dt * a und die Position p' = p + dt * v. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
@Medium: Danke für den Hinweis. Sowas vergesse ich gerne mal. :stupid:
@Khabarakh: Ich möchte eigentlich eine Simulation schreiben, die das Merhkörperproblem verdeutlicht. (Teil meiner Abiturpräsentation) D.h. möglichst oft die Position neu zu berechnen. Weitere Einschränkungen habe ich nicht. Wenn ich dich richtig verstanden habe, läuft das doch auf eine reale Körpersimulation hinaus. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Wir haben in der Uni mal dasselbe simuliert und dabei einen Runge-Kutta verwandt, wobei Zwischenschritte noch interpoliert wurden, um bei reduzierter Anzahl Integrationsschritte noch eine "flüssige" Bewegung zu haben. Angehangen habe ich Dir mal die Startwerte für die Planeten, die wir damals benutzt haben. Es sind für Sonne, Planeten und unseren Mond die Position und Geschwindigkeit zu verschiedenen Tagen angegeben. Als Startwerte reichen natürlich pro Körper ein Satz von Daten, die anderen kannst Du aber vielleicht zur Kontrolle benutzen. IIRC waren das nämlich "echte" Daten :-) |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
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 |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Ich versuche mal, auf ein paar Aspekte einzugehen:
Zitat:
Zitat:
Zitat:
![]() Zumindest di Konstante kommt mir spanisch vor - das sollten 6,67*10^-11 sein ... Zitat:
Du musst die Kraft noch durch die Erdmasse teilen. Und die Kräfte wirken immer auf der direkten verbindungslinie - Wenn die Kraft nur ein Skalar ist, musst du sie mit dem normierten Differenzvektor multiplizieren. Zitat:
Zitat:
Zitat:
Zitat:
Puh, das wäre alles - ich hoffe ich konnte helfen ^^ Was die Skalierung angeht: Du braucht einen Skalierungsfaktor der angibt, wieviele km pro Pixel angezeigt werden sollen. Oder du schrumpfst von vornherein die Bahnen der Planeten, musst dann aber ihre Massen ebenso anpassen ... |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Hmmmm, also erstmal haben die Planeten auch eine kleine Wirkung auf die Sonne, demnach kann man ihren Richtungsvektor nicht einfach weglassen.
Wenn die Sonne in der Bildschirmitte bleiben soll, dann könnte man nach jedem Durchgang alle Positionen so verschieben, daß die Sonne wieder in der Mitte ist. Oder man läßt die Positionen und verschiebt es nur für die Anzeige, wobei man zu diesem Zeitpunkt auch gleich so skallieren kann, daß alles Wichtige sichtbar ist. Im Grunde hast du einen Richtungsvektor in Form einer "Kraft", aus Richtung und Geschwindigkeit (also könnte man die Geschwindigkeit auch gleich nur als "Kraft" speichern). Und dann hast du nochmals "Kräfte", zwischen den einzelnen Objekten. In jedem Durchlauf berechnest du alle Vektoren/Kräfte (wie schon richtig erkannt, aus den aktuellen Werten des letzten Durchlaufs), verrechnest dann alle und hast die neuen Werte für den aktuellen Durchlauf. Mit diesen neuen Vektoren verschiebst du nun alle Objekte ein "Stückchen". (Weg * Kraft * Schrittweite in die Richtung des Vektors) Kraft=Energie Das Problem ist dabei allerdings daß, je größer die Rechenschritte sind, also je größer "Schrittweite" ist, desto ungenauer werden die Berechnungen. PS: Geschwindigkeit ist ja auch abhänging von der Zeit und die Zeit ist hier erstmal relativ egal. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
Zitat:
jfheins hat das alles schon physikalisch korrekt erklärt, da habe ich nichts mehr hinzuzufügen :) . |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
@jfheins:
Vielleicht wäre es doch einfacher, wenn ich die Sonne mitberechne und die Planeten so verschiebe, dass die Sonne wieder in der Mitte ist. Das mit der Konstante: Gut, dass das nicht mein Lehrer gesehen hat. :mrgreen: Anscheinend habe ich das geschrieben, ohne darüber nachzudenken. ;) Für die Beschleunigung muss ich natürlich noch durch m0 teilen, tut mir leid ... wieder geträumt. :( Zitat:
Zitat:
Zitat:
@himitsu & Khabarakh: Wie schon gesagt, ich lasse die Sonne mitbewegen und verschiebe das Ganze Sonnensystem nach jedem Durchlauf. Ich danke euch Dreien für eure Hilfe. Ich werde mich gleich mal an die Programmierung machen und sehen, was dabei rauskommt. Und noch mal einen ganz großen Dank an Christian S. für die Daten. :bouncing4: |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Siehe Anhang ;) Zitat:
Zitat:
\vec{F}=G\frac{mM}{||r||^2}\cdot \underbrace {\frac{\vec{r}}{||\vec{r}||}}_{Laenge 1} = G\frac{mM}{||r||^3}\cdot \vec{r} \\\\ r\ ist\ der\ Vektor\ zwischen\ den\ Planeten |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Ich hätte eine Idee, wie man sehr viele Körper verrechnen könne.
- lege ein Gitter über den Raum - je Feld eine Liste - dann wird jeder Körper in der Liste eingetragen in wessen Feld er gerade ist (natürlich muß dieser dann noch verschoben werden, wenn er in ein anderes Feld reinrutscht) - nun muß man nur noch die benachbarten Felder nach Körpern absuchen, anstatt immer alle Körper durchzugehn. - jetzt werden erstmal ale Körper im selben Feld verrechnet, - dann sucht man in allen Feldern ringsrum anderen Körpern (der Radius der Suche wäre die doppelte der Entfernung, bis wohin sich zwei Körper mit der Masse des aktuellen Körpers noch spürbar beeinflussen würden) bei gleich großen oder größeren Körpern immer nur die miteinander verrechnen, welche rechts daneben und/oder darunter liegen (nach dem man so alle Felder durchgegangen ist, dürfte alles miteinander verrechnet sein) Also mit Göße meinte ich sozusagen die Masse/Anziehungskraft des Körpers. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Hmmm ... naja ...
Also erstmal ist das Sonnensystem ziemlich dünn mit Planeten besetzt - da ist so ein Raster imho noch nicht notwendig. Außerdem ließe sich das vereinfachen: Die Sonne bekommt eine Sonderstellung und jeder andere Himmelskörper bekommt einen weiteren angegeben um den er kreist. Das läuft aus gleiche hinaus ;) Die Planeten kreisen um die Sonne und die Monde um ihre jeweiligen Planeten. Das weis man vorher bereits und das ändert sich auch nicht ;) Ansonsten hört sich das nach dem ![]() |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Eh, die Idee ist gut, da gibt es dann ja auch weniger Listen, wenn man jeden Körper an einen anderen Körper "bindet", von welchem man gerade am Meißten angezogen wird.
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Für die paar Körper kann man einfach die Kraft jedes Körpers auf jeden anderen ausrechnen. Das schafft selbst ein 10 Jahre alter Rechner noch locker ;-)
@jfheins: Deinen Formel-Anhang solltest Du nochmal prüfen, Du kommst da auf sowas wie F = irgendwas * F, was nur für F = 0 oder irgendwas = 1 gilt ;-) Es reicht doch auch einfach, alle Vektorkomponenten sauber auszurechnen. Wozu noch mit irgendwelchen Einheitsvektoren und Beträgen hantieren, das macht's doch nur unnötig kompliziert. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
> die Entfernung und Kräfte/Energien Wenn man Anziehungskräfte und die Bewegungsenergie in der selben Einheit speichert, dann kann man diese dann direkt verrechnen, welche sehr gut in so'nen Double/Extendet reinpaßt. Wenn das Model dann mal richtig läuft, dann kann man immernoch Umrechnungsfaktoren in reale physikalische Werte erstellen. |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
Zitat:
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Zitat:
Zitat:
Zitat:
|
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Hi,
ich habe ein kleines Problem, vielleicht einfach nur einen Denkfehler. Wenn ich z.B. aus Christian S.'s den Richtungsvektor vom Merkur am 11. Dezember 2001 nehme (0,022484267 0,001329795 -0,001620828) und folgendes berechne, müsste ich die Momentangeschwindigkeit bekommen, oder? |(150/86400) * [0.022484267;0.001329795;-0.001620828]| Ich habe den Richtungsvektor (in AU/Tag) mit 150/86400 multipliziert (AU/Tag -> km/s), das entspräche dann in etwa km/s, oder? Die Länge des Richtungsvektores wäre dann die Geschwindigkeit im km/s Das Ergebnis der obigen Zeile entspricht dann: 3.92·10^-5 km/s und das kann ja nicht sein (Vergleich: Mittlere Orbitalgeschwindigkeit vom Merkur: 47,87 km/s [Quelle: Wikipedia]) Kann mir jemand helfen, wo mein Denkfehler / Rechenfehler liegt? |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Richtungsvektor (in AU/Tag) / 86400 [s/Tag] * 149597870 [km/AU] = [km/s]
Eine Astronomische Einheit hat 150 Millionen Kilometer ;) |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Danke dir, das sagt wohl alles aus: :wall:
:mrgreen: Ein anderes Problem (ich glaube es ist eher ein physikalisches, daher nur Pseudocode):
Code:
Die Planetenbewegungen sehen nicht sehr natürlich aus und wenn ich ehrlich bin, bin ich beim Tippen dieses Beitrages in mehreren Zeilen gestutzt. Vielleicht komme ich noch selbst darauf, was ich falsch gemacht habe, ansonsten bräuchte ich nochmal eure Hilfe. :oops:
# Mir liegen die Werte in den Grundeinheiten vor, d.h. m, s und kg
# Vektoren (Richtung und Position) enthalten X, Y, Z PlanetX = Aktueller Planet, für den gerade neue Werte berechnet werden Mache mit allen Planeten (jeweils PlanetY), wenn PlanetX <> PlanetY: Kraft := (0.0000000000667428 * PlanetX.Masse * PlanetY.GetMasse) / (Abstand(PlanetX, PlanetY)) Summe := Summe + Kraft * (PlanetY.Position - PlanetX.Position) # Neue Richtung (gerichtete Geschwindigkeit) PlanetX.Richtung := PlanetX.Richtung + (dt * (Summe / PlanetX.Masse)) PlanetX.Position := PlanetX.Position + (dt * PlanetX.Richtung) |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Ich seh den Fehler :mrgreen:
Wie sieht Abstand() aus? ich vermute, du nimmst hier die normale euklidische Norm. Dann muss da aber Abstand^3 stehen ;) Das liegt daran, dass du nachher noch einmal den Abstand drauf multiplizierst. Würdest du nachher den Vektor auf 1 normieren (da, wo du die Kraft zur Summe addierst) müsstest du immernoch durch Abstand^2 teilen. So, wie das jetzt da steht, spielt der Abstand keine Rolle für die Größe der Kraft. Das wäre sicherlich ein interessantes Universum :mrgreen: |
Re: Physikgesetze zur Simulation unseres Sonnensystemes
Ja danke, das ist mir dann irgendwann auch aufgefallen. ^^
Code:
Wenn ich mich nicht irre, ist in meinem letzten Beitrag ein Fehler drin. Die Position berechnet sich: s = 1/2 * a*dt^2 + v0*dt + s0
# Mir liegen die Werte in den Grundeinheiten vor, d.h. m, s und kg
# Vektoren (Richtung und Position) enthalten X, Y, Z PlanetX = Aktueller Planet, für den gerade neue Werte berechnet werden Mache mit allen Planeten (jeweils PlanetY), wenn PlanetX <> PlanetY: Kraft := (0.0000000000667428 * PlanetX.Masse * PlanetY.GetMasse) / (Abstand(PlanetX, PlanetY)) Summe := Summe + Kraft * (PlanetY.Position - PlanetX.Position) # Neue Richtung (gerichtete Geschwindigkeit) PlanetX.Richtung := PlanetX.Richtung + (dt * (Summe / PlanetX.Masse)) PlanetX.Position := PlanetX.Position + (dt * PlanetX.Richtung) Ich hatte die Position aber mit s = s0 + dt (v0 + dt * a) berechnet. Ausmultipliziert heißt das: s0 + v0*dt + a*dt^2. Da scheint 1/2 abhanden bekommen zu sein. Dennoch bin ich mit beiden Rechnungen nicht zufrieden, da ich selbst bei einem dt von 1 Sekunde nach 1 Tag Abweichungen habe (Werte mit der Datei von Christian S. abgeglichen). Die X-Koordinate der Sonne z.B. hat eine Abweichung von 0,000000061. Da die Koordinaten in Astronomischer Einheit angegeben sind, beträgt die Abweichung 9 km nach einem Tag. Das ist zwar nicht sehr viel, aber woher kann das kommen? Andere Körper im Weltall, die ich in meiner Simulation nicht berücksichtige? Ungewollte Rundungen seitens des Computers? EDIT: Das mit der Abweichung hat sich erledigt. Seitdem ich noch die anderen Himmelskörper hinzugefügt habe (Pluto und Mond) war eine Abweichung kaum noch messbar. Mittlerweile bin ich mir auch sicher, dass mein Weg schon richtig ist. Es gibt ja auch die Formel s = a*t^2, wobei hier a die Endbeschleunigung und nicht die Durchschnittsbeschleunigung ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz