Entfernungsberechnung: Unterschied zwischen den Versionen
HeinzJ (Diskussion | Beiträge) |
HeinzJ (Diskussion | Beiträge) (→Herleitung) |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | ==Herleitung== | ||
+ | |||
+ | Der Einheitsvektor vom Erdmittelpunkt in Richtung eines Ortes mit Laenge ''l'' und Breite ''b'' hat die kartesischen Komponenten <math>\vec{n} = (x, y, z) = (\sin l\cos b, \cos l \cos b , \sin b)</math> ([[Kugelkoordinaten]]). Das [[:de:Skalarprodukt]] zweier solcher Einheitsvektoren ''n<sub>1</sub>'' und ''n<sub>2</sub>'' gibt den Kosinus des eingeschlossenen Winkels: <math>\vec{n_1}\cdot\vec{n_2} = \cos \theta</math>. | ||
+ | |||
+ | Daraus erhaelt man :<math>\theta = \arccos \left[\cos{b_1}\cos{b_2}\cos(l_1 - l_2) + \sin{b_1}\sin{b_2}\right]</math>, wobei die [[Trigonometrie#Eigenschaften_und_Formeln|trigonometrische Identitaet]] <math>\sin{l_1}\sin{l_2}+\cos{b_1}\cos{b_2} = \cos(l_1-l_2)</math> verwendet wurde. Den Winkel ''θ'' (im Bogenmass) muss man dann nur noch mit dem Erdradius multiplizieren, um die Entfernung zwischen den beiden Orten auf der Erdoberflaeche zu erhalten. Das ist die Zeile ''Entf = ...'' in | ||
+ | |||
==Code== | ==Code== | ||
===[[Visual Basic]] === | ===[[Visual Basic]] === | ||
− | Quelle: [http://de.wikipedia.org/wiki/Benutzer:Aerocat Aerocat] | + | Quelle: [http://de.wikipedia.org/wiki/Benutzer:Aerocat Aerocat] in [http://de.wikipedia.org/w/index.php?title=Wikipedia:Auskunft&oldid=39725570 Wikipedia] |
<source lang="vb"> | <source lang="vb"> | ||
Aktuelle Version vom 5. Dezember 2007, 20:39 Uhr
Inhaltsverzeichnis
Herleitung
Der Einheitsvektor vom Erdmittelpunkt in Richtung eines Ortes mit Laenge l und Breite b hat die kartesischen Komponenten <math>\vec{n} = (x, y, z) = (\sin l\cos b, \cos l \cos b , \sin b)</math> (Kugelkoordinaten). Das de:Skalarprodukt zweier solcher Einheitsvektoren n1 und n2 gibt den Kosinus des eingeschlossenen Winkels: <math>\vec{n_1}\cdot\vec{n_2} = \cos \theta</math>.
Daraus erhaelt man :<math>\theta = \arccos \left[\cos{b_1}\cos{b_2}\cos(l_1 - l_2) + \sin{b_1}\sin{b_2}\right]</math>, wobei die trigonometrische Identitaet <math>\sin{l_1}\sin{l_2}+\cos{b_1}\cos{b_2} = \cos(l_1-l_2)</math> verwendet wurde. Den Winkel θ (im Bogenmass) muss man dann nur noch mit dem Erdradius multiplizieren, um die Entfernung zwischen den beiden Orten auf der Erdoberflaeche zu erhalten. Das ist die Zeile Entf = ... in
Code
Visual Basic
Function Entf(ByVal Laenge1 As Double, ByVal Breite1 As Double, _ ByVal Laenge2 As Double, ByVal Breite2 As Double) As Double 'Ermittelt die Entfernung zwischen zwei Orten auf der Erde. 'Laenge1 und Breite1 stellen die geografische Lage des ersten, 'Laenge2 und Breite2 des zweiten Ortes dar. Dim Erdradius As Double Erdradius = 6370 Entf = aCos(Sin(DtoR(Breite1)) * Sin(DtoR(Breite2)) + Cos(DtoR(Breite1)) _ * Cos(DtoR(Breite2)) * Cos(DtoR(Laenge1 - Laenge2))) * Erdradius End Function ------ Function DtoR(Grad As Double) As Double 'Konvertiert Winkel im Gradmaß in Winkel im Bogenmaß DtoR = Grad / (180 / PI()) End Function ------- Function aCos(X As Double) As Double If X < -1 Then X = -1 ElseIf X = -1 Then aCos = PI() ElseIf X > -1 And X < 1 Then aCos = 2 * Atn(1) - Atn(X / Sqr(-X * X + 1)) Else aCos = 0 End If 'Zu beachten ist: -1 < X < 1, Arccos(-1) = Pi und Arccos(1) = 0 End Function