Звездное небо на Canvas

    Почему


    В этой статье я хочу более подробно рассказать о примере Starry Sky (Звездное Небо), реализованном с помощью скриптов dbCartajs (о них написано в предыдущей статье). Он включает в себя идеи других «звездных» проектов, которые были портированы на JavaScript. Рассмотрим их подробнее. Алгоритм формирования звездного неба был позаимствован из проекта Marble KDE плагин stars), расчет положения планет построен на основе замечательной статьи шведского астронома Поля Шлетера, модель движения космических аппаратов SGP4/SDP4 предоставлена модулем satellite-js, формулы солнечного терминатора (ночной зоны) взяты с астрономического форума. Вид орбит как эллипсов (мгновенная орбита) подсмотрен у Сelestia.
    Starry Sky

    Демо Starry Sky имеет чисто технологическое назначение: вывести в заданное время точку положения космического аппарата при заданных орбитальных параметрах. В Canvas это получилось относительно просто и красиво и я решил подробнее написать об этом. Если нужно что-то поменять в выводе объектов, настройках не нужно перекомпилировать программу как Marble или Xephem (и соответственно устанавливать компилятор или среду разработки), достаточно иметь лишь браузер. В Mozilla или Chrome уже есть встроенные панели отладки, где можно посмотреть, скажем, массив точек траектории аппарата. Это гораздо удобнее чем «вытаскивать» их из C-й.

    Почему демо? Потому что не учитываются размеры планет, собственное движение звезд, соответствие размера неба и размера Земли. Нужно добавлять соответствующие формулы. Зато учитывается положение звезд, планет и радиус космических аппаратов относительно Земли. Также вид Земли меняется вместе с изменением высоты над поверхностью (благодаря проекции nsper).

    Управление


    Вращение Земли происходит по клику в любой точке глобуса. В демо предусмотрен авторежим с ускорением времени (1 сек~15 минут, кнопка play рядом с датой). Анимацию с суточным периодом можно посмотреть здесь.
    Поделиться публикацией

    Похожие публикации

    Комментарии 3

      0
      А обновление при перемещении в реальном времени нельзя сделать или тормозить будет слишком?
        +1
        «Обновление при перемещении в реальном времени» — это, я так понял, значит поворот глобуса по тасканию мыши с одновременной перерисовкой карты. Можно сделать только действительно будет притормаживать, то есть мышью вы будете двигать быстрее чем глобус мыши за ней. Я пробовал другой вариант — при таскании мышью перерисовывать не всю карту а только координатную сетку в виде прицела (по одной оси X и Y сходящихся в точке курсора мыши). А карту перерисовать когда кнопка мыши отпущена. Этот вариант мне не нравится поскольку не работает на планшете. С кликом получается универсальнее. Но можно будет реанимировать его только для мыши.
        0
        :)

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое