Формула гаверсинуса

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Формула гаверсинуса — важливе рівняння у навігації, яке дозволяє обчислити відстань між точками на сфері, за їхніми довготою та широтою. Є окремим випадком більш загальної формули сферичної тригонометрії, закону гаверсинусів, відносно сторін та кутів сферичних трикутників. Перша таблиця гаверсинусів була опублікована Джеймсом Ендрю англійською мовою 1805 року.[1] Флоріан Каджорі вказує на більш раннє використання Хосе дон Мендоса-і-Ріосом[en] у 1801 році[2] Термін гаверсинус було придумано у 1835 році професором Джеймсом Інманом[en].[3]

Формула гаверсинусів

[ред. | ред. код]

Для будь-яких двох точок на сфері, гаверсинус центрального кута між ними обчислюється за наступною формулою:

де

  • d відстань між двома точками (згідно великого кола сфери; див. відстань на сфері),
  • r радіус сфери,
  • : широта точки 1 та широта точки 2
  • : довгота точки 1 and довгота точки 2

Ліворуч від знака рівняння d/r центральний кут у радіанах (пам'ятайте що φ та λ можуть бути переведені з градусів у радіани множенням π/180).

Розв'яжемо для d через застосування зворотного гаверсинуса (якщо можливо), або через використання функції арксинуса (зворотного синуса):

де h це haversin(d/r), або більш розгорнуто:

Використовуючи цю формулу, переконайтесь що h не перевищує 1 через помилку рухомої коми (d є дійсним лише для h від 0 до 1). h лише наближається до 1 для діаметрально протилежних точок — у цій області відносно багато помилок обчислення мають тенденцію виникнення при використанні кінцевої точності. Оскільки d є великим, (наближається до πR, половини окружності) маленька помилка часто не є головним приводом для турботи у цьому незвичайному випадку (проте існує інша формула відстані на сфері, яка уникає цю проблему). (Формула вище колись написана у термінах функції арктангенса, але потерпає від проблеми h = 1.)[джерело?]

Як описується нижче, схожа формула може бути написана використовуючи косинус (іноді відома як теорема косинусів, не плутайте з теорема косинусів для геометрії на площині) замість гаверсинусів, але якщо 2 точки розташовані близько одна до одної (наприклад <= 1 км) ви можете стикнутись з тим, що cos (d/R) = 0.99999999, що призведе до неточної відповіді. Оскільки формула гаверсинусів використовує синуси це оминає проблему.

Обидві формули лише наближені, якщо взяти до уваги, що Земля не ідеальна сфера: «радіус Землі» R варіюється від 6356,752 км на полюсах до 6378,137 км на екваторі. Більше того, радіус кривої земної поверхні проведеної з півночі на південь на полюсах (≈6399,594 км) на 1% більший ніж на екваторі(≈6335,439 км) — тож формула гаверсинусів та теорема косинусів не можуть бути гарантовано точнішими ніж 0.5%.[4] Більш ефективний метод, що враховує еліптичність Землі запропонований формулою Вінсенти[en] та іншими формулами у статті географічна відстань.

Теорема гаверсинусів

[ред. | ред. код]

Дано одиничну сферу, «трикутник» на поверхні сфери визначено як з'єднані дугами великих кіл точки u, v, and w на сфері. Якщо довжини цих трьох сторін це a (від u до v), b (від u до w), and c (від v до w), та кут протилежний c це C, тоді теорема гаверсинусів стверджує:

(Теорема гаверсинусів)

Оскільки це одинична сфера, довжини a, b, and c є рівними кутам (у радіанах) утвореним цими сторонами з центром сфери (для неодиничних сфер, кожна з цих довжин дуг дорівнює її центральному куту помноженому на радіус сфери).

Сферичний трикутник розв'язаний за теоремою гаверсинусів.

Для отримання формули гаверсинусів попередньої секції з цієї теореми просто розглянемо окремий випадок де u це Північний полюс, коли v та w — це дві точки відстань d між якими нам треба відшукати. У цьому випадку, a та b є π/2 − φ1,2 (наприклад, 90° − широта), C це відстань за довготою Δλ, та c — це бажаний d/R. Відмітимо, що sin(π/2 − φ) = cos(φ).

Для отримання теореми гаверсинусів, потрібно розпочати зі сферичної теореми косинусів:

(сферична теорема косинусів)

Як зазначено вище ця формула поганий шлях пошуку c коли c є малим. Замість цього ми замінимо свідчення, що cos(θ) = 1 − 2 haversin(θ), і також застосуємо суму свідчення cos(a − b) = cos(a) cos(b) + sin(a) sin(b), для отримання теореми гаверсинусів вище.

Див. також

[ред. | ред. код]

Джерела

[ред. | ред. код]
  1. Heavenly Mathematics: The Forgotten Art of Spherical Trigonometry By Glen Van Brummelen
  2. A History of Mathematical Notations: Vol. II By Florian Cajori
  3. Oxford English Dictionary. Oxford University Press. 2nd ed. 1989. Cites coinage of term «Haversine» by Prof. Jas. Inman, D. D., in his Navigation and Nautical Astronomy, 3rd ed. (1835).
  4. Calculate distance, bearing and more between Latitude/Longitude points [Архівовано 14 серпня 2018 у Wayback Machine.](англ.)

Посилання

[ред. | ред. код]
  • What is the best way to calculate the distance between 2 points? (англ.). Архів оригіналу за 11 серпня 2018. Процитовано 21 лютого 2015.
  • R. W. Sinnott, «Virtues of the Haversine», Sky and Telescope 68 (2), 159 (1984).
  • Deriving the haversine formula [Архівовано 14 серпня 2018 у Wayback Machine.], Ask Dr. Math (Apr. 20—21, 1999).
  • Romuald Ireneus 'Scibor-Marchocki, Spherical trigonometry, Elementary-Geometry Trigonometry web page (1997).
  • W. Gellert, S. Gottwald, M. Hellwich, H. Kästner, and H. Küstner, The VNR Concise Encyclopedia of Mathematics, 2nd ed., ch. 12 (Van Nostrand Reinhold: New York, 1989).
  • Реалізація формули гаверсинуса на 16 мовах [Архівовано 14 серпня 2018 у Wayback Machine.]
  • JavaScript implementation of Haversine formula to find distance between two latitude/longitude points. Архів оригіналу за 14 серпня 2018. Процитовано 21 лютого 2015.
  • C++ implementation of Haversine formula to find distance between two latitude/longitude points. Архів оригіналу за 22 липня 2011. Процитовано 21 лютого 2015.
  • Ruby implementation [Архівовано 22 січня 2022 у Wayback Machine.] of Haversine formula to find distance between two latitude/longitude points
  • Python implementation of Haversine formula to find distance between two latitude/longitude points
  • MacOS C implementation [Архівовано 14 серпня 2018 у Wayback Machine.] of Haversine formula to find distance between two latitude/longitude points using postal zip codes
  • Pascal implementation [Архівовано 16 січня 2019 у Wayback Machine.] of Haversine formula to find distance between two latitude/longitude points
  • Matlab implementation [Архівовано 13 травня 2020 у Wayback Machine.] of Haversine formula to find distance between two latitude/longitude points
  • MySQL custom UDF function implementation to compute the Haversine formula.