Как я могу рассчитать время восхода/захода солнца?
Мне нравится отслеживать время восхода и захода солнца. За последние пару лет я делал это с небольшой программой, написанной с популярной библиотекой для моего любимого языка программирования. Последние два месяца я отслеживал эти времена чаще, чем обычно, и я заметил, что в день равноденствия время восхода солнца подскочило на восемь минут по сравнению с предыдущим днем! Я знал, что это невозможно и по сравнению с NOAA, выяснив, что мое время нарастания и времени было отключено на несколько дней и фактически казалось, что оно выключено примерно на минуту в течение большей части года.
На этом этапе я хотел бы просто выполнить вычисления самостоятельно. Какие алгоритмы или формулы доступны для этого вычисления?
Ответы
Ответ 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 и использовать ее в качестве таблицы поиска вместо ее вычисления? В наши дни хранение данных относительно дешево.
Ответ 8
Возможно, вам захочется взглянуть на более раннюю запись о вычислении положения солнца. В частности, программа Solpos, которая Я указал на поддержку восхода/захода солнца.