Wie berechnet man angesichts der Orbitalelemente die Zeit bis zur Apoapsis und Periapsis?

Ich habe die 6 Orbitalelemente (ohne die Zeit der Periapsispassage natürlich), 2 Zustandsvektoren und viele andere Parameter wie die Umlaufzeit. Ich möchte sie verwenden, um die Zeit bis zur Periapsis und die Zeit bis zur Apoapsis zu berechnen.

Um Ihnen eine bessere Vorstellung von den Werten zu geben, die ich bereits habe, ist hier mein Code, der alle Daten berechnet, die sich auf die Umlaufbahn beziehen:

 void CalculateOrbitalData(Vector3 pos1, Vector3 vel1, float m1) {
    Vector3 pos2 = planet.position;
    Vector3 vel2 = planet.velocity;
    float m2 = planet.mass;

    //Relative Position Vector
    Vector3 r = pos1 - pos2;

    //Distance between bodies
    float rmag = r.magnitude;

    //Relative Velocity Vector
    Vector3 v = vel1 - vel2;

    //Specific Angular Momentum
    Vector3 h = Vector3.Cross(r, v);

    //Standard Gravitational Parameter
    float µ = World.G * m2;

    //Eccentricity Vector
    Vector3 evec = (Vector3.Cross(v, h) / µ) - (r / Vector3.Magnitude(r));

    //Eccentricity
    float e = Vector3.Magnitude(evec);

    //Vector to Ascending Node
    Vector3 n = new Vector3(-h.x, h.z, 0);

    //True Anomaly
    float t = Mathf.Acos((Vector3.Dot(evec, r)) / (e * Vector3.Magnitude(r)));
    if (Vector3.Dot(r, v) < 0)
        t = (2 * Mathf.PI) - t;

    //Longitude of Ascending Node (2D)
    float Ω = 0;

    //Inclination (2D)
    float i = 0;

    //Argument of Periapsis
    float ω = Mathf.Atan2(evec.y, evec.x);
    float ωdegrees = ω * (180 / Mathf.PI);
    if (e == 0) {
        ω = 0;
        ωdegrees = 0;
    }

    //Eccentric Anomaly
    float E = 2 * Mathf.Atan(Mathf.Tan(t / 2) / Mathf.Sqrt((1 + e) / (1 - e)));

    //Mean Anomaly 
    float M = E - (e * Mathf.Sin(E));

    //Semi-Major Axis
    float a = 1 / ((2 / Vector3.Magnitude(r)) - (Mathf.Pow(Vector3.Magnitude(v), 2) / µ));

    //Apoapsis
    float ap = a * (1 + e);

    //Periapsis
    float pe = a * (1 - e);

    //Orbital Period
    float T = (2 * Mathf.PI) * Mathf.Sqrt(Mathf.Pow(a, 3) / µ) / 60;
    //patch orbital period to stay in line with unity timestep
    float fT = T * 1.205f;

    //Mean motion
    float m = (2 * Mathf.PI) / fT;

    //Perifocal distance
    float rp = (Vector3.Dot(h, h) / µ) / e + 1;
}
Zeit bis zur Periapsis und Zeit bis zur Apoapsis ab wann ? Eine Delta-Zeit braucht etwas, von dem sie abweichen kann.
Können wir die aktuelle Zeit an der aktuellen Position anzeigen?
Möglicherweise aussagekräftigere Darstellung mit mittlerer Anomalie

Antworten (1)

Sie scheinen nach der Zeitgleichung zu suchen:

t = a 3 μ ( τ e Sünde τ )

wo t ist Zeit u τ ist die exzentrische Anomalie. Es sieht so aus, als hätten Sie zur "aktuellen" Zeit die exzentrische Anomalie. Sie können das einfach anschließen, um die Zeit relativ zur Periapsis zu sehen, die um ist t = 0 und τ = 0 . Für die Zeit bei Apoapsis einstecken τ = π . Eine Umlaufzeit ist τ Laufen über eine Reihe von 2 π , also ist die Periode:

T = 2 π a 3 μ

Ihre Zeit seit Periapsis ist also t , und Ihre Zeit bis zur nächsten Periapsis ist T t (vorausgesetzt, dass τ ist in 0 zu 2 π ).

Das sieht gut aus, aber ich vermute, meine τ ist definitiv nicht drin 0 zu 2 π , oder zumindest nicht richtig berechnet, da ich einen Wert von -0,109 bekomme, wenn ich die Simulation zum ersten Mal starte, wie hier gezeigt
Mein E ist von π zu π , also füge ich nur hinzu π dazu, werde mich wieder melden, wenn ich es zum Laufen bekomme
Sie müssten hinzufügen 2 π dazu, wenn es negativ ist.