| Haversine-Formel |
|---|
Die Haversine-Formel (seltener auch deutsch Semiversus-Formel) ist eine Gleichung aus der sphärischen Trigonometrie, mit der sich die Großkreisentfernung zwischen zwei Punkten auf einer Kugeloberfläche aus deren Längen- und Breitengraden berechnen lässt. Sie ist in der Navigation von großer Bedeutung und stellt einen Spezialfall des allgemeineren Gesetzes der Haversine dar, das die Seiten und Winkel sphärischer Dreiecke in Beziehung setzt.
Die Haversine-Funktion wurde erstmals 1801 in Navigationstabellen des spanischen Astronomen José de Mendoza y Ríos verwendet, wie der Mathematikhistoriker Florian Cajori dokumentierte. Mendoza y Ríos publizierte verschiedene Tabellen, die die Haversine-Methode (seiner Erfindung) verwendeten, um die Berechnungen der nautischen Astronomie und Navigation zu vereinfachen. Seine Tabellen halfen bei der Berechnung der Längengrade durch Monddistanzen – eine der wichtigsten Navigationsmethoden des 18. und frühen 19. Jahrhunderts.
Die erste bekannte englische Tabelle mit Haversinen wurde 1805 von James Andrew unter dem Namen "Squares of Natural Semi-Chords" veröffentlicht. Diese Bezeichnung verweist auf die geometrische Bedeutung der Funktion als Quadrat der halben Sehnenlänge.
Der Begriff "Haversine" wurde 1835 von James Inman in der dritten Ausgabe seines Werkes "Navigation and Nautical Astronomy: For the Use of British Seamen" geprägt. Er führte diese neue Tabelle ein, um die Berechnung von Entfernungen zwischen zwei Punkten auf der Erdoberfläche mittels sphärischer Trigonometrie zu vereinfachen. Der Name setzt sich aus "ha" (für "half", englisch für "halb") und "versine" zusammen und bedeutet somit "halber Sinus versus".
James Inman (1776–1859) war ein englischer Mathematiker und Astronom, Professor für Mathematik am Royal Naval College in Portsmouth und Autor der "Inman's Nautical Tables". Seine Einführung der Haversine-Funktion vereinfachte die Formeln der sphärischen Trigonometrie erheblich und seine Tabellen wurden von allen Navigatoren ausgiebig genutzt.
Vor dem Aufkommen von Computern erwies sich die Eliminierung von Divisionen und Multiplikationen mit dem Faktor zwei als so praktisch, dass Tabellen mit Haversine-Werten und Logarithmen in Navigations- und Trigonometrie-Lehrbüchern des 19. und frühen 20. Jahrhunderts enthalten waren. Roger Sinnott beschrieb 1984 im Magazin Sky & Telescope ("Virtues of the Haversine"), wie die Haversine-Formel selbst auf einem einfachen TRS-80 Computer in BASIC programmiert werden konnte, um die Winkeldistanz zwischen Sternen genau zu berechnen.
Die Haversine-Funktion ist definiert als:
Die Haversine-Funktion berechnet die halbe Versine des Winkels θ oder das Quadrat der halben Sehnenlänge des Winkels auf einem Einheitskreis (Kugel). Sie ist verwandt mit der älteren Versine-Funktion:
Für zwei Punkte auf einer Kugel mit den Koordinaten (φ₁, λ₁) und (φ₂, λ₂) – wobei φ den Breitengrad und λ den Längengrad bezeichnet – lautet die Haversine-Formel:
Dabei ist:
Für ein "Dreieck" auf der Oberfläche einer Einheitskugel, das durch Großkreise definiert wird, die drei Punkte u, v und w verbinden, besagt das Gesetz der Haversine:
Dabei sind a, b und c die Seitenlängen des sphärischen Dreiecks und C ist der Winkel gegenüber der Seite c.
Ein wesentlicher Vorteil der Haversine-Formel ist ihre numerische Stabilität, besonders für kleine Distanzen. Da die Haversine-Formel Sinusfunktionen verwendet, vermeidet sie das Problem der Auslöschung, das bei der Verwendung des sphärischen Kosinusgesetzes auftreten kann.
Beim sphärischen Kosinusgesetz kann es bei nahe beieinander liegenden Punkten (z. B. einen Kilometer voneinander entfernt auf der Erde) dazu kommen, dass cos(d/R) = 0,99999999 ergibt, was zu ungenauen Ergebnissen führt. Die Haversine-Formel umgeht dieses Problem durch die Verwendung der Sinusfunktion, die für kleine Winkel numerisch stabiler ist.
Die Haversine-Formel ist nur eine Näherung, wenn sie auf die Erde angewandt wird, da diese keine perfekte Kugel ist. Der "Erdradius" R variiert von 6356,752 km an den Polen bis 6378,137 km am Äquator. Noch entscheidender ist, dass der Krümmungsradius einer Nord-Süd-Linie auf der Erdoberfläche an den Polen (≈6399,594 km) 1 % größer ist als am Äquator (≈6335,439 km), was zur Folge hat, dass die Haversine-Formel im Extremfall bis zu 0,5 % vom exakten Wert abweichen kann.
Genauere Methoden, die die Elliptizität der Erde berücksichtigen, werden durch die Vincenty-Formel und andere Formeln für geographische Distanzen angegeben.
Die Haversine-Formel und die Vincenty-Formel sind die zwei am häufigsten verwendeten Methoden zur Distanzberechnung auf der Erdoberfläche:
| Eigenschaft | Haversine-Formel | Vincenty-Formel |
|---|---|---|
| Erdmodell | Kugel | Ellipsoid |
| Genauigkeit | ±0,3 % | ±0,5 mm |
| Rechenaufwand | Einfach, wenig rechenintensiv | Komplex, iterativ |
| Numerische Stabilität | Sehr gut für alle Distanzen | Kann bei antipodalen Punkten versagen |
| Anwendungsbereich | Web- und Mobilanwendungen | Geodätische Berechnungen |
Beispiel: Die Distanz zwischen Pune (Indien) und Sydney (Australien) beträgt mit der Haversine-Formel 6236,243 Meilen und mit der Vincenty-Formel 6231,892 Meilen.
Die Haversine-Formel berechnet die kürzeste Distanz zwischen zwei Punkten auf einer Kugel unter Verwendung ihrer Breiten- und Längengrade entlang der Oberfläche und ist wichtig für die Navigation. Sie findet Anwendung in:
Die Haversine-Formel wird in verschiedenen Bereichen wie Astronomie, Geodäsie und Navigation verwendet. Moderne Anwendungen umfassen:
Ein Beispiel für die Implementierung in PHP:
<?php
function haversine($lat1, $lon1, $lat2, $lon2) {
// Radius der Erde in Kilometern
$earthRadius = 6371;
// Differenzen in Radiant umrechnen
$dLat = deg2rad($lat2 - $lat1);
$dLon = deg2rad($lon2 - $lon1);
// Breiten in Radiant umrechnen
$lat1 = deg2rad($lat1);
$lat2 = deg2rad($lat2);
// Haversine-Formel anwenden
$a = sin($dLat / 2) * sin($dLat / 2) +
sin($dLon / 2) * sin($dLon / 2) *
cos($lat1) * cos($lat2);
$c = 2 * asin(sqrt($a));
// Distanz berechnen
return $earthRadius * $c;
}
// Beispielverwendung
$lat1 = 38.898; // Washington D.C. (Weißes Haus)
$lon1 = -77.037;
$lat2 = 48.858; // Paris (Eiffelturm)
$lon2 = 2.294;
$distance = haversine($lat1, $lon1, $lat2, $lon2);
echo "Entfernung: " . round($distance, 2) . " km\n";
?>
Die Haversine-Formel kann verwendet werden, um die ungefähre Entfernung zwischen dem Weißen Haus in Washington, D.C. (Breitengrad 38,898° N, Längengrad 77,037° W) und dem Eiffelturm in Paris (Breitengrad 48,858° N, Längengrad 2,294° E) zu berechnen.
Schrittweise Berechnung:
Die Haversine-Funktion gehört zu einer Familie trigonometrischer Funktionen: