Как вычислить моменты равноденствия / солнцестояния? - PullRequest
7 голосов
/ 01 апреля 2009

Какие алгоритмы или формулы доступны для вычисления равноденствий и солнцестояний? Я нашел один из них несколько лет назад и реализовал его, но точность была не велика: время суток, казалось, предполагалось в 00:00, 06:00, 12:00 и 18:00 UTC в зависимости от того, какое равноденствие или солнцестояние было вычислено. Википедия дает их вычисленные до минуты, поэтому должно быть возможно что-то более точное. Библиотеки для моего любимого языка программирования также выходят в те жесткие времена, поэтому я предполагаю, что они используют тот же или аналогичный алгоритм, который я реализовал.

Я также однажды попытался использовать библиотеку, которая дала мне солнечную долготу и реализовал процедуру поиска, чтобы сосредоточиться на точных моментах 0, 90, 180 и 270 градусов; это работало вплоть до второго, но не соответствовало времени в Википедии, поэтому я предполагаю, что с этим подходом что-то не так. Я, однако, приятно удивлен, обнаружив, что Маймонид (средневековый еврейский ученый) предложил алгоритм, использующий ту же самую идею тысячелетия назад.

Ответы [ 4 ]

1 голос
/ 01 апреля 2009

Я не уверен, что это достаточно точное решение для вас, но я нашел веб-сайт НАСА , на котором есть некоторые фрагменты кода для вычисления весеннего равноденствия, а также некоторая другая информация астрономического типа. Я также нашел ссылки на книгу под названием Астрономические алгоритмы , в которой могут быть ответы, которые вам нужны, если информация каким-либо образом недоступна в Интернете.

0 голосов
/ 23 декабря 2018

Используя PyMeeus и приведенный ниже код, вы можете получить, например, ответ

winter solstice for 2018 in Terrestrial Time is at:
 (2018, 12, 21, 22, 23, 52.493725419044495)
winter solstice for 2018 in UTC, if last leap second was (2016, 12):
 (2018, 12, 21, 22, 22, 43.30972542127711)
winter solstice for 2018 in local time, if last leap second was (2016, 12)
 and local time offset is -7.00 hours:
 (2018, 12, 21, 15, 22, 43.30973883232218)
i.e. 2018-12-21T15:22:43.309725-07:00

Конечно, ответ не точен вплоть до микросекунд, но я также хотел показать, как выполнять высокоточные преобразования с arrow.

Код:

from pymeeus.Sun import Sun
from pymeeus.Epoch import Epoch

year = 2018
target="winter"

# Get terrestrial time of given solstice for given year
solstice_epoch = Sun.get_equinox_solstice(year, target=target)

print("%s solstice for %d in Terrestrial Time is at:\n %s" %
      (target, year, solstice_epoch.get_full_date()))

print("%s solstice for %d in UTC, if last leap second was %s:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2], solstice_epoch.get_full_date(utc=True)))

solstice_local = (solstice_epoch + Epoch.utc2local()/(24*60*60))
print("%s solstice for %d in local time, if last leap second was %s\n"
 " and local time offset is %.2f hours:\n %s" %
 (target, year, Epoch.get_last_leap_second()[:2],
  Epoch.utc2local() / 3600., solstice_local.get_full_date(utc=True)))

Использование очень интересного модуля, поддерживающего ISO и TZ Стрелка: улучшенные даты и время для Python , которые можно печатать более красиво:

import arrow
import math

slutc = solstice_epoch.get_full_date(utc=True)
frac, whole = math.modf(slutc[5])

print("i.e. %s" % arrow.get(*slutc[:5], int(whole), round(frac * 1e6)).to('local'))
0 голосов
/ 28 мая 2009

Я реализовал алгоритм равноденствия и солнцестояния Жана Миуса (автора упомянутых выше Астрономических алгоритмов) в C и Java, если вам интересно.

0 голосов
/ 01 апреля 2009

Я знаю, что вы ищете что-то, что вставит здесь ответ, но я должен упомянуть SPICE , инструментарий, выпущенный NAIF в JPL, финансируемый НАСА. Это может быть излишним для альманаха Фермера, но вы упомянули интерес к точности, и этот инструментарий обычно используется в науке о планетах.

...