Как рассчитать время до апоцентра и перицентра, учитывая элементы орбиты?

У меня есть 6 элементов орбиты (без учета времени прохождения перицентра, разумеется), 2 вектора состояния и множество других параметров, таких как период обращения. Я хочу использовать их для расчета времени до перицентра и времени до апоцентра.

Чтобы дать вам лучшее представление о значениях, которые у меня уже есть, вот мой код, вычисляющий все данные, связанные с орбитой:

 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;
}
Время до перицентра и время до апоцентра с какого момента ? Дельта-время нуждается в чем-то для дельты.
Можем ли мы сделать текущее время в текущей позиции?
Может быть более значимым представление с аномалией среднего

Ответы (1)

Кажется, вы ищете уравнение времени:

т знак равно а 3 мю ( т е грех т )

куда т время и т эксцентрическая аномалия. Похоже, у вас эксцентрическая аномалия в "текущее" время. Вы можете просто подключить его, чтобы увидеть время относительно перицентра, которое находится на т знак равно 0 а также т знак равно 0 . На время в апоапсисе подключите т знак равно π . Период обращения т работает в диапазоне 2 π , поэтому период равен:

Т знак равно 2 π а 3 мю

Итак, ваше время с перицентра т , и ваше время до следующего перицентра равно Т т (при условии, что т в 0 к 2 π ).

Это выглядит хорошо, однако я предполагаю, что мой т точно не в 0 к 2 π , или, по крайней мере, не рассчитан должным образом, так как я получаю значение -0,109 при первом запуске сима, как показано здесь
Мой Е из π к π , так что я просто добавляю π к нему, вернусь, когда я заработаю
Вам нужно добавить 2 π к нему, если он отрицательный.