Телескопы покупают здесь


A A A A Автор Тема: Пересчёт экваториальных координат в галактические  (Прочитано 221 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bars80080Автор темы

  • Новичок
  • *
  • Сообщений: 14
  • Благодарностей: 0
Добрый день,

прошу прощения за вопрос, который ожидаемо вызовет "фуу", но я не астроном, не математик и уже 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 - ось экваториальных координат.
Видно, что происходит скачок и ожидаемый круг превращается в две дуги.
Насколько понимаю, ошибка в использовании тригонометрии, где-то наверное, я должен поставить условие и менять знак или взять модуль.

Очень прошу указать на досадный огрех.
Спасибо
я - сказочник, и не надо удивляться выдуманным вопросам

Оффлайн bars80080Автор темы

  • Новичок
  • *
  • Сообщений: 14
  • Благодарностей: 0
как иногда бывает, стоит задать вопрос и находишь ответ.

мозгов осилить формулы у меня не хватило, но на ресурсе www.astro.spbu.ru/sites/default/files/Tsvetkov,%20Tycho-2%20.pdf нашёл листинг готовой программы:

    private function convEquatorial2Galaxy($a, $d) {
        $result = [];

        $Leo = 4.936829261; //// 282.85948083
        $L0 = 0.57477039907; //// 32.931918056
        $si = 0.88998807641; //// sin 62.871748611
        $ci = 0.45598379779; //// cos 62.871748611

        $a = $a * pi() / 180;
        $d = $d * pi() / 180;

        $a = $a - $Leo;
        $sa = sin($a);
        $ca = cos($a);
        $sd = sin($d);
        $cd = cos($d);
        $b = asin($sd * $ci - $cd * $si * $sa);
        $l = atan2($sd * $si + $cd * $ci * $sa, $cd * $ca) + $L0;

        $result['b'] = $b * 180 / pi();
        $result['L'] = $l * 180 / pi();

        return $result;
    }
в итоге картинки получились как надо. хотя конечно всегда вопрос: почему там одни константы, здесь другие
я - сказочник, и не надо удивляться выдуманным вопросам