En consecuencia, el problema se reduce a la intersección de una línea con una esfera, lo cual es fácil.
Aquí están los detalles. Las entradas son los puntos P1 = (lat1, lon1) y P2 = (lat2, lon2) en la superficie de la tierra, considerados como una esfera, y dos radios correspondientes r1 y r2.
Convierta (lat, lon) en coordenadas geocéntricas (x, y, z). Como de costumbre, porque podemos elegir unidades de medida en las cuales la tierra tiene un radio unitario,
x = cos(lon) cos(lat)
y = sin(lon) cos(lat)
z = sin(lat).
En el ejemplo, P1 = (-90.234036 grados, 37.673442 grados) tiene coordenadas geocéntricas x1 = (-0.00323306, -0.7915, 0.61116) y P2 = (-90.953669 grados, 36.109997 grados) tiene coordenadas geocéntricas x2 = (-0.0134464, -0.807775 , 0.589337).
Convierta los radios r1 y r2 (que se miden a lo largo de la esfera) en ángulos a lo largo de la esfera. Por definición, una milla náutica (NM) es 1/60 grados de arco (que es pi / 180 * 1/60 = 0.0002908888 radianes). Por lo tanto, como ángulos,
r1 = 107.5 / 60 Degree = 0.0312705 radian
r2 = 145 / 60 Degree = 0.0421788 radian
El círculo geodésico de radio r1 alrededor de x1 es la intersección de la superficie de la tierra con una esfera euclidiana de radio sin (r1) centrada en cos (r1) * x1.
El plano determinado por la intersección de la esfera de radio sin (r1) alrededor de cos (r1) * x1 y la superficie de la tierra es perpendicular a x1 y pasa por el punto cos (r1) x1, de donde su ecuación es x.x1 = cos (r1) (el "." representa el producto de punto habitual ); igualmente para el otro plano. Habrá un punto único x0 en la intersección de esos dos planos que es una combinación lineal de x1 y x2. Escribiendo x0 = a x1 + b * x2 las dos ecuaciones planas son
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
Usando el hecho de que x2.x1 = x1.x2, que escribiré como q, la solución (si existe) viene dada por
a = (cos(r1) - cos(r2)*q) / (1 - q^2),
b = (cos(r2) - cos(r1)*q) / (1 - q^2).
En el ejemplo en ejecución, calculo a = 0.973503 yb = 0.0260194.
Evidentemente, necesitamos q ^ 2! = 1. Esto significa que x1 y x2 no pueden ser ni el mismo punto ni los puntos antipodales.
Ahora todos los demás puntos en la línea de intersección de los dos planos difieren de x0 por algún múltiplo de un vector n que es mutuamente perpendicular a ambos planos. El producto cruzado
n = x1~Cross~x2
realiza el trabajo siempre que n no sea cero: una vez más, esto significa que x1 y x2 no son ni coincidentes ni diametralmente opuestas. (Debemos tener cuidado de calcular el producto cruzado con alta precisión, ya que involucra restas con mucha cancelación cuando x1 y x2 están cerca una de la otra). En el ejemplo, n = (0.0272194, -0.00631254, -0.00803124) .
Por lo tanto, buscamos hasta dos puntos de la forma x0 + t * n que se encuentran en la superficie de la tierra: es decir, su longitud es igual a 1. De manera equivalente, su longitud al cuadrado es 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
El término con x0.n desaparece porque x0 (que es una combinación lineal de x1 y x2) es perpendicular a n. Las dos soluciones son fácilmente
t = sqrt((1 - x0.x0)/n.n)
y es negativo Una vez más se requiere alta precisión, porque cuando x1 y x2 están cerca, x0.x0 está muy cerca de 1, lo que lleva a una pérdida de precisión de coma flotante. En el ejemplo, t = 1.07509 o t = -1.07509. Los dos puntos de intersección, por lo tanto, son iguales
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
Finalmente, podemos convertir estas soluciones de nuevo a (lat, lon) convirtiendo geocéntrico (x, y, z) en coordenadas geográficas:
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
Para la longitud, use los valores de retorno de arcotangente generalizados en el rango de -180 a 180 grados (en aplicaciones informáticas, esta función toma tanto x como y argumentos como argumentos en lugar de solo la relación y / x; a veces se le llama "ATan2").
Obtengo las dos soluciones (-88.151426, 36.989311) y (-92.390485, 38.238380), que se muestran en la figura como puntos amarillos.
Los ejes muestran las coordenadas geocéntricas (x, y, z). El parche gris es la porción de la superficie de la tierra de -95 a -87 grados de longitud, 33 a 40 grados de latitud (marcado con una retícula de un grado). La superficie de la tierra se ha hecho parcialmente transparente para mostrar las tres esferas. La exactitud de las soluciones calculadas es evidente por cómo los puntos amarillos se sientan en las intersecciones de las esferas.