Получение положения восходящего и нисходящего орбитальных узлов

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

Вот картинка, показывающая, чего я пытаюсь достичь:введите описание изображения здесь

Как я могу получить угол от центра до двух орбитальных узлов? Это код, который я сейчас имею. Он возвращает узлы под правильным углом, но расстояние не является правильным.

internal Vector3 AscendingNode()
{
    if (orbitalElements.IsHyperbolic())
    {
        return Vector3.zero; // No ascending or descending nodes in a hyperbolic orbit
    }

    var semiMajorAxis = (float)(orbitalElements.semiMajorAxis / Tudat.Instance.unitDivider);

    var semiMinorAxis = semiMajorAxis * Mathf.Sqrt((1 - ((float)orbitalElements.eccentricity * (float)orbitalElements.eccentricity)));
    var inclination = 360 - (float)orbitalElements.inclination * Mathf.Rad2Deg;
    var longitudeOfAscendingAngle = 360 - (float)orbitalElements.longitudeOfAscending * Mathf.Rad2Deg;

    var ascendingAngle = Quaternion.AngleAxis(longitudeOfAscendingAngle, Vector3.up);
    var inclinationAngle = Quaternion.AngleAxis(inclination, Vector3.right);

    var position = new Vector3(semiMajorAxis * Mathf.Cos(0), 0.0f, semiMinorAxis * Mathf.Sin(0));
    position = ascendingAngle * (inclinationAngle * (position)) + orbitingBody.GetPosition();

    return position;

}

0 ответов

Другие вопросы по тегам