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


A A A A Автор Тема: Определить координаты небесного объекта согласно эпохе J2000.0  (Прочитано 1469 раз)

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

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Всем привет!

Дано -

Точка наблюдения -
F - склонение, широта,
A - прямое восхождение, долгота

Небесный объект -
f - склонение, широта,
a - прямое восхождение, долгота

Дата / Время
2021.01.01 00:00:00

Определить экваториальные координаты
небесного объекта
согласно эпохе J2000.0

Оффлайн волотька хрюкалин

  • *****
  • Забанен!
  • Сообщений: 1 128
  • Благодарностей: 83
    • Сообщения от волотька хрюкалин

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Спасибо!
Полезная ссылка!
Но вопрос в алгоритме, как определить?

Онлайн Toth

  • *****
  • Сообщений: 2 581
  • Благодарностей: 174
    • Сообщения от Toth
Так вам что надо ?
Преобразовать из топоцентрических в геоцентрические ? Но это без расстояния до объекта невозможно.
Или просто пересчитать с истинных на дату в средние на J2000.0 ( как вам ссылу дали ) ? Тогда зачем координаты наблюдателя ?

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
На дату в средние на J2000.0, конечно...
Сорри...
Координаты наблюдателя - это для острастки...

Оффлайн волотька хрюкалин

  • *****
  • Забанен!
  • Сообщений: 1 128
  • Благодарностей: 83
    • Сообщения от волотька хрюкалин
Но вопрос в алгоритме, как определить?
Если точно, то надо посмотреть специализированные курсы. Например, вот здесь можно что-то смотреть:



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

Тогда преобразуем при помощи формул сферической астрономии данные в условиях экваториальные координаты светила в эклиптические координаты: эклиптическую широту β0 и эклиптическую долготу λ0. Как известно, лунно-солнечная прецессия не изменяет эклиптических широт звезд, но увеличивает со временем их эклиптические долготы, со скоростью около 50" /год. Умножаем эту величину на время (выраженное в годах), разделяющее данный и интересующий моменты, а полученное значение прибавляем (или отнимаем, если интересующий момент относится к прошлому) к нашей эклиптической долготе звезды.
В итоге имеем новое значение эклиптической долготы λ1 и изначально полученное значение эклиптической широты β0.
Опять же при помощи формул сферической астрономии делаем обратное преобразование этих координат в систему экваториальных координат.
« Последнее редактирование: 06 Фев 2021 [00:13:32] от ¯_¯ »

Оффлайн Eddy_Em

  • *****
  • Сообщений: 1 228
  • Благодарностей: 39
  • САО РАН. Буково forever!
    • Сообщения от Eddy_Em
    • Я на гитхабе
Поставьте себе одну из библиотек и напишите простенькую программку для перевода координат среди эпох.
Если вам нужна хорошая точность, сами будете всяко дольше реализовывать все это. Особенно если нужно не просто эпоху пересчитать, а еще и видимое место вычислить!
Вот так, например, вычисляется видимое место.
О, нашел, вот, что вам нужно:
void JnowtoJ2000(double appRA, double appDecl, double *r, double *dc){
    double ra=0., dec=0., utc1, utc2, tai1, tai2, tt1, tt2, fd, eo, ri;
    int y, m, d, H, M;
    DBG("appRa: %g'', appDecl'': %g", appRA, appDecl);
    appRA *= DS2R;
    appDecl *= DAS2R;
#define SOFA(f, ...) do{if(f(__VA_ARGS__)){WARNX("Error in " #f); goto rtn;}}while(0)
    // 1. convert system JDate to UTC
    SOFA(iauJd2cal, JDate, 0., &y, &m, &d, &fd);
    fd *= 24.;
    H = (int)fd;
    fd = (fd - H)*60.;
    M = (int)fd;
    fd = (fd - M)*60.;
    SOFA(iauDtf2d, "UTC", y, m, d, H, M, fd, &utc1, &utc2);
    SOFA(iauUtctai, utc1, utc2, &tai1, &tai2);
    SOFA(iauTaitt, tai1, tai2, &tt1, &tt2);
    iauAtic13(appRA, appDecl, tt1, tt2, &ri, &dec, &eo);
    ra = iauAnp(ri + eo);
    ra *= DR2S;
    dec *= DR2AS;
    DBG("SOFA: r=%g'', d=%g''", ra, dec);
#undef SOFA
rtn:
    if(r) *r = ra;
    if(dc) *dc = dec;
}

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Спасибо!

