Ce n'est pas beaucoup plus difficile sur la sphère que dans l'avion, une fois que vous reconnaissez que
Par conséquent, le problème se réduit à couper une ligne avec une sphère, ce qui est facile.
Voici les détails. Les entrées sont des points P1 = (lat1, lon1) et P2 = (lat2, lon2) à la surface de la terre, considérés comme une sphère, et deux rayons correspondants r1 et r2.
Convertissez (lat, lon) en (x, y, z) coordonnées géocentriques. Comme d'habitude, parce que nous pouvons choisir des unités de mesure dans lesquelles la terre a un rayon unitaire,
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
Dans l'exemple, P1 = (-90.234036 degrés, 37.673442 degrés) a des coordonnées géocentriques x1 = (-0.00323306, -0.7915, 0.61116) et P2 = (-90.953669 degrés, 36.109997 degrés) a des coordonnées géocentriques x2 = (-0.0134464, -0.807775 , 0,589337).
Convertissez les rayons r1 et r2 (mesurés le long de la sphère) en angles le long de la sphère. Par définition, un mille marin (NM) correspond à 1/60 degré d'arc (soit pi / 180 * 1/60 = 0,0002908888 radians). Par conséquent, en tant qu'angles,
r1 = 107.5 / 60 Degree = 0.0312705 radian
r2 = 145 / 60 Degree = 0.0421788 radian
Le cercle géodésique de rayon r1 autour de x1 est l'intersection de la surface terrestre avec une sphère euclidienne de rayon sin (r1) centrée en cos (r1) * x1.
Le plan déterminé par l'intersection de la sphère de rayon sin (r1) autour de cos (r1) * x1 et la surface de la terre est perpendiculaire à x1 et passe par le point cos (r1) x1, d'où son équation est x.x1 = cos (r1) (le "." représente le produit scalaire habituel ); de même pour l'autre avion. Il y aura un point unique x0 à l'intersection de ces deux plans qui est une combinaison linéaire de x1 et x2. En écrivant x0 = a x1 + b * x2 les deux équations planes sont
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
En utilisant le fait que x2.x1 = x1.x2, que j'écrirai comme q, la solution (si elle existe) est donnée par
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
Dans l'exemple en cours d'exécution, je calcule a = 0,973503 et b = 0,0260194.
Évidemment, nous avons besoin de q ^ 2! = 1. Cela signifie que x1 et x2 ne peuvent être ni le même point ni les points antipodaux.
Maintenant, tous les autres points sur la ligne d'intersection des deux plans diffèrent de x0 par un multiple d'un vecteur n qui est mutuellement perpendiculaire aux deux plans. Le produit croisé
n = x1~Cross~x2
le travail fourni n est-il non nul: encore une fois, cela signifie que x1 et x2 ne sont ni coïncidents ni diamétralement opposés. (Nous devons prendre soin de calculer le produit croisé avec une grande précision, car cela implique des soustractions avec beaucoup d'annulation lorsque x1 et x2 sont proches l'un de l'autre.) Dans l'exemple, n = (0,0272194, -0,00631254, -0,00803124) .
Par conséquent, nous recherchons jusqu'à deux points de la forme x0 + t * n qui se trouvent à la surface de la terre: c'est-à-dire que leur longueur est égale à 1. De manière équivalente, leur longueur au carré est 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
Le terme avec x0.n disparaît car x0 (étant une combinaison linéaire de x1 et x2) est perpendiculaire à n. Les deux solutions sont facilement
t = sqrt((1 - x0.x0)/n.n)
et son négatif. Encore une fois, une haute précision est requise, car lorsque x1 et x2 sont proches, x0.x0 est très proche de 1, ce qui entraîne une perte de précision en virgule flottante. Dans l'exemple, t = 1,07509 ou t = -1,07509. Les deux points d'intersection sont donc égaux
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
Enfin, nous pouvons reconvertir ces solutions en (lat, lon) en convertissant les coordonnées géocentriques (x, y, z) en coordonnées géographiques:
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
Pour la longitude, utilisez l'arctangente généralisée qui renvoie des valeurs comprises entre -180 et 180 degrés (dans les applications informatiques, cette fonction prend à la fois x et y comme arguments plutôt que simplement le rapport y / x; elle est parfois appelée "ATan2").
J'obtiens les deux solutions (-88.151426, 36.989311) et (-92.390485, 38.238380), représentées sur la figure par des points jaunes.
Les axes affichent les coordonnées géocentriques (x, y, z). La tache grise est la partie de la surface de la terre de -95 à -87 degrés de longitude, 33 à 40 degrés de latitude (délimitée par un réticule d'un degré). La surface de la terre a été rendue partiellement transparente pour montrer les trois sphères. La justesse des solutions calculées est évidente par la position des points jaunes aux intersections des sphères.