¿Cómo calcular el tiempo de apoapsis y periapsis, dados los elementos orbitales?

Tengo los 6 elementos orbitales (excluyendo el tiempo de paso del periapsis, obviamente), 2 vectores de estado y muchos otros parámetros como el período orbital. Estoy buscando usarlos para calcular el tiempo de periapsis y el tiempo de apoapsis.

Para darle una mejor idea de los valores que ya tengo, aquí está mi código calculando todos los datos relacionados con la órbita:

 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;
}
Tiempo de periapsis y tiempo de apoapsis desde cuando ? Un tiempo delta necesita algo a partir del cual delta.
¿Podemos hacer la hora actual en la posición actual?
Puede ser una representación más significativa con anomalía media

Respuestas (1)

Parece que estás buscando la ecuación del tiempo:

t = a 3 m ( τ mi pecado τ )

dónde t es tiempo y τ es la anomalía excéntrica. Parece que tiene la anomalía excéntrica en el momento "actual". Simplemente puede conectarlo para ver el tiempo relativo al periapsis, que está en t = 0 y τ = 0 . Para el tiempo en apoapsis, enchufe τ = π . Un período de órbita es τ recorriendo un rango de 2 π , entonces el período es:

T = 2 π a 3 m

Así que tu tiempo desde el periapsis es t , y su tiempo hasta el próximo periapsis es T t (asumiendo que τ es en 0 a 2 π ).

Esto se ve bien, sin embargo, supongo que mi τ definitivamente no está en 0 a 2 π , o al menos no se calculó correctamente ya que obtengo un valor de -0.109 cuando inicio el sim por primera vez, como se muestra aquí
mi E es de π a π , así que solo estoy agregando π a él, lo tocaré cuando lo haga funcionar
necesitarias agregar 2 π a ella si es negativa.