Anzeige
Seite 1 von 24 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 236

Thema: kleiner planetarer Simulator

  1. #1
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard kleiner planetarer Simulator

    Anzeige
    Wie im anderen Thread besprochen, eröffne ich einen neuen Thread um keinen zu stören.
    Also es gibt eine neue Version (1.9.1)

    Hier die Neuerungen:

    Die Buttons wurden durch Kreise ersetzt was viele Vorteile hat.
    Die Initialisierung mit dynamischen Objekten ist wesentlich einfacher, das findet sich im Code noch nicht wieder.
    Neben dem ästhetischen Faktor wird über den Kugelradius auch die Masse der Planeten wiedergegeben. Das läuft über die nicht ganz realitätsgetreue Formel.:
    r :=sqrt(m)+5

    Das Programm läuft bis auf Weiteres noch in 2D und mit GDI+. Der Downloadlink ist immer noch der Gleiche über Skydrive


    mfg
    Geändert von Kibo (27.09.2012 um 22:46 Uhr) Grund: 1.9.1
    101010

  2. #2
    Registriert seit
    12.11.2005
    Beiträge
    5.205

    Standard

    Zitat Zitat von Kibo Beitrag anzeigen
    Also es gibt eine neue Version (1.9.1)
    Hi Kibo,

    nettes Programm. Man sieht sogar eine Perihelbewegung des innersten Planeten. Die rote Linie gehört vermutlich also zu Merkur? Hast Du den BS-Integrator verwendet?

    Das läuft über die nicht ganz realitätsgetreue Formel.: r :=sqrt(m)+5
    Die Sonne würde ich etwas kleiner darstellen, weil die Merkurbahn schon fast die "Sonnenoberfläche" streift.
    Gruß

  3. #3
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard

    Hallo Bernhard,

    Der Code für die physikalischen Berechnungen ist komplett selbst geschrieben, ich wollte einfach meine Kenntnisse auf dem Gebiet auffrischen und habe mir daher meine eigenen Gedanken gemacht weil man dabei mehr lernt.
    Wäre ich auf größere Hürden gestoßen, hätte ich mir natürlich euren Quellcode genauer angeschaut. Wenn du möchtest, schicke ich dir mal meinen Code zu.
    Was die Größenverhältnisse angeht, steht da noch nicht fest wie ich es am Ende haben möchte. Die Körper sollen halt alle gut sichtbar sein aber eben auch die Massenverhältnisse wiederspiegeln.

    Das Beispielsystem soll nicht unser Sonnensystem darstellen, ich habe einfach ein bisschen mit Zahlen herumgespielt bis ein halbwegs stabiles System da stand.
    Die Werte für die Planeten können in der Datei Planeten.txt nach belieben angepasst werden. Man kann auch noch mehr Objekte hinzufügen (wobei das noch nicht ganz nach meiner Zufriedenheit funktioniert).

    mfg
    Geändert von Kibo (28.09.2012 um 13:57 Uhr)
    101010

  4. #4
    Registriert seit
    12.11.2005
    Beiträge
    5.205

    Standard

    Zitat Zitat von Kibo Beitrag anzeigen
    Wenn du möchtest, schicke ich dir mal meinen Code zu.
    Hi Kibo,

    da ich momentan etwas im Zeitdruck bin, wäre es mir lieber, wenn Du kurz beschreiben würdest, welche Integrationsmethode Du verwendet hast.
    Gruß

  5. #5
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard

    Nun ich habe 2 Schleifen, dort nehme ich einen Planeten, berechne Entfernung, Masse und Richtung zu einem anderen Planeten und addiere diesen Vektor mit dem schon vorhandenen Impuls. Das mache ich so lange bis jeder Körper zu jedem anderen in Beziehung steht. Das ist so in etwa der Kern.
    101010

  6. #6
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard

    Es gibt ein etwas größeres Update auf Version 1.10!

    Es wurde ein kleines Formular zur direkten Manipulation der Himmelskörper integriert, ausserdem kann man jetzt mit den hoch und runter Tasten zoomen.

    Die Änderungen gehen mit einem erheblichen Gewinn an Benutzerfreundlichkeit (und Spaß ) einher, von daher kann ich den Download nur wärmstens empfehlen!

    Downloadlink

    mfg
    101010

  7. #7
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard

    Guten Abend,

    Es gibt mal wieder ein Update, Ich bin mitlerweile bei Version 1.12 angelangt.
    Diese ist nun endlich in der Lage mit einer beliebigen Anzahl an Testkörpern umzugehen. Ich habe den Physikteil erheblich verbessert, sodass sich keine Ungenauigkeiten aufgrund von veränderten Planetenanzahlen ergeben sollten. Ich habe soweit Ich das sehe nun alle Bugs behoben, damit ist das jetzt der stabile Release von Version 1.
    Das ist auch der letzte Release der GDI verwenden wird für Version 2 in 3d steige ich dann auf OpenGl um.

    Falsl jemand Lust hat, würde Ich gerne den Integrator besprechen, Ich wäre interessiert mehr zu dem Thema zu erfahren, mein jetziger Integrator ist ja komplett von mir selbst zusammen geschustert ohne das ich dazu auch nur eine Seite Theorie zu gelesen habe, daher weiß ich nicht einmal auf welchem Niveau an Genauigkeit und Schnelligkeit der nun arbeitet.
    101010

  8. #8
    Registriert seit
    12.11.2005
    Beiträge
    5.205

    Standard

    Zitat Zitat von Kibo Beitrag anzeigen
    Falsl jemand Lust hat, würde Ich gerne den Integrator besprechen, Ich wäre interessiert mehr zu dem Thema zu erfahren, mein jetziger Integrator ist ja komplett von mir selbst zusammen geschustert ohne das ich dazu auch nur eine Seite Theorie zu gelesen habe, daher weiß ich nicht einmal auf welchem Niveau an Genauigkeit und Schnelligkeit der nun arbeitet.
    Hi Kibo,

    ohne explizite Vorkenntnisse hast Du ziemlich sicher das Eulersche Polygonzugverfahren implementiert. Sobald man weiß, was die Ableitung einer Funktion einer Veränderlichen ist, kann man das mehr oder weniger intuitiv verstehen. Etwas ausgefeilter ist das Runge-Kutta-Verfahren. Versuche also erst mal Dein aktuell eingesetztes Verfahren anhand dieser Links zu verbessern.

  9. #9
    Registriert seit
    07.08.2009
    Ort
    Neubrandenburg, Deutschland
    Beiträge
    2.063

    Standard

    Hallo Bernhard,

    Ich weiß nicht so genau ob das Eulersche Polygonzugverfahren meinem entspricht. Ich fasse einfach mal mein Verfahren zusammen, sonst kann man ja schlecht drüber reden.

    Also ich habe 2 Schleifen, die dienen zum bestimmen welcher Planet gerade mit der Berechnung dranne ist. Zum beispiel wird gerade der Planet a von b beinflusst.
    Ich speichere zuerst den jetzigen Impuls von a (liegt in a.ix und iy) in die Hilfsvariablen a.hx und a.hy, wichtig später für die Trägheit. Dan kommt die Gravitationsberechnung die b auf a ausübt, die läuft über eine Methode die in der Planetenklasse steht. Ich bestimme den Vektor zwischen a und b mit
    this.xd:=gegner.x-this.x
    this.yd:=gegner.y-this.y

    Daraus berechne ich den Abstand zwischen a und b.
    abstand:=sqrt(this.xd*this.xd+this.yd*this.yd)

    aus dem Vektor und dem Abstand kann na dann leicht den Einheitsvektor bestimmen.
    this.xn:=this.xd/abstand
    this.yn:=this.yd/abstand

    Ich berechne dann die Stärke der Gravitation aus dem Abstand und der Masse der Planeten
    this.s:=0.667384*gegner.m*this.m/(abstand*abstand)

    Als Nächste schreibe ich die Gravitation noch in einen Vektor...
    this.gx:=this.s*this.xn
    this.gy:=this.s*this.yn

    und addiere den neuen Impuls auf den alten auf.
    %Planeten%.ix := %Planeten%.hx + %Planeten%.gx /(genauigkeit * %Planeten%.m)
    %Planeten%.iy := %Planeten%.hy + %Planeten%.gy /(genauigkeit * %Planeten%.m)
    Genauigkeit soll hier die Schrittweite bestimmen. %Planeten% ist der Dynamische Aufruf für den jetzigen Planeten also a (innerhalb der Klasse war das dann this für a und Gegner für b)

    das war der inhalt der inneren Schleife, die wird nun für jeden anderen Planeten noch für a ausgeführt und am Schluss, wenn man alle Gravitationseinflüsse für a berechnet hat, werden die neuen Koordinaten für a bestimmt
    %Planeten%.x:=%Planeten%.x+ %Planeten%.ix/genauigkeit
    %Planeten%.y:=%Planeten%.y+ %Planeten%.iy/genauigkeit

    das Ganze wird durch die äußere Schleife noch für alle anderen in die Planeten.txt eingetragenen Planeten wiederholt.

    Wäre nett wenn du mal drüber schauen würdest Bernhard
    101010

  10. #10
    Registriert seit
    12.11.2005
    Beiträge
    5.205

    Standard

    Anzeige
    Zitat Zitat von Kibo Beitrag anzeigen
    aus dem Vektor und dem Abstand kann na dann leicht den Einheitsvektor bestimmen.
    this.xn:=this.xd/abstand
    this.yn:=this.yd/abstand
    Hallo Kibo,

    den Einheitsvektor braucht man eigentlich gar nicht. Besser man speichert die Differenz zwischen dem Ort des aktuellen Planeten und dem Ort des "Gegners" in einem Hilfsvektor h. Dann berechnet man über das Skalarprodukt dieses Vektors mit sich selbst das Quadrat des Abstandes sqr_abstand und zieht dann die Wurzel aus diesem Wert, um zuletzt den Abstand zu bekommen.

    Ich berechne dann die Stärke der Gravitation aus dem Abstand und der Masse der Planeten
    this.s:=0.667384*gegner.m*this.m/(abstand*abstand)
    Mit den eben erwähnten drei Variablen sieht das dann folgendermaßen aus:

    Beschleunigung(Planet) = 0.667384 * gegner.m * h / (sqr_abstand * abstand)

    Man bekommt dann die Beschleunigung gleich als Vektor und vermeidet auch, dass man aus einer Größe zuerst die Wurzel zieht und diese dann wieder quadriert.

    ZUsätzlich kann man anstelle von der Masse eines Planeten mit der kombinierten Variablen 0.667384 * gegner.m rechnen. Die Gravitationskonstante wird also einfach in die Masse fest rein multipliziert. Das spart haufenweise überflüssige Multiplikationen. Die Masse alleine wird im gesamten Programm nämlich gar nicht benötigt.

    Als Nächste schreibe ich die Gravitation noch in einen Vektor...
    this.gx:=this.s*this.xn
    this.gy:=this.s*this.yn
    Dieser Schritt entfällt dann.

    und addiere den neuen Impuls auf den alten auf.
    %Planeten%.ix := %Planeten%.hx + %Planeten%.gx /(genauigkeit * %Planeten%.m)
    %Planeten%.iy := %Planeten%.hy + %Planeten%.gy /(genauigkeit * %Planeten%.m)
    Genauigkeit soll hier die Schrittweite bestimmen. %Planeten% ist der Dynamische Aufruf für den jetzigen Planeten also a (innerhalb der Klasse war das dann this für a und Gegner für b)
    Die Genauigkeit ist offensichtlich das Inverse der Schrittweite dt. Hier würde ich besser direkt mit der Schrittweite dt im Zähler rechnen. Das macht den Code übersichtlicher und vermeidet erneut unnötiges Ausrechnen. Wenn Du dem Anwender als Parameter lieber das Inverse der Schrittweite geben willst, musst Du eben beim Start des Programmes einmal den Kehrwert berechnen, um dt zu kennen.

    das war der inhalt der inneren Schleife, die wird nun für jeden anderen Planeten noch für a ausgeführt und am Schluss, wenn man alle Gravitationseinflüsse für a berechnet hat, werden die neuen Koordinaten für a bestimmt
    %Planeten%.x:=%Planeten%.x+ %Planeten%.ix/genauigkeit
    %Planeten%.y:=%Planeten%.y+ %Planeten%.iy/genauigkeit
    Das ist das genau das Euler-Verfahren, falls genauigkeit = 1.0 / dt.

    das Ganze wird durch die äußere Schleife noch für alle anderen in die Planeten.txt eingetragenen Planeten wiederholt.
    Hier fehlt noch das dritte newtonsche Gesetz (actio gegengleich reactio). Du berechnest in jedem Schritt sowohl actio, als auch reactio getrennt. Durch geschicktes Ordnen der Schleife berechnet man einmal actio (oder reactio) und verwendet diesen Wert dann sowohl mit positivem als auch mit negativem Vorzeichen. Man braucht dazu eigentlich nur für jeden Planeten eine vektorielle Variable für die Beschleunigung und läßt die äußere Schleife immer ab dem aktuellen Planeten starten. Die äußere Schleife wird dann mit fortschreitender innerer Schleife immer kleiner und man berechnet keine Zwischenergebnisse mehr doppelt.

    Sämtliche Tips (mit unterschiedlichem Schwierigkeitsgrad) kann man in den genaueren Verfahren (Runge-Kutte, Bulirsch-Stoer, Symplektischer Integrator) beibehalten.
    Gruß

