Формула гаверсинуса
Формула гаверсинуса — важливе рівняння у навігації, яке дозволяє обчислити відстань між точками на сфері, за їхніми довготою та широтою. Є окремим випадком більш загальної формули сферичної тригонометрії, закону гаверсинусів, відносно сторін та кутів сферичних трикутників. Перша таблиця гаверсинусів була опублікована Джеймсом Ендрю англійською мовою 1805 року.[1] Флоріан Каджорі вказує на більш раннє використання Хосе дон Мендоса-і-Ріосом[en] у 1801 році[2] Термін гаверсинус було придумано у 1835 році професором Джеймсом Інманом[en].[3]
Для будь-яких двох точок на сфері, гаверсинус центрального кута між ними обчислюється за наступною формулою:
де
- haversin це функція гаверсинуса:
- 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), для отримання теореми гаверсинусів вище.
- ↑ Heavenly Mathematics: The Forgotten Art of Spherical Trigonometry By Glen Van Brummelen
- ↑ A History of Mathematical Notations: Vol. II By Florian Cajori
- ↑ 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).
- ↑ 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.