Jump to content

Уравнение восхода солнца

Контурный график продолжительности светового дня в зависимости от широты и дня года с использованием наиболее точных моделей, описанных в этой статье. Видно, что область постоянного дня и постоянной ночи достигает полярных кругов (здесь они обозначены как «Анта-ц» и «Аркт-ц»), что является следствием наклона Земли.
Duration: 10 seconds.
График светового дня в зависимости от даты изменения широты. Этот график был создан с использованием простого уравнения восхода Солнца, аппроксимирующего Солнце как одну точку и не учитывающего эффектов, вызванных атмосферой или диаметром Солнца.

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

Формулировка

[ редактировать ]

Он формулируется как:

где:

угол солнечного часа либо на восходе солнца (когда принимается отрицательное значение), либо на закате (когда принимается положительное значение);
широта наблюдателя на Земле ;
Солнца это склонение .

Принципы

[ редактировать ]

Земля . вращается с угловой скоростью 15°/час Следовательно, выражение , где в градусах, дает интервал времени в часах от восхода солнца до местного солнечного полудня или от местного солнечного полудня до заката .

Соглашение о знаках обычно заключается в том, что широта наблюдателя равно 0 на экваторе , положительно для северного полушария и отрицательно для южного полушария , а солнечное склонение равен 0 в дни весеннего и осеннего равноденствия , когда солнце находится точно над экватором, положительный летом в северном полушарии и отрицательный зимой в северном полушарии.

Выражение выше всегда применимо для широт между Полярным кругом и Южным полярным кругом . К северу от Полярного круга или к югу от Полярного круга есть по крайней мере один день в году без восхода и захода солнца. Формально, есть восход или закат, когда летом в Северном полушарии, и когда зимой в Северном полушарии. Для мест за пределами этих широт это либо 24-часовое дневное время , либо 24-часовое ночное время .

Выражения для солнечного часового угла

[ редактировать ]

В уравнении, приведенном в начале, функция косинуса в левой части дает результаты в диапазоне [-1, 1], но значение выражения в правой части находится в диапазоне . Применимое выражение для в формате Фортрана 90 выглядит следующим образом:

omegao = acos(max(min(-tan(delta*rpd)*tan(phi*rpd), 1.0), -1.0))*dpr

где омегао градусах дельта в в градусах фи равно в градусах rpd равно , а dpr равен .

Вышеприведенное выражение дает результаты в степени в диапазоне . Когда , это означает, что сейчас полярная ночь или 0-часовой световой день; когда , это означает, что сейчас полярный день или 24-часовой световой день.

Отношение полушарий

[ редактировать ]

Предполагать - заданная широта в северном полушарии, а — соответствующий угол восхода солнца, имеющий отрицательное значение, и аналогично находится на той же широте, но в южном полушарии, что означает , и — соответствующий угол часа восхода солнца, то очевидно, что

,

что означает

.

Из приведенного выше соотношения следует, что в один и тот же день продолжительность дня от восхода до захода солнца в и сумма равна 24 часам, если , причем это касается и регионов, где бывают полярные дни и полярные ночи. Это также предполагает, что глобальная средняя продолжительность дневного времени в любой конкретный день составляет 12 часов без учета влияния атмосферной рефракции.

Обобщенное уравнение

[ редактировать ]
секстанта Процедура уменьшения зрения , показывающая поправки на солнечную высоту за рефракцию и высоту.

В приведенном выше уравнении не учитывается влияние атмосферной рефракции (которая поднимает солнечный диск — т. е. заставляет солнечный диск казаться выше в небе — примерно на 0,6°, когда он находится на горизонте) и ненулевой угол, образуемый солнечным диском — т. е. видимый диаметр Солнца — (около 0,5°). Время восхода и захода верхнего лимба Солнца, указанное в астрономических альманахах, корректирует это с помощью более общего уравнения

с углом высоты (а) центра солнечного диска, равным примерно -0,83 ° (или -50 угловых минут).

Приведенное выше общее уравнение можно также использовать для любой другой высоты Солнца. NOAA предоставляет дополнительные приблизительные выражения для поправок за рефракцию на этих других высотах. [1] Существуют также альтернативные формулировки, такие как некусочное выражение Г.Г. Беннета, используемое в «Программном обеспечении векторной астрономии» Военно-морской обсерватории США. [2]

Полный расчет на Земле

[ редактировать ]

Обобщенное уравнение опирается на ряд других переменных, которые необходимо вычислить, прежде чем его можно будет вычислить самостоятельно. В этих уравнениях солнечно-земные константы заменены угловыми константами, выраженными в градусах.

Рассчитать текущий юлианский день