-_- Этой книжки у меня нет, но в Астронете из этой книжки что-то есть, но не все.
Говорится, что продолжение в пункте 5, а сам этот пункт отсутствует.

Eddy_Em - Давненько не брал я в руки Cpp...
Не знаю, нужна ли такая точность,
может быть можно что-нибудь попроще...
Аппаратурная погрешность -
в районе зенита ~ 1 градус,
по краям сектора видимости ~ 0.25 минуты.

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Извиняюсь!
По краям сектора видимости ~ 10 минут

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Разбираю программы.
Это, кажись, не Cpp.
Я-то по старинке шарпую.
Не проблема, разберусь...

Оффлайн Eddy_Em

  • *****
  • Сообщений: 1 228
  • Благодарностей: 39
  • САО РАН. Буково forever!
    • Сообщения от Eddy_Em
    • Я на гитхабе
Естественно, не C++, это — обычный C.
Библиотека SOFA есть даже в стандартных репозиториях, вот: sci-astronomy/sofa_c. Функцию нужную я привел, остается лишь main добавить, и можно получить простую консольную переводилку между разными эпохами.
А если нужно грубо посчитать, можно приближенные алгоритмы использовать. У меня на работе лежит книжка "астрономия на ПК", там полным-полно классных алгоритмов + диск с исходниками на С++. Но все равно ту же прецессию вычислить придется.

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Eddy_Em, спасибо!
Разбираюсь...

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Я дико извиняюсь...

Скачал исходную SOFA-библиотеку.
Поразбирался с ней, вроде все понятно.
Осталось упаковать в libsofa.h и
как-то на это сослаться.
Понимаю, что это элементарщина, но слабо, сдулся...
Пробовал включать отдельные модуля,
но там тоже проблемы,
какие-то непонятные операторы и константы вылазят.
Принципиально-то все понятно,
но хотелось бы цивильно сослаться на солидную библиотеку,
чтобы вопросов было поменьше...
Мало я программировал на Cpp, да и давно это было...

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Как-то с горем пополам удалось собрать все в кучу.
Но при трансляции оказалось, что в этой библиотеке
отсутствует значительное количество методов и констант,
на которые есть ссылки в текстах.
Может быть я не то скачал, что надо было -
http://www.iausofa.org/current_C.html#Downloads
Здесь есть три ссылки,
все скачалось с точностью до байта.

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум

Оффлайн Eddy_Em

  • *****
  • Сообщений: 1 228
  • Благодарностей: 39
  • САО РАН. Буково forever!
    • Сообщения от Eddy_Em
    • Я на гитхабе
Попробуйте более старую. Я себе зеркалю с их сайта на гитхаб, потому что в гентовских репах совсем уж старая версия.
Новую скачал, собрал, тест запустился...

А чего именно не хватает-то?

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Чем глубже лезу...
Все потихоньку находится...
Не нашел пока
iauASTROM, iauLDBODY,
dnint, gmax - это, видимо, C - шное понятно что.
TTMTAI, DAYSEC - константы, -"-,
SOFA и DBG - это, видимо, Ваше, тоже понятно что.

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
SOFA есть, с непонятным определением,
а DBG - а не вижу.
В общем, пока все в тумане...

Оффлайн olegtitov

  • *****
  • Сообщений: 3 587
  • Благодарностей: 55
  • I'm a llama!
    • Сообщения от olegtitov
Всем привет!

Дано -

Точка наблюдения -
F - склонение, широта,
A - прямое восхождение, долгота

Небесный объект -
f - склонение, широта,
a - прямое восхождение, долгота

Дата / Время
2021.01.01 00:00:00

Определить экваториальные координаты
небесного объекта
согласно эпохе J2000.0
Что такое f и a? Если это склонение и прямое восхождение, то это и есть координаты небесного объекта.
Но в таком виде задача просто не имеет смысла.

Возможно, что f, a - видимые координаты объекта (азимут и высота над горизнтом) из указанной точки в заданный момент.
Тогда это стандартная задача по переводу координат из горизонтальной системы в экваториальную. Вы там уточните, а то гадать можно долго.

Оффлайн Владимир ГринбаумАвтор темы

  • **
  • Сообщений: 94
  • Благодарностей: 6
  • Мне нравится этот форум!
    • Сообщения от Владимир Гринбаум
Сорри!
Конечно, нужны координаты в эклиптической системе,
а потом в галактической.