De kortste afstand tussen twee punten is een rechte lijn. Dit wiskundig feit is zelfs een vaste uitdrukking geworden in de omgangstaal. Technisch gezien wordt de afstand waarvan hier sprake is de Euclidische afstand genoemd. Om in een driedimensionale ruimte de afstand $$d$$ te berekenen tussen een punt $$(x_1, y_1, z_1)$$ en een punt $$(x_2,y_2,z_2)$$, kan je de volgende formule gebruiken: \[d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}\]

Op de bolvormige Aarde moet men zich bij routebepaling echter beperken tot reiswegen die het aardoppervlak volgen. Daarbij blijft de kortste afstand tussen twee punten een rechte lijn. Alleen is een rechte lijn hier net iets anders gedefinieerd. Op een bol volgt een rechte lijn immers een grote cirkel. Zo'n grote cirkel is de snijlijn van de bol met een vlak dat door het middelpunt van de bol gaat.

 

Er bestaan verschillende formules om de korste afstand tussen twee punten op een bol te bepalen. De haversine formule is echter vanuit numeriek oogpunt de meest stabiele. Het woord haversine is een samentrekking van halfed versed sine, waarbij de versed sine van de hoek $$\theta$$ gelijk is aan $$1-\cos(\theta)$$. De helft hiervan is dan gelijk aan \[\frac{1-\cos(\theta)}{2} = \left(\sin\left(\frac{\theta}{2}\right)\right)^2\] Als $$r$$ de aardstraal voorstelt, dan wordt de haversine formule om de afstand $$d$$ te bepalen tussen een punt met coördinaten $$(b_1,l_1)$$ en een punt met coördinaten $$(b_2,l_2)$$ gegeven door \[\begin{aligned}[c] a & = \left(\sin\left(\frac{b_2-b_1}{2}\right)\right)^2 + \cos(b_1)\cos(b_2)\left(\sin\left(\frac{l_2-l_1}{2}\right)\right)^2 \\ c & = \arctan\left(\sqrt{\frac{a}{1-a}}\right) \\ d & = 2rc \end{aligned}\]

Als je de Euclidische afstand tussen twee punten op het aardoppervlak wil weten, dan moet je eerst hun coördinaten omzetten naar $$x$$-, $$y$$- en $$z$$-coördinaten. De formules hiervoor zijn echter zeer eenvoudig. Als een punt breedte- en lengteligging $$(b,l)$$ heeft, dan kan je dat omrekenen naar $$x$$-, $$y$$- en $$z$$-coördinaten met de volgende formules \[ \left\{ \begin{aligned}[c] x & = r\cos(b)\cos(l) \\ y & = r\cos(b)\sin(l) \\ z & = r\sin(b) \end{aligned} \right.\] Hierbij stelt $$r$$ de aardstraal voor.

Opgave

Voorbeeld

>>> latLng2Cartesisch(0.0, 0.0)
(6371.0, 0.0, 0.0)
>>> euclidischeAfstand(0.0, 0.0, 0.0, 0.0)
0.0
>>> euclidischeAfstand(0.0, 0.0, 0.0, 180.0)
12742.0
>>> haversineAfstand(0.0, 0.0, 0.0, 0.0)
0.0
>>> haversineAfstand(0.0, 0.0, 0.0, 180.0)
20015.086796