Auf der Kugel ist es nicht viel schwieriger als im Flugzeug, wenn man das einmal erkennt
Infolgedessen reduziert sich das Problem darauf, eine Linie mit einer Kugel zu schneiden, was einfach ist.
Hier sind die Details. Die Eingaben sind Punkte P1 = (lat1, lon1) und P2 = (lat2, lon2) auf der Erdoberfläche, die als Kugel betrachtet werden, und zwei entsprechende Radien r1 und r2.
Konvertiert (lat, lon) in (x, y, z) geozentrische Koordinaten. Wie üblich, weil wir Maßeinheiten wählen können, in denen die Erde einen Einheitsradius hat,
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
Im Beispiel hat P1 = (-90,234036 Grad, 37,673442 Grad) geozentrische Koordinaten x1 = (-0,00323306, -0,7915, 0,61116) und P2 = (-90,953669 Grad, 36,109997 Grad) geozentrische Koordinaten x2 = (-0,0134464, -0,807775 0,589337).
Wandeln Sie die Radien r1 und r2 (die entlang der Kugel gemessen werden) in Winkel entlang der Kugel um. Per Definition ist eine Seemeile (NM) 1/60 Bogengrad (was pi / 180 * 1/60 = 0,0002908888 Bogenmaß ist). Daher als Winkel,
r1 = 107.5 / 60 Degree = 0.0312705 radian
r2 = 145 / 60 Degree = 0.0421788 radian
Der geodätische Kreis mit dem Radius r1 um x1 ist der Schnittpunkt der Erdoberfläche mit einer bei cos (r1) * x1 zentrierten euklidischen Kugel mit dem Radius sin (r1).
Die Ebene, die durch den Schnittpunkt der Kugel mit dem Radius sin (r1) um cos (r1) * x1 und der Erdoberfläche bestimmt wird, verläuft senkrecht zu x1 und durch den Punkt cos (r1) x1, dessen Gleichung x.x1 = cos lautet (r1) (das "." stellt das übliche Skalarprodukt dar ); ebenfalls für das andere Flugzeug. Es wird einen eindeutigen Punkt x0 auf dem Schnittpunkt dieser beiden Ebenen geben, der eine lineare Kombination von x1 und x2 ist. Wenn Sie x0 = a x1 + b * x2 schreiben, sind die beiden ebenen Gleichungen
cos(r1) = x.x1 = (a*x1 + b*x2).x1 = a + b*(x2.x1)
cos(r2) = x.x2 = (a*x1 + b*x2).x2 = a*(x1.x2) + b
Unter Verwendung der Tatsache, dass x2.x1 = x1.x2, die ich als q schreiben werde, wird die Lösung (falls vorhanden) durch gegeben
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
Im laufenden Beispiel berechne ich a = 0,973503 und b = 0,0260194.
Offensichtlich brauchen wir q ^ 2! = 1. Dies bedeutet, dass x1 und x2 weder der gleiche Punkt noch Antipodenpunkte sein können.
Nun unterscheiden sich alle anderen Punkte auf der Schnittlinie der beiden Ebenen von x0 um ein Vielfaches eines Vektors n, der senkrecht zu beiden Ebenen steht. Das Kreuzprodukt
n = x1~Cross~x2
erledigt die Aufgabe, vorausgesetzt, n ist ungleich Null: Dies bedeutet wiederum, dass x1 und x2 weder zusammenfallen noch sich diametral gegenüberliegen. (Wir müssen darauf achten, das Kreuzprodukt mit hoher Genauigkeit zu berechnen, da es Subtraktionen mit viel Löschung beinhaltet, wenn x1 und x2 nahe beieinander liegen.) Im Beispiel ist n = (0.0272194, -0.00631254, -0.00803124) .
Deshalb suchen wir bis zu zwei Punkte der Form x0 + t * n, die auf der Erdoberfläche liegen: Das heißt, ihre Länge ist gleich 1. Entsprechend ist ihre quadratische Länge 1:
1 = squared length = (x0 + t*n).(x0 + t*n) = x0.x0 + 2t*x0.n + t^2*n.n = x0.x0 + t^2*n.n
Der Term mit x0.n verschwindet, weil x0 (eine lineare Kombination von x1 und x2) senkrecht zu n ist. Die beiden Lösungen sind leicht
t = sqrt((1 - x0.x0)/n.n)
und es ist negativ. Auch hier ist hohe Präzision gefragt, denn wenn x1 und x2 nahe beieinander liegen, liegt x0.x0 sehr nahe bei 1, was zu einem gewissen Verlust an Gleitkommapräzision führt. Im Beispiel ist t = 1,07509 oder t = -1,07509. Die beiden Schnittpunkte sind also gleich
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
Schließlich können wir diese Lösungen zurück in (lat, lon) konvertieren, indem wir geozentrische (x, y, z) in geografische Koordinaten konvertieren:
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
Verwenden Sie für den Längengrad den generalisierten Arkustangens-Rückgabewert im Bereich von -180 bis 180 Grad (in Computeranwendungen verwendet diese Funktion sowohl x als auch y als Argumente und nicht nur das Verhältnis y / x; manchmal wird sie als "ATan2" bezeichnet).
Ich erhalte die beiden Lösungen (-88.151426, 36.989311) und (-92.390485, 38.238380), die in der Abbildung als gelbe Punkte dargestellt sind.
Die Achsen zeigen die geozentrischen Koordinaten (x, y, z) an. Der graue Fleck ist der Teil der Erdoberfläche von -95 bis -87 Grad Länge, 33 bis 40 Grad Breite (markiert mit einem Grad-Gitter). Die Erdoberfläche wurde teilweise transparent gemacht, um alle drei Kugeln zu zeigen. Die Richtigkeit der berechneten Lösungen wird dadurch deutlich, wie die gelben Punkte an den Schnittpunkten der Kugeln liegen.