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!)
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!
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.
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.
David Hammen
2012rcampion
Fragen Sie nach Monika