Elliptisches Orbit berechnen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Elliptisches Orbit berechnen

      Hallo gm-d,

      ich hänge jetzt schon seit einer Weile an einem Problem. Und zwar möchte ich anhand des Momentums und der Distanz zum Zentrum des größeren Objektes eines Objektes das einen größeren Körper orbitet (die Masse des kleineren Objectes ist hierbei irrelevant klein) den Winkel und Und die Distanz der Apoapsis, Pereapsis und jeden beliebigen Punktes auf der Ellypse anhand des Winkels berechnen, um das Orbit nicht realtime, sondern bei einer Veränderung in der Geschwindigkeit des kleineren Objectes neu zu berechnen, und es diese Ellypse dann abfliegen zu lassen bis eine erneute Änderung stattfindet. Hierzu muss ich natürlich auch noch die Beschleunigung, Veränderung der Beschleunigung und Geschwindigkeit an gegebenen Punkten im Orbit herrausfinden.

      Befor ihr mich jetzt einfach zu Wikipedia weiterleitet, oder ich antworten wie "Google doch" bekomme, dieß habe ich beides schon ohne Erfolg intensiev hinter mir. Wikipedias Formeln schaffe ich einfach nicht praktisch anzuwenden, da ich es nicht hinkriege die nötigen Variablen für die entscheidende Formel auszurechen, und andere Variablen schlecht erklärt sind (so das ein nicht Astronomiker, wie ich, sie nicht versteht).

      Falls jemand von euch eine Lösung, oder einen Lösungsansatz hierzu kennt, bitte ich euch mir mit Tipps, wie man diese Codetechnisch umsetzten kann, zu helfen.

      Danke im Vorraus,
      MFG Hellfish

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Hellfish ()

    • Dein Vorhaben ist... schwierige mathematik :D
      Wozu soll das aber gut sein?
      Es ist kaum rechenufwendig in Echtzeit die Bewegung zu berechnen. Es ist ja nur eine Kraft nötig: Die Schwerkraft. D.h. in jedem step wird einfach eine Kfraft richtung des Planetens ausgeübt bzw. hinzugerechnet (Kräfteadition auf Vektoren basierend) die sowohl vom Abstand zum Mittelpunkt als auch von den Massen abhängt.
      Diese Variante ist wahrscheinlich kein wenig rechenintensiver als einen Pfad zu verwenden und viel speicherschonender...

      Edit: Da du das Studio verwendest, musst du nicht mal Kräfte-berechnungen durchführen wenn du die Physikengine verwendest.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • DragonGamer schrieb:

      Dein Vorhaben ist... schwierige mathematik :D
      Wozu soll das aber gut sein?
      Es ist kaum rechenufwendig in Echtzeit die Bewegung zu berechnen. Es ist ja nur eine Kraft nötig: Die Schwerkraft. D.h. in jedem step wird einfach eine Kfraft richtung des Planetens ausgeübt bzw. hinzugerechnet (Kräfteadition auf Vektoren basierend) die sowohl vom Abstand zum Mittelpunkt als auch von den Massen abhängt.
      Diese Variante ist wahrscheinlich kein wenig rechenintensiver als einen Pfad zu verwenden und viel speicherschonender...

      Edit: Da du das Studio verwendest, musst du nicht mal Kräfte-berechnungen durchführen wenn du die Physikengine verwendest.


      Es geht darum das ich die Umlaufbahn vorberechnen muss, und nicht nur ein, sondern mehrere Objekte gleichzeitig, und dieß bei vielen Objekten nicht nur rechenaufwändig, sondern auch ungenau wird, da man sehr viele vorberechnungen braucht, um das Orbit einigermaßen realistisch darzustellen.
    • Hellfish schrieb:

      Es geht darum das ich die Umlaufbahn vorberechnen muss, und nicht nur ein, sondern mehrere Objekte gleichzeitig, und dieß bei vielen Objekten nicht nur rechenaufwändig, sondern auch ungenau wird, da man sehr viele vorberechnungen braucht, um das Orbit einigermaßen realistisch darzustellen.

      Wie willst du diese Vorberechnung abspeichern? Das ist doch ein Speicheralbtraum.
      Pro objekt müssen nur ein dutzend Zeilen ausgeführt werden. Das schafft der GM schon. Und inwiefern soll das ungenau werden?

      Ansonsten... frag mal in einem Astronomie- oder Physik-Forum nach. Ka. ob sich hier jemand mit dieser Materie auskennt.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Es wird in so fern ungenau, das das Orbit früher oder später bricht, je weniger man kalkuliert je schneller, da in End Effekt das Object sich nicht bewegt, sondern von Position zu Position springt (wie in jedem Spiel) und somit all die Veränderungen zwischen Postion vom jetzigen Step, und Postion vom nächsten Step fehlen. Vielleicht kann man diesen Faktor ja anders Mathematisch austricksen, ich wüsste allerdings nicht wie.

      Die Orbits hätte ich erstmal in Paths gespeichert.
    • Hellfish schrieb:

      Es wird in so fern ungenau, das das Orbit früher oder später bricht, je weniger man kalkuliert je schneller, da in End Effekt das Object sich nicht bewegt, sondern von Position zu Position springt (wie in jedem Spiel) und somit all die Veränderungen zwischen Postion vom jetzigen Step, und Postion vom nächsten Step fehlen. Vielleicht kann man diesen Faktor ja anders Mathematisch austricksen, ich wüsste allerdings nicht wie.

      Die Orbits hätte ich erstmal in Paths gespeichert.

      Kann man denn nicht eine durchschnittsberechnung zwischen den Punkten benutzen? naja.. nehme an du hast das alles schon ausprobiert :D Diese Sache habe ich nicht berücksichtigt..
      Wie auch immer. Wende dich mal an echte profis auf diesem Gebiet :)

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Ich hab die Grundlagen der Ellipsenberechnung vor ein paar Monaten mal selbst zusammengecodet, weil ein Element in meinem aktuellen Projekt die auch benutzt. Aaalso, generell berechnen sich die Punkte auf einer Ellipse um den Punkt (0;0) folgendermaßen:

      Quellcode

      1. X=width*cos(cycle)*cos(tilt)-height*sin(cycle)*sin(tilt)
      2. Y=width*cos(cycle)*sin(tilt)+height*sin(cycle)*cos(tilt)

      width und height geben dabei die Geometrie der Ellipse vor, tilt ist der Winkel, um den die Ellipse gegenüber der x-Achse gedreht werden soll und cycle ist ein weiterer Winkel, der die Lage des aktuellen Punktes auf der Ellipse beschreibt. 0 wäre dabei (bei einem tilt-Winkel von 0) ganz rechts, 90 oben, 180 links und 270 unten. Ist der tilt-Winkel ungleich 0, wird das dementsprechend noch draufgerechnet.

      Ich hab das mal als Beispielprogramm (GM 8.1) angehängt, vielleicht hilft das dem Verständnis auf die Sprünge.

      Wenn du die Geometrie der Ellipse von der Geschwindigkeit des Objekts auf dem Orbit abhängig machen willst, musst du dir halt noch eine sinnvolle Skalierung überlegen; was die Distanz zum Zentrum der Ellispe angeht, kannst du dir im GM mit point_distance behelfen - was allerdings u.U. einige ziemlich rechenintensive Frames mit sich bringen könnte, immerhin musst du die Berechnungen da oben jeden Step und für jedes orbitale Objekt ausführen. Dementsprechend wär es wohl sinnvoller, wenn du das nur einmal machst, nämlich bei der Generierung des Satelliten, und nur dann neu berechnest, wenn er seinen Orbit ändert.
      Das ist allerdings auch schon so ziemlich alles, was ich dir an Hilfe anbieten kann, ich bin auf diesem Gebiet nicht grad der Überflieger (pun intended). Aber vielleicht ist's ja Hilfe genug, um dir den entscheidenden Denkanstoß zu geben.
      Dateien
    • Danke für deine Antwort, nur ist es nicht wonach ich suche. Was du berechnest, ist kein Elliptisches Orbit. Deine Ellipse hat 2 Hoch und 2 Tiefpunkte. Ein Orbit hat nur einen Hoch und einen Tief Punkt. Ich werde mich doch mit der schritt für schritt Kalkulation zufrieden geben müssen.

      Just for the record: hier ist nochmal ein bild von dem Problem: en.wikipedia.org/wiki/File:Euler_method.png (ganz so extrem ist es im Spiel natürlich nicht)

      Allerdings ist es immernoch ein Spiel, und befor ich eine der komplexeren Runge–Kutta Methoden anwende, zu denen ich nicht im stande bin, und was den Rechner auch etwas intensiever belasten würde.


      Falls jemand trotzdem noch eine Lösung hat, (vorallem falls jemand eine Lösung zu den directen Orbit Ellipsen Berechnungen hat, da ich diese immernoch beforzuge) kann er sie gerne hier rein posten, werde meine Engine jetzt aber erstmal auf der Euler Methode aufbauen
    • Du kannst auch mit dem Laplace-Runge-Lenz-Vektor arbeiten. Dabei handelt es sich um eine Erhaltungsgröße im Keplerproblem, die komischerweise nur wenig bekannt ist, obwohl sie eine sehr elegante Möglichkeit darstellt, Ellipsen auszurechnen. Aussage dieser Erhaltungsgröße ist, dass die Orbitalellipsen raumfest sind, sich also weder drehen noch größer/kleiner werden oder sonstwas. Wenn du also zu einem Punkt Position und Impuls des kleinen Objektes kennst, kannst du diesen Laplace-Runge-Lenz-Vektor ausrechnen. Zudem ist der Drehimpuls erhalten. Der Laplace-Runge-Lenz-Vektor zeigt in Richtung des Periapsis, im Wikipedia Artikel (Abschnitt "Herleitung der Bahnkurve") findest du die notwendigen Formeln um aus einem Winkel relativ zum Periapsis die Entfernung zum Ursprung berechnen zu können, wenn du da Null als Winkel einsetzt erhälst du direkt die exakte Position des Periapsis und wenn du 180° einsetzt die exakte Position des Apoapsis.