获取升序和降序轨道节点的位置

时间:2015-01-27 09:42:13

标签: c# unity3d orbital-mechanics

我在空间模拟器上工作,而我却陷入了升序和降序轨道节点的位置。我知道如何在轨道的任何角度获得位置,但它是从轨道中心测量的,而不是轨道体中心。

这是一张显示我想要实现的目标的图片: enter image description here

如何获得从中心到两个轨道节点的角度?这是我现在的代码。它以正确的角度返回节点,但距离不正确。

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 个答案:

没有答案