Эфемериды планет
Теперь в SpaceEngine можно наблюдать реальные солнечные и лунные затмения! Это видео показывает полное солнечное затмение 21 августа 2017 года, которое будет видно в США.
Прошлый месяц я работал над эфемеридами планет. Эфемериды - это таблицы данных и фрагменты кода, которые позволяют рассчитать точные координаты и скорости планет и спутников Солнечной системы на любой заданный момент времени. Ранее в SpaceEngine использовались Кеплеровы орбиты, которые являются хорошим приближением движения планеты вокруг Солнца (или луны вокруг планеты) в отсутствие возмущений. Но настоящая Солнечная система не так проста, в ней есть много планет и лун, которые тянут друг друга своей гравитацией. Это возмущает их орбиты, что делает кеплеровское решение неточным. Наиболее сильно возмущениям подвержены луны, как можете видеть на видео ниже - их орбиты прецессируют и раскачиваются.
Чтобы предсказать движение планет и спутников, астрономы используют N-body моделирование на суперкомпьютерах. В начале из наблюдений получаются таблицы начальных векторов состояния (координат и скоростей) всех основных тел Солнечной системы (Солнца, планет, спутников, сотен крупных астероидов, и даже используется аналитическая модель колец Сатурна). Потом запускается N-body симуляция, аналогичная той, которую вы можете запустить в Universe Sandbox. Но, в отличие от игры, научное моделирование очень точное и учитывает множество различных тонких эффектов, таких как неравномерность гравитационного потенциала сплюснутых планет, масконы на Луне и релятивистские эффекты. Моделирование проводится до сотен или тысяч лет в обоих направлениях - в будущее и в прошлое. После завершения получаются большие наборы данных, которые не очень удобны в использовании. Поэтому астрономы выводят аналитическое решение, которое с некоторой точностью аппроксимирует полученные результаты, или строят более компактные таблицы данных и выводят формулы для интерполяции между точками в этих таблицах. Иногда можно разработать полностью аналитическую модель движения какого-либо объекта.
Существует множество таких решений («теорий») движения планет и лун: VSOP87, DE405, TASS 1.7 и т.д., которые затем используются для расчёта координат объектов, прогнозирования затмений, планирования космических полётов; также они используются в различных программах-планетариях. С точки зрения применения в SE, их можно разделить на две категории:
На настоящий момент я реализовал следующие теории в SpaceEngine:
Вне рабочего временного интервала орбитальной теории SE использует экстраполяцию. Вычисляются первые или последние доступные координаты и вектор скорости тела, и по ним строится простая кеплеровская орбита.
Существует много других теорий, включая альтернативные теории для указанных выше тел, и теории для малых спутников. Я добавлю некоторые из них в SE позже. Обратите внимание, что теория VSOP87 не включает Луну, а единственная теория движения Луны, реализованная для SE, - это DExxx, поэтому следующая версия SE будет поставляться с файлом данных DE436 (около 100 Мб). В будущем я планирую реализовать теорию движения Луны ELP2000-82, поэтому VSOP87 можно будет сделать основной моделью (у неё нет больших файлов данных, и она обладает гораздо большим рабочим диапазоном времени, чем DE436). Существует более современная её версия - VSOP2013, но она также требует большие файлы данных (несколько по 300 Мб).
SE поддерживает все эфемериды JPL (DExxx), их можно скачать непосредственно с FTP сервера JPL. Там есть замечательное решение DE431 для планет, Солнца и Луны - оно имеет огромный рабочий промежуток времени в 30 000 лет (с -13200 г. до 17191 г.), но его файл данных весит аж 2,6 ГБ. По идее, SpaceEngine должен работать с ним, но я не проверял; SE может не хватить памяти (в настоящее время SE загружает файл в ОЗУ целиком, и ограничен 4 Гб, как 32-битное приложение). Доступные файлы на сервере JPL заканчиваются на DE431, но в верхних папках есть файлы в формате ASCII и утилита asc2eph.f, с помощью которой их можно преобразовать в бинарный формат, поддерживаемый SE (вам необходимо установить компилятор Fortran для компиляции и запуска утилиты). Сервер JPL также имеет таблицы данных для сотен астероидов и всех смоделированных спутников, но их суммарный размер составляет несколько десятков гигабайт - я думаю, это избыточно для SE.
Я также реализовал аналитические модели осевого вращения планет и лун, основанные на документе рабочей группы МАС по картографическим координатам и вращательным элементам (WGCCRE). Они моделируют прецессию осей вращения тел и малые периодические возмущения, но действительны только в ограниченном промежутке времени, как и орбитальные теории. Прецессия земной оси там не смоделирована, для неё нужна другая аналитическая модель. Вращение Луны также моделируется решением DE436, поэтому тут есть две альтернативы.
Для поддержки аналитических орбитальных теорий, я изменил способ рендера линий орбит в SE. Раньше для каждого тела генерировалась своя «модель» линии, её форма и размер зависели от параметров орбиты. Но потом я понял, что, поскольку все кеплеровы орбиты - это конические сечения (эллипс, парабола или гипербола), они могут быть нарисованы всего тремя различными моделями, с соответствующим масштабированием и смещением - окружностью, параболой и гиперболой. Это очень изящный и быстрый метод, потому что теперь можно использовать инстансинг для отображения тысяч орбит разом. Также экономится память и время загрузки (нет необходимости создавать и хранить тысячи моделей). Обновление изменяющихся орбит в режиме реального времени (аналитические орбиты планет, а также орбиты кораблей) теперь вообще бесплатное - надо просто вычислить новый масштаб/сдвиг для этих трёх моделей.