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 terrestre, considerada como una esfera, y dos radios correspondientes r1 y r2.
-
Convertir (lat, lon) en coordenadas geocéntricas (x,y,z). Como siempre, porque podemos elegir unidades de medida en las que 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).
-
Convierte 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 geodésico círculo de radio r1 alrededor de x1 es la intersección de la superficie terrestre con un Euclidiano esfera 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 terrestre es perpendicular a x1 y pasa por el punto cos(r1)*x1, por lo que su ecuación es x.x1 = cos(r1) (la "." representa la producto puntual habitual ); lo mismo para el otro plano. Habrá un único punto 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
Utilizando 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 actual, calculo a = 0,973503 y b = 0,0260194.
Evidentemente necesitamos q^2 != 1. Esto significa que x1 y x2 no pueden ser ni el mismo punto ni puntos antípodas.
-
Ahora todos los demás puntos de la línea de intersección de los dos planos difieren de x0 en algún múltiplo de un vector n que es mutuamente perpendicular a ambos planos. El producto cruzado
n = x1~Cross~x2
hace el trabajo siempre que n sea distinto de cero: una vez más, esto significa que x1 y x2 no son ni coincidentes ni diametralmente opuestos. (Hay que tener cuidado de calcular el producto cruzado con mucha precisión, porque implica sustracciones con mucha cancelación cuando x1 y x2 están cerca el uno del otro). 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 encuentren en la superficie terrestre: es decir, su longitud es igual a 1. De forma equivalente, sus al cuadrado longitud 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 (siendo una combinación lineal de x1 y x2) es perpendicular a n. Las dos soluciones fácilmente son
t = sqrt((1 - x0.x0)/n.n)
y su negativo. Una vez más se requiere alta precisión, porque cuando x1 y x2 están cerca, x0.x0 es muy cercano a 1, lo que conlleva una cierta pérdida de precisión en coma flotante. En el ejemplo, t = 1,07509 o t = -1,07509. Por lo tanto, los dos puntos de intersección son iguales a
x0 + t*n = (0.0257661, -0.798332, 0.601666)
x0 - t*n = (-0.0327606, -0.784759, 0.618935)
-
Por último, podemos volver a convertir estas soluciones en (lat, lon) convirtiendo las coordenadas geocéntricas (x,y,z) en coordenadas geográficas:
lon = ArcTan(x,y)
lat = ArcTan(Sqrt[x^2+y^2], z)
Para la longitud, utilice la arctangente generalizada que devuelve valores en el rango de -180 a 180 grados (en aplicaciones informáticas, esta función toma ambos x e y como argumentos en lugar de sólo la relación y/x; a veces se llama "ATan2").
Obtengo las dos soluciones (-88,151426, 36,989311) y (-92,390485, 38,238380), mostradas en la figura como puntos amarillos.
Los ejes muestran las coordenadas geocéntricas (x,y,z). La mancha gris es la parte de la superficie terrestre comprendida entre -95 y -87 grados de longitud y entre 33 y 40 grados de latitud (marcada con una retícula de un grado). La superficie terrestre se ha hecho parcialmente transparente para mostrar las tres esferas. La corrección de las soluciones calculadas es evidente por la forma en que los puntos amarillos se sitúan en las intersecciones de las esferas.
1 votos
Si todos los radios van a ser tan pequeños (menos de varios kilómetros), entonces la tierra es esencialmente plana a esta escala y es mejor que elijas una proyección simple y precisa y realices los cálculos euclidianos habituales. Asegúrate de calcular la intersección con más de tres decimales: el imprecisión en el tercer decimal ¡es tan grande como cualquiera de sus radios!
1 votos
Debería haber añadido unidades, esos radios están en NM por lo que sigue siendo una distancia pequeña respecto a la superficie terrestre pero mayor que unos pocos km. ¿Cómo afecta esa escala a la distorsión? Estoy tratando de encontrar una solución exacta a menos de <1nm, por lo que no tiene que ser súper precisa. Gracias.
0 votos
Todo esto es bueno saberlo, porque demuestra que se puede utilizar un modelo esférico de la Tierra; los modelos elipsoidales más complicados son innecesarios.
0 votos
@whuber ¿Significa esto que el problema podría ser replanteado como: encontrar la intersección de 3 esferas donde una de las esferas es la tierra, y las otras dos están centradas en los puntos con sus respectivos radios?
0 votos
@Kirk Sí, esa es la forma de hacerlo, asumiendo un modelo esférico de la superficie terrestre. Después de algunos cálculos preliminares que reduce esto a un caso especial del problema de Trilateración en 3D. (Los cálculos son necesarios para convertir la distancia a lo largo de los arcos esféricos a las distancias a lo largo de las cuerdas esféricas, que se convierten en los radios de las dos esferas más pequeñas).
0 votos
@Kirk Como puede ser un reto conseguir los detalles correctos, he publicado una solución completa, ilustrada con los datos de esta pregunta.
0 votos
@Sri Acabo de probar un caso de prueba y me da la impresión de que lat1 y lon1 están invertidos (de forma similar lat2 y lon2)