Разное время заката в одном и том же месте из-за высоты

Я и мой друг наблюдали закат в одном и том же месте (в моей стране широта примерно 40 градусов). Я на уровне моря, а мой друг на высоте. Он наблюдал закат с разницей примерно в 4 минуты, чем я. Он физик, поэтому он бросил мне вызов, чтобы узнать его высоту. Любые идеи о том, как использовать эту информацию и выиграть вызов? Я нашел некоторую информацию в Википедии здесь , но не могу многого понять. Любая идея о том, как решить эту проблему, будет оценена по достоинству. Заранее спасибо за вашу помощь.

Вам нужно быть немного более точным в том, где ваша проблема, тем более, что вы уже указали на объяснение. Мы не можем написать здесь целую книгу по этому вопросу, догадываясь, в чем заключается ваша реальная проблема в понимании вопроса.
@uhoh да, это тоже было мое предположение. На самом деле, Бурдж-Халифа будет достаточно высока для 4-минутной задержки.
@угу хорошо. Я удалил комментарий, так как объясняю предположения в своем ответе. Было бы неплохо получить больше информации от OP
@EricDuminil, надеюсь, они это сделают, хотя они «просто гость», возможно, они снова зайдут, прояснят это и спросят еще! :-)

Ответы (2)

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

Предположения

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

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

Библиотека Python

Astral кажется интересной библиотекой для вашей задачи:

Astral — это пакет Python для расчета времени различных аспектов солнца и фаз луны.

Он принимает во внимание высоту наблюдателя :

Время восхода солнца, которое вы испытываете, зависит от того, что заслоняет ваш взгляд на него. Он может быть закрыт горизонтом или каким-либо другим географическим объектом (например, горами).

Если то, что закрывает вас на уровне земли, — это горизонт, и вы находитесь на высоте над уровнем земли, то время восхода солнца зависит от того, насколько дальше вокруг земли вы можете видеть из-за вашей высоты (солнце восходит раньше и заходит позже).

высота_горизонт

Код

После установки пакета (версия 2.2.) легко рассчитать время восхода солнца для заданного места и даты. Я выбрал Барселону, потому что она находится близко к 40° северной широты и находится на уровне моря:

# pip install 'astral==2.2'
from astral import LocationInfo, sun
from astral.location import Location
loc = Location(LocationInfo('Barcelona','Spain', 'Europe/Madrid', 41.3851, 2.1734))
loc.sunset(observer_elevation=0)
#=> datetime.datetime(2020, 6, 12, 21, 25, 6, 803485, tzinfo=<DstTzInfo 'Europe/Madrid' CEST+2:00:00 DST>)

Последний аргумент — высота. Поиграв с ним некоторое время, похоже, что наблюдатель на высоте 715 м увидит закат на 4 минуты позже, чем наблюдатель на пляже:

loc.sunset(observer_elevation=715)
# => datetime.datetime(2020, 6, 12, 21, 29, 6, 987591, tzinfo=<DstTzInfo 'Europe/Madrid' CEST+2:00:00 DST>)

Алгоритм содержал ошибки в предыдущих версиях и был обновлен.

Смещение времени по отношению к высоте

Вот небольшая схема. Я не уверен, почему кривая выглядит так:

введите описание изображения здесь

Соответствующий код:

import matplotlib.pyplot as plt
import numpy as np
elevations = np.linspace(0, 2000, 1000)
sunsets = [(loc.sunset(observer_elevation=z) - loc.sunset(observer_elevation=0)).seconds/60 for z in elevations]
ax = plt.subplot()
plt.plot(elevations, sunsets, label="Sunset time offset")
ax.set_title("Sunset in Barcelona")
ax.set_xlabel('Elevation [m]')
ax.set_ylabel('Offset [minutes]')
plt.show()