Получение положения восходящего и нисходящего орбитальных узлов
Я работаю над космическим симом, и я застрял, получая положение восходящих и нисходящих орбитальных узлов. Я знаю, как определить положение под любым углом орбиты, но она измеряется от центра орбиты, а не от центра орбитальных тел.
Вот картинка, показывающая, чего я пытаюсь достичь:
Как я могу получить угол от центра до двух орбитальных узлов? Это код, который я сейчас имею. Он возвращает узлы под правильным углом, но расстояние не является правильным.
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;
}