Skip to content
/ pysky Public

Визуализатор звёздного неба

Notifications You must be signed in to change notification settings

anaym/pysky

Repository files navigation

Приложение-визуализатор небесной сферы

Приложение разработано в качестве лабораторной работы по курсу "Языки сценариев" ИМКН УрФУ, 2016-2017 (ФИИТ, 2 курс)

Автор:

Антон Толстов, aka Anaym, education@atolstov.com

Системные требования (минимальные и выше):

  • Python 3.5.2
  • PyQt 5 (pip install pyqt5) - библиотека GUI
  • JDCal (pip install jdcal) - библиотека работы с юлианским календарём

ВНИМАНИЕ

Для ввода значений в меню (координаты, время, ускорение, ...):

  1. Поставьте курсор в соответствующее поле
  2. Перейдите в режим редактирования нажав Enter. Поле должно стать серым
  3. Введите новое значение
  4. Для подтверждения нажмите Enter еще раз. Поле станет белым, и если значение корректно - оно изменится

Декомпозиция:

  • geometry - модуль с необходимыми геометрическими примитивами, для описания небесной сферы
    • nvector.py - описывает произвольный immutable n-мерный вектор
    • equatorial.py - описывает вектор в экваториальной системе координат, а так же его преобр-е в горизонтальную
    • horizontal.py - описывает вектор в горизонтальной системе координат, а так же его преобр-е в декартовую
    • vector.py - описывает вектор в декартовой системе координат
    • angle_helpers.py - описывает вспомогательные функции и декораторы для работы с углами
    • sky_math.py - описывает математику необходимую для небесной сферы
  • graphics - модуль для работы с графикой
    • autogui - модуль-обертка над pyqt5 для более удобного преобразования полей классов в виджеты
    • renderer - модуль описывающий рендеринг небесной сферы
      • camera.py - описывает камеру (угол взгляда)
      • watcher.py - описывает наблюдателя (координаты, время)
      • settings.py - настройки рендеринга
      • projector.py - проецирование небесной сферы на плоскость на основе настроек наблюдателя
      • renderer.py - рендеринг небесной сферы на плоскость на основе настроек наблюдателя
    • sky_viewers - модуль описывающий оконный вариант программы
  • stars - модуль работы со звездами и небесной сферой
    • stars - база данных со звёздами северного полушария
    • star.py - описывает звезду/небесное тело
    • skydatebase.py - база данных звезд, с фильтром по созвездиям
    • parser.py - парсер текстовой базы звезд
    • star_time.py - описывает звездное время
  • tests - модуль с unit-тестами
  • program.py - основной файл для запуска
  • requrements.py - модуль работы с зависимостями
  • sound.py - небольшой аудиоплеер
  • task.py - парсер входных аргументов
  • _utility.py - общие вспомогательные функции

Пример запуска

python program.py
python program.py -c
python program.py -c -d "29.11.16 9:31"
python program.py -c -d "30.11.16 18:20:41" --constellations Andromeda Camelopardalis
python sound.py "resources\Still Alive.mp3"

Управление

WASDQE - вращение камеры
F - переключение полноэкранного режима
M - переключение видимости меню
N - переключение видимости фильтра
I - сохранение текущего изображения
R - перерендерить
Space - переключение паузы
Esc - выход
Мышь с зажатой левой клавишей - вращение камеры (лево-право - вращение в горизонтальной плоскости, вверх-вниз - в вертикальной)
Двойной клик по названию созвездия - ориентация на созвездие
Двойной клик по звезде - ориентация на звезду
Наведение курсора на звезду - Созвездие, Имя звезды, Спектральный класс, Магнитуда в виде всплывающей подсказки

Условные обозначения

Синяя [линия] окружность - [направление на] северный полюс
Оранжевая [линия] окружность - [направление на] южный полюс
Зеленая [линия] окружность - [направление на] взгляд под углом 90` вверх
Голубая окружность - вектор взгляда
Фиолетовая окружность - вектор наблюдателя

Краткое описание принципа работы

  1. Преобразование координат для отрисовки
    • Входные данные: Координаты звезд в экваториальной системе координат
    • Поворачиваем небесную сферу с учетом текущего времени и координат: Экваториальные координаты
    • Преобразуем в декартову систему координат: Декартовы координаты
    • Применяем проецирование для отрисовки на экране: Спроецированные координаты
    • Применяем искажение рыбьего глаза для улучшения наглядности: Экранные координаты
  2. Построение визуализации
    • Изображение рендериться в классе Renderer
    • Sky - автоперерисовывающаяся со временем небесная сфера
    • ControllableSky : Sky - визуализация с меню управления
    • FilterableSky : ControllableSky - фильтрация по магнитуде/созвездию
    • KeyControllableSky : FilterableSky - визуализауия с управлением с клавиатуры
    • MouseControllableSky : KeyControllableSky - визуализация, поддерживающая управление мышью
    • NamedSky : MouseControllableSky - подсказки о звездах

Примеры вывода:

Sky Andromeda

About

Визуализатор звёздного неба

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages