distances.online

Статья в блоге

Калькулятор гаверсинусов: формула шаг за шагом, с картой

Почему кажется, что самолёты летят по дуге? Математическое объяснение шаг за шагом, с калькулятором и интерактивной картой.

Опубликовано: Обновлено: Все статьи

Загрузка карты…

Перетащите маркер A или B в любое место карты. Синяя линия — кратчайший путь по глобусу, серая — прямая на плоской карте; расстояние и каждый шаг формулы пересчитываются, пока вы их перемещаете.

Точка A
Точка B
Расстояние
5 576,5 км
5 576 462 м

Координаты можно ввести и здесь.

Формула шаг за шагом для двух точек выше

ШагФормулаЗначение
Широта A в радианахφ₁ = lat(A) · π / 1800,710572 рад
Широта B в радианахφ₂ = lat(B) · π / 1800,898974 рад
Разница широтΔφ = φ₂ − φ₁0,188401 рад
Разница долготΔλ = λ₂ − λ₁1,289418 рад
Значение гаверсинусаa = sin²(Δφ/2) + cos φ₁ · cos φ₂ · sin²(Δλ/2)0,17923643
Центральный уголc = 2 · atan2(√a, √(1 − a))0,874309 рад
Расстояниеd = R · c (R = 6 378,137 км)5 576,5 км

Когда вы вводите в калькулятор Нью-Йорк и Лондон, первым появляется число 5 576 км. Для него не сверялись ни с какими дорогами и расписаниями рейсов: это кратчайший возможный путь по поверхности Земли между центрами двух городов, и получается он из небольшого кусочка тригонометрии, который называется формулой гаверсинусов. В этой статье формула записана полностью, шаг за шагом разобран именно этот расчёт Нью-Йорк — Лондон, а на карте можно перетаскивать две точки и видеть, как каждый шаг обновляется в реальном времени. Если сначала хотите понять идею без уравнений, начните со введения простыми словами.

Почему линейка на плоской карте врёт

На карте маршрут дальнего перелёта почти никогда не выглядит прямой линией — только дугой. Кажется, что это крюк, но на самом деле это кратчайший путь.

Чтобы это проверить, достаточно глобуса и куска нитки. Прижмите один конец к Лондону, другой — к Нью-Йорку и натяните нитку: она не пойдёт вдоль параллели на запад, а поднимется над Атлантикой, пройдёт рядом с Гренландией и снова спустится. Именно так летают самолёты. Такой путь называется большим кругом (ортодромией): это край, который получается, если разрезать глобус пополам через центр. На шаре это самая прямая из возможных линий. Линия, которую калькулятор рисует между двумя городами, — это и есть та самая дуга, перенесённая на плоскую карту.

Один и тот же маршрут на глобусе (слева) и на плоской карте (справа). На сфере это самая прямая из возможных линий; на карте она выгибается к северу, а серая линия — то, что провела бы линейка. Нажмите на изображение, чтобы увеличить его.

Проблемы начинаются, когда шар переносят на плоскость, как на большинстве карт: пропорции искажаются. У экватора плоская карта почти не отличается от шара, но чем ближе к полюсам, тем сильнее она растягивается. На самой распространённой карте Гренландия кажется почти такой же большой, как Африка, хотя на самом деле Африка примерно в четырнадцать раз больше.

Поэтому траектория полёта, нарисованная на плоскости, выглядит тем изогнутее, чем дальше от экватора она проходит. Маршрут Лондон — Нью-Йорк образует заметную дугу, а Мадрид — Буэнос-Айрес, пересекающий экватор, выглядит почти прямым.

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

Формула

Назовём две точки A и B. У каждой есть широта φ (фи) и долгота λ (лямбда) — два угла, которые задают её положение на глобусе. Широта показывает, насколько точка севернее или южнее экватора; долгота — насколько восточнее или западнее Гринвичского меридиана.