Ähnliche Themen

  1. Eclipsing Binary Simulator
    Von TomTom333 im Forum Astronomie allgemein
    Antworten: 0
    Letzter Beitrag: 01.01.2011, 23:47
  2. Protonen ist kleiner als gedacht
    Von Kibo im Forum Forschung allgemein
    Antworten: 17
    Letzter Beitrag: 30.07.2010, 11:41
  3. Ein kleiner Tipp...
    Von twr im Forum Forschung allgemein
    Antworten: 11
    Letzter Beitrag: 05.05.2010, 01:10
  4. Antworten: 23
    Letzter Beitrag: 18.07.2007, 10:45
  5. ORBITER is a free flight simulator
    Von Guido_Waldenmeier im Forum Ausrüstung
    Antworten: 2
    Letzter Beitrag: 05.02.2005, 14:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
astronews.com 
Nachrichten Forschung | Raumfahrt | Sonnensystem | Teleskope | Amateurastronomie
Übersicht | Alle Schlagzeilen des Monats | Missionen | Archiv
Weitere Angebote Frag astronews.com | Forum | Bild des Tages | Newsletter
Kalender Sternenhimmel | Startrampe | Fernsehsendungen | Veranstaltungen
Nachschlagen AstroGlossar | AstroLinks
Info RSS-Feeds | Soziale Netzwerke | Flattr & freiwilliges Bezahlen | Werbung | Kontakt | Suche
Impressum | Nutzungsbedingungen | Datenschutzerklärung
Copyright Stefan Deiters und/oder Lieferanten 1999-2013. Alle Rechte vorbehalten.  W3C