Кто-либо знает, что алгоритм или вычисляет лунную фазу или возраст в данную дату или находит даты в течение новых / полнолуний в данном году?
Поиск с помощью Google говорит мне, что ответ находится в некоторой книге Астрономии, но я действительно не хочу покупать целую книгу, когда мне только нужна единственная страница.
Обновление:
Я должен был квалифицировать свой оператор о поиске с помощью Google немного лучше. Я действительно находил решения, которые только работали по некоторому подмножеству времени (как 1900-е); и аккуратные основанные решения, которые были бы более в вычислительном отношении дорогими, чем, я хотел бы.
S Lott в его книге Python имеет несколько алгоритмов для вычисления Пасхи в данный год, большинство - меньше чем десять строк кода и некоторая работа в течение всех дней в Григорианском календаре. Нахождение полной луны в марте является основной частью нахождения Пасхи, таким образом, я полагал, что должен быть алгоритм, который не требует аккуратный и работает на все даты в Григорианском календаре.
Некоторое время назад я перенес на Python некоторый код. Я собирался просто дать ссылку на него, но оказалось, что он тем временем упал с Интернета, поэтому мне пришлось очистить его и загрузить снова. См. moon.py , полученный из moontool Джона Уокера .
Я не могу найти указание на то, в какой период времени это точно, но похоже, что авторы были довольно строгими. Это означает, что да, он действительно использует триггер, но я не могу себе представить, какого черта вы могли бы использовать это для того, чтобы сделать его невыполнимым с вычислительной точки зрения. Накладные расходы на вызов функций Python, вероятно, больше, чем затраты на триггерные операции. Компьютеры довольно быстрые в вычислениях.
Алгоритмы, используемые в коде, взяты из следующих источников:
Meeus, Jean. Астрономические алгоритмы. Ричмонд: Willmann-Bell, 1991. ISBN 0-943396-35-2.
Обязательно иметь; если вы покупаете только одну книгу, убедитесь, что это именно эта.Алгоритмы представлены математически, а не в виде компьютерных программ, но исходный код, реализующий многие алгоритмы из книги, можно заказать отдельно у издателя в QuickBasic, Turbo Pascal или C. Meeus предоставляет множество рабочих примеров вычислений, которые необходимы для отладки. ваш код, и часто представляет несколько алгоритмов с различными компромиссами между точностью, скоростью, сложностью и долгосрочным (столетия и тысячелетия) сроком действия.
Даффет-Смит, Питер. Практическая астрономия с вашим калькулятором. 3-е изд. Кембридж: Издательство Кембриджского университета, 1981. ISBN 0-521-28411-2.
Несмотря на слово «Калькулятор» в названии; это ценный справочник, если вы заинтересованы в разработке программного обеспечения, которое вычисляет положение планет, орбиты, затмения и тому подобное. Дается больше справочной информации, чем в Meeus, что помогает тем, кто еще не разбирается в астрономии, выучить часто сбивающую с толку терминологию. Приведенные алгоритмы проще и менее точны, чем у Meeus, но подходят для большинства практических работ.
Кроме того, pyephem - программы астрономии научного уровня [ PyPI ], который является пакетом Python, но имеет вычислительные возможности в C и говорят
Precision <0,05 "от -1369 до +2950.
Использует методы поиска по таблице для ограничения вызовы тригонометрических функций.
Я знаю, что вы ищете Python, но если вы понимаете C #, есть проект с открытым исходным кодом под названием Chronos XP , который делает это очень хорошо.
Если вам не нужна высокая точность, вы всегда можете (ab) использовать класс лунного (или лунно-солнечного) календаря (например, HijriCalendar
или ChineseLunisolarCalendar
в Microsoft .NET) для вычисления (приблизительной) фазы луны любой даты в качестве свойства календаря «день месяца», являющегося лунным (или лунно-солнечным) календарным днем, всегда соответствует фазе луны (например, день 1 - новолуние, день 15 - полнолуние и т. Д.)