a= sin2 (Δφ2) + cos⁡φ1 · cos⁡φ2 · sin2 (Δλ2)
c= 2·atan2⁡ (a,1−a)
d=R·c

Разберём построчно:

  • Δφ (дельта фи) — разница широт A и B, а Δλ (дельта лямбда) — разница долгот. Обе должны быть в радианах, а не в градусах: умножьте градусы на π и разделите на 180.
  • a — «гаверсинус» центрального угла. Он объединяет разницу север–юг и разницу восток–запад, масштабируя часть восток–запад косинусами обеих широт, потому что градус долготы тем короче, чем ближе вы к полюсу (на экваторе один градус долготы — около 111 км; на 60° северной широты — всего 56 км).
  • c превращает это число в угол между двумя точками в радианах, если смотреть из центра Земли. На практике используют форму с atan2: она остаётся точной, даже когда точки находятся очень близко друг к другу или ровно друг напротив друга.
  • d — расстояние: этот угол, умноженный на радиус Земли R. Если R в километрах, то и результат в километрах.

Слово гаверсинус (англ. haversine) — сокращение от «half the versed sine», то есть половина синус-верзуса, тригонометрической функции, которую моряки с XIX века держали в печатных таблицах, потому что она позволяла легко выполнить именно этот расчёт вручную, на корабле. Современная компьютерная версия — та же идея, записанная через sin².

Из Нью-Йорка в Лондон, шаг за шагом

Калькулятор использует такие координаты центров городов: Нью-Йорк — широта 40,7128°, долгота −74,0060° (запад отрицательный), Лондон — широта 51,5074°, долгота −0,1278°. Если подставить их в формулу с тем же радиусом Земли, что и в калькуляторе, 6378,137 км, получим:

ШагФормулаЗначение
Широта Нью-Йорка в радианахφ₁ = 40,7128 · π / 1800,710572 rad
Широта Лондона в радианахφ₂ = 51,5074 · π / 1800,898974 rad
Разница широтΔφ = φ₂ − φ₁0,188401 rad
Разница долготΔλ = (−0,1278 − (−74,0060)) · π / 1801,289418 rad
Гаверсинус центрального углаa = sin²(Δφ/2) + cos φ₁ · cos φ₂ · sin²(Δλ/2)0,17923643
Центральный уголc = 2 · atan2(√a, √(1 − a))0,874309 rad
Расстояниеd = 6378,137 км · c5 576,5 км

Стоит обратить внимание на две вещи. Центральный угол составляет около 50 градусов, седьмую часть полного оборота, поэтому дуга между Нью-Йорком и Лондоном так заметно изгибается на плоской карте. А разница долгот (1,2894 rad, около 74°) значит гораздо больше, чем разница широт (0,1884 rad, около 11°): города лежат примерно на одной широте, так что бо́льшая часть расстояния приходится на направление восток–запад.

Насколько точна формула гаверсинусов?

Формула исходит из того, что Земля — идеальный шар. Это не так: на экваторе она немного раздута, а у полюсов сплюснута, примерно на одну трёхсотую. Расстояние от центра до экватора — 6378,1 км, до полюсов — 6356,8 км.

Из этого следуют два практических вывода:

  1. Выбранный радиус меняет ответ. Этот сайт использует экваториальный радиус, 6378,137 км, и получает для маршрута Нью-Йорк — Лондон 5 576,5 км. Многие источники вместо него берут средний радиус 6371 км и получают 5 570,2 км. Оба результата — «то самое» расстояние по формуле гаверсинусов; разница между ними около 0,1 %.
  2. По сравнению с реальной формой Земли формула гаверсинусов может давать погрешность примерно до 0,5 %. Для маршрута Нью-Йорк — Лондон это до 28 км. Для маршрута Лондон — Сидней длиной около 17 000 км — 50 км и больше. Методы вроде формул Винсенти работают на эллипсоиде и дают точность до миллиметров, но ценой гораздо более тяжёлых вычислений и того, что для почти диаметрально противоположных точек они иногда не сходятся.

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