Wie können Sie eine Umlaufbahn basierend auf einer Anfangsposition und einem Anfangsrichtungsvektor vorhersagen?

Ich habe einen Planetensimulator in Unity 3D (C#) entwickelt und brauche etwas Hilfe, aber ich denke, dies wäre ein besserer Ort dafür. Ich starte meinen Planeten von einem Positionsvektor. Bei der Initialisierung wende ich einen Richtungsvektor an, der ihn in eine Umlaufbahn um einen größeren Stern bringt. Die Umlaufbahnen sind nicht kreisförmig, und ich möchte, dass sie elliptisch sind.

Ich habe mich über Brennpunkte, die große Halbachse und die kleine Halbachse, über mehrere Gesetze von Newton und Kepler informiert, ich verstehe die Apoapsis und Periapsis, und doch kann ich einfach nicht herausfinden, was ich tun muss. Was ich getan habe, ist, eine Spur von den Planeten zu hinterlassen, und die Umlaufbahnen sind zu sehen. (Hinweis: Ich weiß, dass die Anordnung der Planeten nicht korrekt ist!)

Planeten

Es sieht nett aus, aber es ist nicht das, was ich wollte. Ich möchte in der Lage sein, die Umlaufbahn vorherzusagen. Ich habe Gleichungen gefunden, damit ich den Einflussbereich berechnen kann, der die große Halbachse erfordert. Ich könnte die große Halbachse berechnen, wenn ich die Umlaufzeit hätte, und ich könnte die Umlaufzeit berechnen, wenn ich die große Halbachse hätte. Ich habe jedoch nur eine Anfangsposition, eine Vektorkraft, die ich darauf anwende, den Abstand zwischen den Planeten und auch die Massen von jedem. Ich bin hier in einer Sackgasse, ich bin mir nicht sicher, wonach ich suche. Könnte mir bitte jemand ein paar Hinweise (oder Formeln) geben, um zu tun, was ich tun möchte.

Ich würde mich sehr über jede Hilfe freuen, danke im Voraus!

Was genau meinst du mit "Anfangsrichtungsvektor"? Wenn Sie das meinen (die Tangente der Einheit), können Sie "eine Umlaufbahn nicht basierend auf einer Anfangsposition und einem Anfangsrichtungsvektor vorhersagen". Der Positionsvektor hat drei Freiheitsgrade, der "Anfangsrichtungsvektor" aber nur zwei. Unabhängig davon, welches Schema man verwendet, um eine Umlaufbahn zu beschreiben (und es gibt viele davon), werden sechs unabhängige Parameter zu einer bestimmten Epochenzeit benötigt. Du hast nur fünf.
Ich habe ein paar Monate an einem Spiel/einer Simulation gearbeitet und musste schließlich die Idee aufgeben, irgendetwas mathematisch Elegantes zu machen. Ich könnte Keplers Gesetze für Umlaufbahnen verwenden, WENN Sie davon ausgehen, dass die Planeten keinen Einfluss aufeinander haben. Für Planeten ist das ziemlich richtig, aber weniger für Satelliten und noch viel weniger für Raumschiffe. Ich musste mit Newton gehen und einen rein iterativen Ansatz verfolgen. Schneiden Sie die Zeit in ausreichend kleine Segmente und berechnen Sie alle Kräfte auf jedes Objekt in jedem Inkrement. Einfach, aber Sie können nicht vorhersagen, wo sich etwas in der Zukunft befinden wird, ohne jeden Moment dazwischen zu berechnen.

Antworten (3)

In drei Dimensionen braucht man sechs Zahlen. Was Sie fragen, ist, wie Sie von einem Satz von sechs Zahlen, drei Positionskoordinaten und drei Geschwindigkeitskomponenten (beachten Sie, dass die einfache Richtung nicht ausreicht) in einen anderen Satz von sechs Zahlen, die sechs Orbitalelemente, umwandeln.

Ich werde Ihnen die Gleichungen nicht geben, aber ich werde Ihnen den Einstieg erleichtern. Sie können die Gleichungen googeln. Berechnen Sie zuerst die Energie, einen Skalar. Das wird Ihnen sagen, ob es sich überhaupt im Orbit (negative Energie) oder hyperbolisch (positive Energie) befindet. Aus der Energie lässt sich leicht die große Halbachse berechnen. Berechnen Sie dann den Drehimpulsvektor. Die Richtung dieses Vektors gibt Ihnen die Ebene der Flugbahn und die Richtung in dieser Ebene an (dieser Vektor ist senkrecht zur Ebene der Flugbahn). Berechnen Sie dann den Exzentrizitätsvektor. Dieser Vektor liegt in der Ebene und zeigt auf die Periapsis oder die engste Annäherung für eine Hyperbel. Seine Größe ist natürlich die Exzentrizität der Umlaufbahn oder Hyperbel.

Dann haben Sie alles, was Sie brauchen, um die Orbitalelemente zu erzeugen.

Ich habe einige Gleichungen gefunden, und sie beziehen sich auf G ... seltsamerweise habe ich in meiner Simulation G nicht verwendet ... Ich habe einfach F = (m1 * m2) / d ^ 2 gemacht. Wenn ich es einsetze, fliegt es einfach weg und achtet nicht auf die Umlaufbahn.
Was Sie normalerweise sehen werden, ist die Kombination G M des zentralen Körpers, manchmal zu verkürzt μ . In der realen Welt verwenden wir nie G , weil wir messen können G M viel genauer als beide G oder M .
Ich habe ein Problem mit der Berechnung der großen Halbachse. Zuerst habe ich die Umlaufgeschwindigkeit berechnet (damit sie in die andere Gleichung eingesetzt werden kann). ich benutzte v = r Ö Ö t ( M / r ) . Dann berechnete ich die Bahnenergie mit e = v 2 / 2 ( m 1 + m 2 ) / r . Ich habe dann die Gleichung verwendet v 2 = ( m 1 + m 2 ) ( 2 / r 1 / a ) , und neu angeordnet, um a zu finden, die große Halbachse. Die Länge ändert sich jedoch, wenn der Planet umkreist ... Irgendwelche Ideen, warum er das tut?
Erstens brauchen Sie G vor allem m 's. Zweitens ergeben Ihre Gleichungen E = μ 2 a , von denen Sie bekommen können a . E ist eine Bewegungskonstante, also würden Sie an jedem Punkt der Umlaufbahn denselben Wert berechnen. (Verwende nicht e für die spezifische Energie, da dies das Symbol für Exzentrizität ist.)
Übrigens, wenn Sie davon ausgehen v = μ r , dann gehen Sie von einer Kreisbahn aus. Dann r ändert sich nicht, und a = r .

Diese JPL/NAIF-SPICE-Toolkit-Routine OSCELT beantwortet scheinbar eine Frage zum Zwei-Körper-Problem.

NB Ich gehe davon aus, dass Ihr "Richtungsvektor" tatsächlich ein "Geschwindigkeitsvektor" ist. die STATE-Eingabe an OSCELT ist ein Sechs-Elemente-Vektor, der die Verkettung der Positions- und Geschwindigkeitsvektoren ist.

NB, wie oben erwähnt, benötigen Sie eine siebte Zahl: MU, der GM-Wert für den zentralen Körper.

Technisch gesehen benötigen Sie auch eine achte Zahl, die Zeit der Anfangsbedingungen, um einen Ausgangspunkt für die Berechnung zukünftiger (und vergangener) Ephemeriden zu haben.

Dieser Link gilt für die FORTRAN-Version des SPICE-Toolkits, da Google diese zuerst zurückgegeben hat. Es gibt auch C-, IDL-, Matlab-, Java- und sogar informelle Python-Schnittstellen für SPICE; Es sollte möglich sein, eine DLL der C-Version zu erstellen, die von C # aus aufgerufen werden kann.

Ich werde das nicht länger machen, als es sein muss: Stöbern Sie in den SPICE-Seiten; SPICE hat eine steile Lernkurve, ist aber die Mühe wert. Die Dokumentation ist das Beste, was Sie finden können, oder kontaktieren Sie mich für weitere Details.

Verzeihen Sie mir das Fehlen einer konkreten Antwort, aber es hängt wirklich davon ab, wie genau Sie sein müssen. Ich habe einmal einen Simulator geschrieben, der eine n-Körper-Newtonsche Näherung verwendet hat. Es war nett, aber nicht besonders gut implementiert und konnte nur ein paar Dutzend Körper tragen, bevor es zu einem Kriechen verlangsamte.

KSP verwendet einen einfacheren, skalierbareren Ansatz; Ein Raumschiff wird nur von dem Körper angezogen, dessen Einflussbereich es bewohnt, und Planeten und Monde sind auf Schienen. Dies ist für ein Videospiel eine ausreichend gute Annäherung und gerät nicht außer Kontrolle, wenn Sie der Simulation weitere Objekte hinzufügen. Der Nachteil ist, dass Sie immer nur von einem Objekt gleichzeitig angezogen werden, sodass Sie keine Lagrange-Punkte oder andere interessante Gravitationseffekte sehen.

Selbst ein gut implementiertes Newtonsches n-Körper-Modell wäre viel rechenintensiver als das System von KSP und würde immer noch nicht die ganze Geschichte erzählen, da die Newtonsche Physik relativistische Effekte nicht berücksichtigt. (Wenn Sie denken, dass relativistische Effekte für die Orbitalmechanik keine Rolle spielen, lesen Sie auf dem Planeten Vulcan nach: https://en.wikipedia.org/wiki/Vulcan_(hypothetical_planet) )

Es könnte sich lohnen, diese Frage zum Stack-Austausch in der Spieleentwicklung zu stellen, da die Entscheidung, wie man sich einer Umlaufbahn am besten annähert, genauso viel mit der Art des gewünschten Gameplays und den praktischen Einschränkungen der verfügbaren Computerhardware zu tun hat wie mit der Physik von orbitale Mechanik.

OP erwähnt nie, dass dies für ein Spiel ist oder dass die Rechenintensität ein Problem ist. Tatsächlich bekomme ich beim Lesen der Frage den gegenteiligen Eindruck, dass sein Planetensimulator jetzt ungefähr auf die Genauigkeit eines Orrery entwickelt ist, aber zukünftige Umlaufbahnen beliebiger Objekte genauer simulieren möchte, indem er ihre Ephemeriden eingibt. TL; DR Ich bezweifle stark, dass eine vereinfachte Kinematik, wie sie KSP verwendet, ausreichen würde.