[ редактировать ]

где:

— количество дней с 12:00 1 января 2000 г.
это юлианская дата ;
2451545.0 — это эквивалент юлианского года юлианским дням для 01 января 2000 г., 12:00:00.
0,0008 — это дробный юлианский день для високосных секунд и земного времени (TT).
1 января 1958 года TT было установлено на 32,184 секунды с отставанием от TAI. К 1972 году, когда была введена дополнительная секунда, были добавлены 10 секунд. К 1 января 2017 года было добавлено еще 27 секунд, что составило 69,184 секунды. 0,0008=69,184/86400 без DUT1 .
The операция округляет до следующего целого числа дней n.

Среднее солнечное время

[ редактировать ]

где:

является аппроксимацией среднего солнечного времени в целом числе выражается в юлианских днях с дробью дня.
– долгота (запад – отрицательная, восток – положительная) наблюдателя на Земле;

Средняя солнечная аномалия

[ редактировать ]

где:

M — средняя солнечная аномалия, используемая в следующих трех уравнениях.

Уравнение центра

[ редактировать ]

где:

C — это уравнение центрального значения, необходимое для расчета лямбды (см. следующее уравнение).
1,9148 — коэффициент уравнения центра планеты, на которой находится наблюдатель (в данном случае Земли).

Эклиптическая долгота

[ редактировать ]

где:

λ — эклиптическая долгота .
102,9372 — это значение аргумента перигелия .

Солнечный транзит

[ редактировать ]

где:

J- транзит — это юлианская дата местного истинного солнечного транзита (или солнечного полудня ).
2451545.0 — это полдень соответствующего юлианского года .
представляет собой упрощенную версию уравнения времени . Коэффициенты представляют собой дробные дни.

Склонение Солнца

[ редактировать ]

где:

это склонение Солнца.
23,4397 ° - максимальный наклон оси Земли к Солнцу. [3]

Часовой угол

[ редактировать ]

Это уравнение, приведенное выше, с поправками на атмосферную рефракцию и диаметр солнечного диска.

где:

ω o часовой угол наблюдателя от меридиана ;
— северная широта наблюдателя (север положителен, юг отрицателен) на Земле.

Для наблюдений на морском горизонте, требующих поправки на высоту наблюдателя, добавьте , или до -0,833 ° в синусоидальном члене числителя. Это корректирует как видимое падение, так и земную рефракцию. Например, для наблюдателя на высоте 10 000 футов добавьте (-115°/60) или примерно от -1,92° до -0,833°. [4]

Рассчитать восход и заход солнца

[ редактировать ]

где:

Jrise фактическая дата восхода солнца по юлианскому календарю;
J set — это фактическая дата заката по юлианскому календарю.

Пример реализации на Python

[ редактировать ]
#!/usr/bin/env python3

import logging
from datetime import datetime, timedelta, timezone, tzinfo
from math import acos, asin, ceil, cos, degrees, fmod, radians, sin, sqrt
from time import time

log = logging.getLogger()


def _ts2human(ts: int | float, debugtz: tzinfo | None) -> str:
    return str(datetime.fromtimestamp(ts, debugtz))


def j2ts(j: float | int) -> float:
    return (j - 2440587.5) * 86400


def ts2j(ts: float | int) -> float:
    return ts / 86400.0 + 2440587.5


def _j2human(j: float | int, debugtz: tzinfo | None) -> str:
    ts = j2ts(j)
    return f'{ts} = {_ts2human(ts, debugtz)}'


def _deg2human(deg: float | int) -> str:
    x = int(deg * 3600.0)
    num = f'∠{deg:.3f}°'
    rad = f'∠{radians(deg):.3f}rad'
    human = f'∠{x // 3600}°{x // 60 % 60}{x % 60}″'
    return f'{rad} = {human} = {num}'


