Здравствуйте
Задался целью расчета лунных дней. Вроде бы информация не закрыта и информации много, как и готовых скриптов. Но - почему-то у меня все получается с погрешностью 1-2 суток (я сравниваю с онлайн-калькуляторами). Почему так - не знаю, вероятно нужно добавлять географическую составляющую или что.
Вот взять 2 первые ссылки из гугла:
_https://lyna.info/raschyot-lunnogo-dnya-rozhdeniya/
_http://redday.ru/informer/i_moon/225/bl.png
Там везде одинаково, а у меня так не получается.
В общем, посоветуйте скрипт (ЯП любой, я переведу), или нормальный алгоритм, или куда копать, в какую сторону.
Просто надо определять положение луны относительно Ас.
Восход луны считать методом деления отрезка пополам, например.
Простенький такой численный метод.
Первые сутки на момент новолуния, вторые на первый восход луны и т.п.
Ас это пересечение математического горизонта с эклиптикой. На востоке.
Есть тригонометрическая формула для его вычисления.
Отрезок делить между луной и Ас, когда она на восходе, при каком то шаге с нужной погрешностью координаты луны совпадут с координатой Ас.
Это будет начало новых лунных суток. Ну там разные, наверно, можно придумать алгоритмы совпадения луны и Ас, восхода луны.
Естественно вам понадобится вычисление координаты луны и солнца. Солнца для новолуния.
Имеются два варианта определения дней Луны:
1) День Луны начинается от восхода Луны или момента новолуния и заканчивается следующим восходом Луны или следующим новолунием. Первый и последний дни Луны могут быть очень короткими. Лунный месяц может содержать от 29 или 30 Лунных дней. Этот вариант использует П.П.Глоба.
2) День Луны определяется по 12-градусному аспекту Солнце-Луна, т.е. первый день Луны начинается в новолуние, следующие дни Луны начинаются, когда угол Солнце-Луна будет кратен 12 градусам. Лунных дней всегда 30. Этот вариант включается флажком "12 градусов".
Соответственно, в первом случае нужно рассчитывать и позиции небесных объектов, и восходы Луны. Во втором случае только позиции небесных объектов.
Новолуние происходит в тот момент, когда Луна входит в точное соединение с Солнцем. Как рассчитать долготу Солнца я написал здесь. Чтобы рассчитать позицию Луны там нужно поменять константу swisseph.SUN на swisseph.MOON.
Время восхода Луны рассчитывается примерно так:
Код:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import swisseph
if __name__ == "__main__":
year = 1957
month = 10
day = 15
hour = 0
minutes = 0
seconds = 0
lon = 25.1
lat = 58.95
# Высота в метрах.
alt = 0.0
# Атмосферное давление в миллибарах.
press = 0.0
# Температура в градусах Цельсия.
temp = 0.0
# Получение юлианского дня в ut.
et_ut = swisseph.utc_to_jd(year, month, day, hour, minutes, seconds, swisseph.GREG_CAL)
jd = et_ut[1]
# Флаг указывает, что используются швейцарские эфемериды.
flag = swisseph.FLG_SWIEPH
# Флаг указывает, что рассчитывается восход.
rsmi = swisseph.CALC_RISE
# Получения значения восхода Луны.
result = swisseph.rise_trans(jd, swisseph.MOON, lon, lat, alt, press, temp, rsmi, flag)
# Преобразование юлианской даты в UTC.
result = swisseph.jdut1_to_utc(result[1][0], swisseph.GREG_CAL)
print(result)
Нюанс: флаг rsmi может содержать несколько значений. Возможно еще потребуется их добавить.
Значения alt, press, temp можно указать для пущей точности.
Последний раз редактировалось Yuri197, 26.12.2018 в 01:41.