Я пишу трехмерный симулятор солнечной системы , в котором есть планеты, астероиды, кометы и транснептуновые объекты. Он также включает ежедневные тела "Близкого сближения" из базы данных Лаборатории реактивного движения. Я рассчитываю положения планет, используя документ « Кеплеровские элементы для приблизительного положения больших планет » из JPL/Caltech с формулами, действительными для диапазона от 3000 г. до н.э. до 3000 г. н.э. Похоже, расчеты дают мне положение, которое недостаточно точно при работе с близкими объектами: в моделировании время наименьшего расстояния между землей и объектом не соответствует теоретическому времени.
Я также попробовал формулы для диапазона от 1800 до 2050 года нашей эры (которые должны быть более точными) без существенной разницы.
Мой вопрос: есть ли более точный метод для расчета положения планет, чем метод, который я использую.
«Более точный метод» будет состоять в том, чтобы либо численно интегрировать орбитальное движение, чтобы сделать свои собственные приблизительные эфемериды (см. этот и этот ответ), либо, как указывает @Vince49 , загрузить и интерполировать существующие эфемериды, в этом случае для очень большого количества второстепенных тела! Ни то, ни другое решение не является красивым или элегантным, но поскольку гравитация имеет большой радиус действия и «все притягивает все вокруг», кеплеровы орбиты здесь не годятся.
Реалистичные орбиты Солнечной системы лишь приблизительно кеплеровы.
Я упомяну, что интегрировать себя — это весело и познавательно, если вам действительно нравятся такие задачи, но сделать это правильно гораздо сложнее, чем показано в этих связанных ответах. Мне удалось сопоставить эфемериды JPL с 1 км за 1 год для дюжины крупных тел, но без правильного учета приливных эффектов между Землей и Луной положение Земли будет продолжать ухудшаться с каждым годом. Вам нужно будет сделать более сложный расчет, чем показанное здесь приближение.
Для меньших тел также важны негравитационные силы, такие как излучение Солнца и самого тела, а также выделение газа вблизи Солнца. Их можно приблизить, как я описал в этом вопросе и в этом ответе .
Поэтому я думаю, что рано или поздно вы, вероятно, решите использовать существующие эфемериды. Если вам нравится программировать на C, должна быть документация по использованию таких вещей, как набор инструментов Spice для интерполяции ядер JPL . Как только вы освоите это, вы можете решить построить менее точные гораздо меньшие таблицы для интерполяции, учитывая, что вам может потребоваться сделать тысячи или десятки тысяч второстепенных тел.
Отличный ответ @RoryAlsop включает в себя несколько полезных ссылок, в том числе библиотеку Python jplephem , которая интерполирует ядра Spice. Это может быть особенно полезно для вас.
Пакет Python Skyfield уже настроен для автоматической загрузки и интерполяции эфемерид развития JPL , но они предназначены только для основных тел Солнечной системы. Поскольку вы уже используете Python, я думаю, вам действительно понравится читать этот пакет. Это радость от использования.
Кроме того, пакет Python PyEphem выполняет для вас более широкий спектр функций орбиты. Я менее знаком с этим, так что вам придется исследовать себя. Он существует довольно давно, и я узнал, что он основан на XEphem и VSOP87 ( см. также ).
Пакеты Python SkyField и PyEphem поддерживаются одним человеком.
Винс 49
ооо
ЧакМ
ооо
Уве
ЧакМ
ЧакМ
прыгун
ЧакМ