def calc(
        current_timestamp: float,
        f: float,
        l_w: float,
        elevation: float = 0.0,
        *,
        debugtz: tzinfo | None = None,
) -> tuple[float, float, None] | tuple[None, None, bool]:
    log.debug(f'Latitude               f       = {_deg2human(f)}')
    log.debug(f'Longitude              l_w     = {_deg2human(l_w)}')
    log.debug(f'Now                    ts      = {_ts2human(current_timestamp, debugtz)}')

    J_date = ts2j(current_timestamp)
    log.debug(f'Julian date            j_date  = {J_date:.3f} days')

    # Julian day
    # TODO: ceil ?
    n = ceil(J_date - (2451545.0 + 0.0009) + 69.184 / 86400.0)
    log.debug(f'Julian day             n       = {n:.3f} days')

    # Mean solar time
    J_ = n + 0.0009 - l_w / 360.0
    log.debug(f'Mean solar time        J_      = {J_:.9f} days')

    # Solar mean anomaly
    # M_degrees = 357.5291 + 0.98560028 * J_  # Same, but looks ugly
    M_degrees = fmod(357.5291 + 0.98560028 * J_, 360)
    M_radians = radians(M_degrees)
    log.debug(f'Solar mean anomaly     M       = {_deg2human(M_degrees)}')

    # Equation of the center
    C_degrees = 1.9148 * sin(M_radians) + 0.02 * sin(2 * M_radians) + 0.0003 * sin(3 * M_radians)
    # The difference for final program result is few milliseconds
    # https://www.astrouw.edu.pl/~jskowron/pracownia/praca/sunspot_answerbook_expl/expl-4.html
    # e = 0.01671
    # C_degrees = \
    #     degrees(2 * e - (1 / 4) * e ** 3 + (5 / 96) * e ** 5) * sin(M_radians) \
    #     + degrees(5 / 4 * e ** 2 - (11 / 24) * e ** 4 + (17 / 192) * e ** 6) * sin(2 * M_radians) \
    #     + degrees(13 / 12 * e ** 3 - (43 / 64) * e ** 5) * sin(3 * M_radians) \
    #     + degrees((103 / 96) * e ** 4 - (451 / 480) * e ** 6) * sin(4 * M_radians) \
    #     + degrees((1097 / 960) * e ** 5) * sin(5 * M_radians) \
    #     + degrees((1223 / 960) * e ** 6) * sin(6 * M_radians)

    log.debug(f'Equation of the center C       = {_deg2human(C_degrees)}')

    # Ecliptic longitude
    # L_degrees = M_degrees + C_degrees + 180.0 + 102.9372  # Same, but looks ugly
    L_degrees = fmod(M_degrees + C_degrees + 180.0 + 102.9372, 360)
    log.debug(f'Ecliptic longitude     L       = {_deg2human(L_degrees)}')

    Lambda_radians = radians(L_degrees)

    # Solar transit (julian date)
    J_transit = 2451545.0 + J_ + 0.0053 * sin(M_radians) - 0.0069 * sin(2 * Lambda_radians)
    log.debug(f'Solar transit time     J_trans = {_j2human(J_transit, debugtz)}')

    # Declination of the Sun
    sin_d = sin(Lambda_radians) * sin(radians(23.4397))
    # cos_d = sqrt(1-sin_d**2) # exactly the same precision, but 1.5 times slower
    cos_d = cos(asin(sin_d))

    # Hour angle
    some_cos = (sin(radians(-0.833 - 2.076 * sqrt(elevation) / 60.0)) - sin(radians(f)) * sin_d) / (cos(radians(f)) * cos_d)
    try:
        w0_radians = acos(some_cos)
    except ValueError:
        return None, None, some_cos > 0.0
    w0_degrees = degrees(w0_radians)  # 0...180

    log.debug(f'Hour angle             w0      = {_deg2human(w0_degrees)}')

    j_rise = J_transit - w0_degrees / 360
    j_set = J_transit + w0_degrees / 360

    log.debug(f'Sunrise                j_rise  = {_j2human(j_rise, debugtz)}')
    log.debug(f'Sunset                 j_set   = {_j2human(j_set, debugtz)}')
    log.debug(f'Day length                       {w0_degrees / (180 / 24):.3f} hours')

    return j2ts(j_rise), j2ts(j_set), None


def main():
    logging.basicConfig(level=logging.DEBUG)
    latitude = 33.00801
    longitude = 35.08794
    elevation = 0
    print(calc(time(), latitude, longitude, elevation, debugtz=timezone(timedelta(hours=3), 'fake-zone')))


if __name__ == '__main__':
    main()

См. также

[ редактировать ]
  1. ^ НОАА (Министерство торговли США). «Детали солнечного расчета» . Лаборатория глобального мониторинга ESRL – Глобальная радиация и аэрозоли .
  2. ^ «Таблицы поправок на высоту секстанта» . www.siranah.de .
  3. ^ «Информационный бюллетень о Земле» .
  4. ^ Точный источник этих цифр трудно отследить, но в «Записках о падении горизонта» содержится описание, дающее еще одну менее значимую цифру, а на другой странице серии указано -2,075.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 516842528b1ff49b9a67533ea40d5f0a__1718931840
URL1:https://arc.ask3.ru/arc/aa/51/0a/516842528b1ff49b9a67533ea40d5f0a.html
Заголовок, (Title) документа по адресу, URL1:
Sunrise equation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)