Добрый день,
прошу прощения за вопрос, который ожидаемо вызовет "фуу", но я не астроном, не математик и уже 20 лет, как закончил учиться и мозги у меня уже достаточно спеклись.
В данном вопросе у меня явно не хватает навыка в тригонометрии, и потому прошу помочь, так как уже потратил чересчур много времени, а всё ещё мыкаюсь без понимания.
Тему
https://astronomy.ru/forum/index.php/topic,181900.0.html читал, выжать из неё зерно истины мне не удалось.
Пытаюсь найти формулу пересчёта вторых экваториальных координат в галактические, но столкнулся с полным отсутствием финальной формулы в интернетах.
Что я вижу? Приводится следующая система:
sin(b) = sin(d)*sin(dN) + cos(d)*cos(dN)*cos(a - aN)
sin(l-l0)*cos(b) = sin(d)*cos(dN) - cos(d)*sin(dN)*cos(a - aN)
cos(l-l0)*cos(b) = cos(d)*sin(a - aN)
но мне же нужно получить не синусы и их произведения, а конкретные углы. Преобразую:
function convEquatorial2Galaxy($a, $d) {
// приводим к радианам константы
$L0 = 32.987715 * pi() / 180;
$aN = 192.85948 * pi() / 180;
$dN = 27.12825 * pi() / 180;
// приводим к радианам восхождение и склонение в экваториальной системе
$a = $a * pi() / 180;
$d = $d * pi() / 180;
// из выше приведённой системы второе выражение делим на третье и выводим
$sinb = sin($d) * sin($dN) + cos($d)*cos($dN)*cos($a - $aN);
$tgtsub = (cos($d) * sin($a - $aN));
if($tgtsub) {
$tgt = ((sin($d) * cos($dN)) - (cos($d) * sin($dN) * cos($a - $aN))) / $tgtsub;
} else {
$tgt = tan($L0 * -1);
}
// результат переводим в градусы
$result['b'] = asin($sinb) * 180 / pi();
$result['L'] = (atan($tgt) + $L0) * 180 / pi();
return $result;
}
некоторый результат получается, но косячный. Смотрите скриншоты. Для примера взял 0..23 точки со склонением 0 и восхождением 0ч, 1ч, 2ч... 23ч на одном расстоянии. Точка 24 - в центре, точки 25 и 26 - ось экваториальных координат.
Видно, что происходит скачок и ожидаемый круг превращается в две дуги.
Насколько понимаю, ошибка в использовании тригонометрии, где-то наверное, я должен поставить условие и менять знак или взять модуль.
Очень прошу указать на досадный огрех.
Спасибо