Prawo cosinusów i wzór Haversine'a dadzą identyczne wyniki, zakładając maszynę z nieskończoną precyzją. Wzór Haversine jest bardziej odporny na błędy zmiennoprzecinkowe. Jednak dzisiejsze maszyny mają podwójną precyzję rzędu 15 cyfr znaczących, a prawo cosinusów może Ci wystarczyć. Obie te formuły zakładają kulistą ziemię, podczas gdy rozwiązanie iteracyjne Vicenty'ego (najdokładniejsze) przyjmuje ziemię elipsoidalną (w rzeczywistości Ziemia nie jest nawet elipsoidą - jest geoidą). Niektóre odniesienia:http://www.movable-type. co.uk/scripts/gis-faq-5.1.html
Jest lepiej:zwróć uwagę na szerokość geograficzną, która ma być używana w prawie cosinusów, a Haversine to szerokość geocentryczna, która różni się od szerokości geograficznej. W przypadku kuli te dwa są takie same.
Który z nich jest najszybszy do obliczenia?
W kolejności od najszybszego do najwolniejszego są:prawo cosinusów (5 wywołań trygonometrycznych) -> haversine (obejmuje sqrt) -> Vicenty (trzeba rozwiązać to iteracyjnie w pętli for)
Który z nich jest najdokładniejszy?
Vincenta.
Który z nich jest najlepszy, biorąc pod uwagę zarówno szybkość, jak i dokładność?
Jeśli twoja dziedzina problemu jest taka, że dla odległości, które próbujesz obliczyć, Ziemię można uznać za płaską, to możesz wypracować (nie będę podawać szczegółów) wzór w postaci x =kx * różnica długości geograficznej , y =ky * różnica szerokości geograficznej. Następnie odległość =sqrt(dxdx + dy dy). Jeśli twoja problematyczna domena jest taka, że można ją rozwiązać z odległością do kwadratu, nie będziesz musiał brać sqrt, a ten wzór będzie tak szybki, jak to tylko możliwe. Ma tę dodatkową zaletę, że możesz obliczyć wektor odległość - x to odległość w kierunku wschodnim, a y to odległość w kierunku północnym. W przeciwnym razie poeksperymentuj z 3 i wybierz to, co działa najlepiej w Twojej sytuacji.