- PVSM.RU - https://www.pvsm.ru -

Звездное Небо на Canvas. Созвездия

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

Starry Sky

Разница

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

Planetarium diff

Что нового

Помимо созвездий в своем планетарии Starry Sky [5] я добавил вывод информации по звездам, планетам, точкам космических аппаратов при наведении мышью на них (активные области).
Для звезд выводится номер из каталога Henry Draper'a (HD).

Кроме звезд и планет на карте добавлены три космических аппарата из группировки ГЛОНАСС. Данные взяты с ресурса celestrak.com [8] и сохранены в файле tledata.js [9]. Всего в группировке 28 аппаратов, но для наглядности выведены 3 первых по списку. Для расчета орбит и положений КА я использовал модуль satellite-js [10].

Изменение масштаба карты привязано к изменению высоты над поверхностью Земли. Размер звездной сферы зафиксирован поскольку в противном случае теряется реалистичность изображения, кода края небесной сферы становятся меньше краев карты. В идеале хотелось бы создать эффект бесконечной Вселенной как в Celestia с удалением и приближением звезд и планет.

Включать или выключать слои (группы объектов) теперь можно через отдельный список layers…

  • cntlines — линии созвездий,
  • cntpos — названия созвездий,
  • star — звезды,
  • sun Солнце,
  • moon — Луна,
  • planet — планеты,
  • earth — Земля,
  • sattrac — орбиты КА,
  • satsurface — подспутниковые точки КА,
  • sattrace — проекции эфемерид КА на Землю,
  • satsector — поля зрений КА (18 градусов),
  • satpos — точка КА на орбите,
  • terminator — ночная зона.

Результаты

Главной проблемой планетария с 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/