- PVSM.RU - https://www.pvsm.ru -
Продолжение темы, начатой в предыдущей статье [1]. Идеей к ее развитию послужило прочтение статьи на Хабре «LibCanvas: На пути к звёздам [2]», где описывается реализация планетария на Canvas с выводом созвездий и планет в азимутальной системе координат. В посте автор дает ссылку [3] на базу данных звезд и созвездий, которой я любезно воспользовался. Файл содержит координаты прямого восхождения (Right Ascension, в часах) и склонения (Declination, в градусах) звезд, точек созвездий и их названий. Я перевел их в радианы и сохранил в файл constellations.js [4] для своего «звездного» проекта Starry Sky [5].

Сравнив результаты я заметил, что в оригинальном планетарии все выглядит зеркально наоборот. То есть звезды выведены на внешнюю сторону сферы, а у меня — на внутреннюю. Я решил воспользоваться другим планетарием как эталоном. Для этой цели выбрал проект «Звезды» [6] на КартахMail [7].ru. Оказалось, что правильный вариант отображения — на внутренней стороне звездной сферы. Это видно на рисунке (время 2/3/2014 17:2:0, точка наблюдения — д 37, ш 55 Москва).

Помимо созвездий в своем планетарии Starry Sky [5] я добавил вывод информации по звездам, планетам, точкам космических аппаратов при наведении мышью на них (активные области).
Для звезд выводится номер из каталога Henry Draper'a (HD).
Кроме звезд и планет на карте добавлены три космических аппарата из группировки ГЛОНАСС. Данные взяты с ресурса celestrak.com [8] и сохранены в файле tledata.js [9]. Всего в группировке 28 аппаратов, но для наглядности выведены 3 первых по списку. Для расчета орбит и положений КА я использовал модуль satellite-js [10].
Изменение масштаба карты привязано к изменению высоты над поверхностью Земли. Размер звездной сферы зафиксирован поскольку в противном случае теряется реалистичность изображения, кода края небесной сферы становятся меньше краев карты. В идеале хотелось бы создать эффект бесконечной Вселенной как в Celestia с удалением и приближением звезд и планет.
Включать или выключать слои (группы объектов) теперь можно через отдельный список layers…
Главной проблемой планетария с astrokot.ru [11], как пишет автор, является медлительность программы. Я замерил времена в профайлере Firefox 19. В Planetarium — 1168 ms, в Starry — 608 ms. Действительно медленно, в Starry объектов больше, а время в 2 раза меньше. Видимо в циклах используются лишние вычисления, которые замедляют вывод.
Исследуя звездные алгоритмы для своего проекта, я пытаюсь максимально упрощать вычисления и код, чтобы они были понятны и наглядны. Изучая коды других проектов (Celestia, Stellarium, libastro), особенно на WebGL, очень трудно разобраться, какие используются формулы и как они работают. Для себя я выделил пока два проекта — libnova и Marble — код которых понятен и максимально пригоден для портирования в другие среды, например в JS.
Автор: egaxegax
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/56218
Ссылки в тексте:
[1] статье: http://habrahabr.ru/post/189692/
[2] LibCanvas: На пути к звёздам: http://habrahabr.ru/post/181554/
[3] ссылку: http://astrokot.ru/planetarium/js/modules/Stars.js
[4] constellations.js: http://dbcartajs.appspot.com/media/js/demodata/constellations.js
[5] Starry Sky: http://dbcartajs.appspot.com/starry.html
[6] «Звезды»: http://maps.mail.ru/stars.html
[7] Mail: http://habrahabr.ru/users/mail/
[8] celestrak.com: http://celestrak.com
[9] tledata.js: http://dbcartajs.appspot.com/media/js/demodata/tledata.js
[10] satellite-js: https://github.com/shashwatak/satellite-js
[11] astrokot.ru: http://astrokot.ru/planetarium/dev/planetarium.html
[12] Источник: http://habrahabr.ru/post/214373/
Нажмите здесь для печати.