Помогите с преобразованием прямого восхождения и склонения в 3D-векторы

Используя значения прямого восхождения и склонения из базы данных HYG от The Astronomy Nexus :

Прямое восхождение измеряется в часах, а склонение в градусах.

1 - Преобразование прямого восхождения и склонения в градусы

float getAngle(float value, char units)
{
    if (units == 'h')
    {
        // 15 degrees = 1 hour
        // 360/24 = 15

        return value * 15;
    }
    else
    {
        return value;
    }
}

Когда вводится прямое восхождение, ввод будет умножен на 15, потому что RA измеряется в часах.

При вводе склонения возвращается введенное значение, потому что Dec уже измеряется в градусах.

2 - Разработайте векторы

Диаграмма тригонометрии

Можно построить два равнобедренных треугольника, один для горизонтальной плоскости, а другой для вертикальной плоскости. Углы - это альфа и дельта, прямое восхождение и склонение соответственно. Используя эти углы и зная, что некоторые из расстояний равны расстоянию между центром небесной сферы и звездой, следующий код должен работать.

Vector3 getVectors(float RA, float Dec)
{
    float x = distanceStars;
    float z = (2 * distanceStars * (Mathf.Sin((getAngle(RA, 'h'))/ 2)));
    float y = (2 * distanceStars * (Mathf.Sin((getAngle(Dec, 'd'))/ 2)));

    return new Vector3(x, y, z);
}

К сожалению, мой код не работает, так как это результат, который я получаю:

Графический вывод

Как видите, звезды (белые точки) неравномерно распределяются вокруг Земли (черная сфера посередине).

Было бы здорово, если бы кто-нибудь помог мне с этим.

Вы на правильном пути. Пропустите getAngle() в пользу math.stackexchange.com/questions/15323/…
вы где-нибудь переводите в радианы?
Что сказал Барри. Кроме того, ваши формулы не похожи на обычные полярно-декартовы формулы. И вам, вероятно, следует использовать double, а не float.
Я перешел по ссылке, которую прокомментировал @ebv, и теперь моя программа работает отлично
@barrycarter нет, радианы не используются
@Mike G был быстрее :-) И да, в зависимости от вашей математической библиотеки вам придется преобразовать десятичные углы в радианы, чтобы позиции были правильными. C/C++ используют радианы. Если вам нужна высокая точность, умножьте градусы на 0,01745329251994329576923690768489.

Ответы (1)

Звезды должны соответствовать р "=" Икс 2 + у 2 + г 2 но, кажется, заговор в Икс "=" р вместо этого самолет.

Обычно ось x находится в точке ( α =0 ч , δ = 0 °), ось у находится в точке ( α = 6 ч , δ = 0 °), а ось z находится в точке δ = +90 °.

Используя прямоугольные треугольники вместо равнобедренных,

прямоугольные треугольники

Затем час "=" р потому что дельта , и

Икс "=" р потому что дельта потому что α у "=" р потому что дельта грех α г "=" р грех дельта

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

Использовал поправил математику, перешел от градусов к радианам и теперь звезды разбросаны еще лучше и гораздо более равномерно, спасибо!