Подтвердить что ты не робот

Как я могу рассчитать время восхода/захода солнца?

Мне нравится отслеживать время восхода и захода солнца. За последние пару лет я делал это с небольшой программой, написанной с популярной библиотекой для моего любимого языка программирования. Последние два месяца я отслеживал эти времена чаще, чем обычно, и я заметил, что в день равноденствия время восхода солнца подскочило на восемь минут по сравнению с предыдущим днем! Я знал, что это невозможно и по сравнению с NOAA, выяснив, что мое время нарастания и времени было отключено на несколько дней и фактически казалось, что оно выключено примерно на минуту в течение большей части года.

На этом этапе я хотел бы просто выполнить вычисления самостоятельно. Какие алгоритмы или формулы доступны для этого вычисления?

4b9b3361

Ответ 1

Вы можете рассмотреть статью Википедии о уравнениях восхода солнца. В приведенном параграфе дается уравнение:

1c7e6d828fd4db1cd6596043daad1c53.png

где:

  • ω o - это часовой угол в градусах по восходящему солнцу (при отрицательном значении) или закате (при положительном значении) в степени (°)
  • φ - широта наблюдателя на Земле в градусах
  • δ - это солнце declination в градусах

Ответ 2

Если вы хотите соответствовать NOAA, вам придется проконсультироваться с Астрономическими алгоритмами Жан Миуса (в основном, глава 15). И это сложно! Мартин Беккет прав, вы должны определить закат. Обычно это кажущееся повышение или набор верхней конечности солнца, что делает ваш "стандартный" altitide -5/6 градусов (не ноль). И вы не можете рассчитать восход солнца или закат непосредственно с точностью NOAA. Вам нужно будет создать управляющий набор уравнений для видимого прямого восхождения и склонения в течение рассматриваемого дня, а затем интерполировать кажущееся прямое восхождение и склонение со временем, чтобы найти точное время нарастания и установки на стандартной высоте.

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

Ответ 3

Определения того, что составляет восход/закат, могут различаться. Например, в ephem "повышение и настройка определяются как моменты, когда верхняя конечность тела касается горизонта (т.е. когда bodys alt плюс радиус равен нулю)" [Краткое описание PyEphem].

#!/usr/bin/env python
import datetime
import ephem # to install, run `pip install pyephem`

o = ephem.Observer()
o.lat, o.long, o.date = '34:3', '-118:15', datetime.datetime.utcnow()
sun = ephem.Sun(o)
print "Los Angeles"
print "sunrise:", o.next_rising(sun), "UTC"
print "sunset:",o.next_setting(sun), "UTC"

Выход

Los Angeles, CA
sunrise: 2010/3/30 13:42:43 UTC
sunset: 2010/3/30 02:11:50 UTC

Если это библиотека с открытым исходным кодом, вы можете исправить ее, а не создавать новую с новыми ошибками.

Ответ 4

Взгляните на эту книгу:
"Практическая астрономия с вашим калькулятором (в мягкой обложке)" Питера Даффетта-Смита.
Он довольно старый, но все еще печатный... ссылка

Ответ 5

Для точности в диапазоне 5 минут вы должны рассмотреть "который" закат.
Вы хотите, чтобы время, когда дно солнца касалось горизонта или время, когда верхняя часть Солнца проходит под горизонтом?

Требуется 2 минуты для того, чтобы солнце пересекло горизонт.
Ниже уровня 1мин вам также необходимо учитывать атмосферную рефракцию.

Ответ 6

В Ruby я написал это для уравнения времени.

include Math

# degrees to radians = PI/180
to_r = PI/180.0

#radians to degrees = 180/PI
to_d = 180.0/PI

puts "Day, Declination, EofT"

# test a celestial year worth of values.
for jday in 1..366

  et = -7.633 * sin(jday * (2 * PI)/365.24) + 9.65 * sin((jday - 78) * 180/92 * to_r)
  a_sin = sin(23.433 * to_r) * sin((2 * PI/366) * (jday - 81))
  declination = asin(a_sin) * to_d
  puts "#{jday}, #{declination}, #{et}"

end

Тогда для приведенного выше уравнения:

# center disk and refraction factor have been considered.
cos_omega = sin(-0.83 * to_r) - tan(latitude * to_r) * tan(declination * to_r)
semi_diurnal_arc = acos(cos_omega)

Для этого есть целый сайт, посвященный этому http://www.analemma.com/

  • Ключом к этим вычислениям являются хорошие библиотеки, такие как питон для выше.
  • Также использование классов Date и Time. Я бы посмотрел на rubyforge на что-то вроде ephem.

Ответ 7

Я видел некоторые интересные вещи на этой странице NOAA в разделе технических определений и вычислений, но я уверен, что вы прочитайте это уже.

Ответ на вопрос SO "Положение солнца в данное время суток и lat/long" и выше может фактически быть всем, что вам нужно.

Как побочная заметка (она не отвечает на ваш вопрос напрямую), есть ли причина, по которой вы не можете вытащить данные NOAA и использовать ее в качестве таблицы поиска вместо ее вычисления? В наши дни хранение данных относительно дешево.