Der Wahnsinn geht weiter.
Wir müssen nun den Punkt im Orbit berechnen, an welchem wir brennen müssen um die Inklination zu ändern. Wir suchen also die Ascending und Desecndig Node (AN und DN). Oben haben wir die Vektoren N1 und N2 berechnet. Das Kreuzprodukt dieser beiden Vektoren ergibt einen Vektor vom Zentrum des Planeten durch den Punkt an dem sich die Orbitalbahnen kreuzen.
Nun müssen wir diesen Punkt irgendwie ermitteln. Das machen wir über die True Anomaly (TA). Dieser Wert gibt einen Punkt im Orbit in Grad an, abhängig von der Periapsis. Ich glaube eigentlich wird der Wert im Bogenmaß angegeben, doch in kOS verwenden wir Gradmaß.
Über Winkelberechnungen können wir nun ausrechnen, wie weit die Kreuzung der Orbitalbahnen unserem Schiff voraus liegt. Die Position des Schiffes selber liefert uns eine in kOS eingebaute Funktion.
Daraus folgt also:
TA der Kreuzung der Orbits = TA des Schiffs + (Winkel zwischen Schiff und [Kreuzprodukt von N1 und N2]).
Ich hab da mal was in KerboScript gebaut, immerhin geht es hier ums Programmieren.
// Vorhersagen für Rendezvous Manöver, WIP
// Hier werden die Orbit-Normalen errechnet.
// AM schwersten fiel es mir, herauszufinden welchen "Wert" man der Variablen
// "orbit_in" übergeben mußte: SHIP:ORBIT oder TARGET:ORBIT
// -------------------------------------------------------------------------------------------
FUNCTION orbit_normal {
PARAMETER orbit_in.
RETURN VCRS ( orbit_in:BODY:POSITION - orbit_in:POSITION, orbit_in:VELOCITY:ORBIT).
}
// Diese Funktion ermittelt die AN und gibt deren Wert in True Anomaly aus,
// dass beudeutet also, hier errechnen wir eine Grad-Zahl in Flugrichtung von der
// Periapsis aus.So haben wir einen exakten Punkt ermittelt, an welchem das Manöver
// zum ändern der Inklination stattfinden muss.
// ---------------------------------------------------------------------------------------------
FUNCTION find_ascending_node_ta {
PARAMETER orbit_1, orbit_2.
// Die Funktion oben wird hier genutzt um die Normalen der Orbits zu errechnen
LOCAL normal_1 IS orbit_normal(orbit_1).
LOCAL normal_2 IS orbit_normal(orbit_2).
// Der Vektor vom umkreisten Körper zur der Stelle an welcher sich die Orbits kreuzen
LOCAL vec_body_to_node IS VCRS(normal_1, normal_2).
// Ein Vektor der vom Zentrum des umkreisten Körper zum Schiff zeigt
// mit "Schiff" ist das Schiff gemeint, welches die Inklination ändern soll
LOCAL pos_1_body_rel IS orbit_1:POSITION - orbit_1:BODY:POSITION.
// Wie weit ist das Schiff von der Orbit-Kreuzung entfernt; in Grad
LOCAL ta_ahead IS VANG(vec_body_to_node, pos_1_body_rel).
// Eine Prüfung der Vorzeichen... bin noch nicht ganz sicher was hier passiert
LOCAL sign_check_vec IS VCRS(vec_body_to_node, pos_1_body_rel).
IF VDOT(normal_1,sign_check_vec) < 0 {
set ta_ahead to 360 - ta_ahead.
}
// Modulo... es gibt so verrückte Mathe-Operationen... jedenfalls ergibt sich hier
// hier die TrueAnomaly der Node
RETURN mod(orbit_1:trueanomaly + ta_ahead, 360).
}
// Eine kleine Ergänzung, damit man irgendwas auf dem Bildschirm sehen kann
CLEARSCREEN.
SET TERMINAL:WIDTH TO 70.
SET TERMINAL:HEIGHT TO 10.
PRINT "Die Kreuzung der Orbits ist " + ROUND(find_ascending_node_ta (SHIP:ORBIT, TARGET:ORBIT),2) + "° von der Periapsis entfernt" at (0,3).
WAIT 30.
Ich hoffe ihr könnt mir noch folgen