Почему аргумент перицентра не всегда равен 90?

Я помогаю ученикам средней школы написать симулятор космического корабля. Как часть этого, сегодня я пытаюсь осмыслить орбитальную механику, в основном используя это отличное руководство: http://www.braeunig.us/space/orbmech.htm

Но из шести необходимых орбитальных элементов есть один, которого я не понимаю: аргумент перицентра. Он определяется как угол между восходящим узлом и точкой перицентра. Но как этот угол может быть чем-то иным, чем 90°? Я с трудом представляю это.

Я думаю, что более важно: что мне делать с этим параметром, чтобы фактически вычислить положение (в трехмерном пространстве) на орбите? В настоящее время я делаю это:

public Vector3 PointAtAngle(float radians) {
    float r = RadiusAtAngle(radians);

    // Start by finding the orbital point in the XZ plane
    // (i.e., the plane against which the inclination is measured),
    // around a focus of zero, and aligned on the X axis.
    Vector3 p = new Vector3(r * Mathf.Cos(radians), 0, r * Mathf.Sin(radians));

    // Then rotate this by the inclination around the Z axis.
    p.Set(p.x * Mathf.Cos(i), p.x * Mathf.Sin(i), p.z);

    // Rotate around the Y axis according to the longitude of ascending node.
    float cosYRot = Mathf.Cos(omega);
    float sinYRot = Mathf.Sin(omega);
    p.Set(p.x * cosYRot - p.z * sinYRot, p.y, p.x * sinYRot + p.z * cosYRot);

    // Finally, add the focus to shift to whatever we're orbiting around.
    return focus + p;
}

Здесь RadiusAtAngle просто вычисляет расстояние от точки фокусировки по углу, большой полуоси (a) и эксцентриситету (e). Я довольно уверен в этом. Затем я выполняю небольшой маневр, чтобы найти точку вокруг начала координат в плоскости XZ (эклиптики), повернуть ее вверх (вокруг оси Z) на угол наклона (i) и повернуть ее вокруг оси Y на долготу восходящий узел (омега). И, наконец, добавьте точку фокусировки.

Кажется, все это прекрасно работает, и, настраивая a, e, i и omega, я могу создать орбиту любой формы, которую только могу себе представить. Но это, наверное, провал воображения с моей стороны. Как сюда относится этот аргумент о перицентре?

Похоже, вы измеряете свой угол (параметр в радианах в коде), используя стандартный единичный круг. Вместо этого вы должны измерять аргумент перицентра. Я бы порекомендовал вам изучить эту картинку, так как она более трехмерная, чем ASCII-арт Бреунига (по общему признанию, замечательный): en.wikipedia.org/wiki/Argument_of_periapsis

Ответы (1)

Перицентр — это точка, в которой спутник находится ближе всего к центральному телу.

Восходящий узел находится там, где орбита пересекает экваториальную плоскость центрального тела (это можно определить по-разному, но пока мы будем придерживаться экватора).

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

1)перицентр совпадает с восходящим узлом - это означает, что когда спутник пересекает экватор (идя вверх) он также находится в самой близкой точке к земле.

2) перицентр немного после восходящего узла - в этом случае спутник находится близко к земле при пересечении экватора, но все равно приближается. Это тот случай, когда аргумент перицентра находится в диапазоне от 0 до пи радиан (0-180 градусов).

3) перицентр находится перед восходящим узлом - в этом случае, когда спутник проходит экватор, он только что был в его ближайшей точке и в данный момент удаляется от земли. Это тот случай, когда аргумент перицентра находится между пи и 2пи (180-360 градусов).

Хорошим способом для вас проверить реализацию вашего аргумента кода перицентра было бы наличие орбиты с ненулевым эксцентриситетом и нулевым наклоном (если вы смотрите на орбиту сверху, пи/2, если сбоку). Таким образом, изменяющееся значение аргумента перигея будет меняться там, где находится ближайшая точка орбиты.