Fórmula para la distancia del círculo máximo entre dos puntos de una esfera
La fórmula de Haversine determina la distancia máxima entre dos puntos de una esfera dadas sus longitudes y latitudes . Es importante en navegación y es un caso especial de una fórmula más general en trigonometría esférica , la ley de Haversine , que relaciona los lados y los ángulos de los triángulos esféricos.
La fórmula de haverseno permite calcular el haverseno de θ directamente a partir de la latitud (representada por φ ) y la longitud (representada por λ ) de los dos puntos:
dónde
φ 1 , φ 2 son la latitud del punto 1 y la latitud del punto 2,
λ 1 , λ 2 son la longitud del punto 1 y la longitud del punto 2,
, .
Finalmente, la función haversine hav( θ ) , aplicada anteriormente tanto al ángulo central θ como a las diferencias de latitud y longitud, es
La función haversine calcula la mitad de un versine del ángulo θ , o los cuadrados de la mitad de la cuerda del ángulo en un círculo unitario (esfera).
Al utilizar estas fórmulas, hay que asegurarse de que h = hav( θ ) no exceda 1 debido a un error de punto flotante ( d es real solo para 0 ≤ h ≤ 1 ). h solo se acerca a 1 para puntos antípodas (en lados opuestos de la esfera); en esta región, tienden a surgir errores numéricos relativamente grandes en la fórmula cuando se utiliza precisión finita. Debido a que d es grande (se acerca a π R , la mitad de la circunferencia), un pequeño error a menudo no es una preocupación importante en este caso inusual (aunque hay otras fórmulas de distancia de círculo máximo que evitan este problema). (La fórmula anterior a veces se escribe en términos de la función arcotangente , pero sufre problemas numéricos similares cerca de h = 1 ).
Como se describe a continuación, se puede escribir una fórmula similar usando cosenos (a veces llamada ley esférica de cosenos , que no debe confundirse con la ley de cosenos para geometría plana) en lugar de haversenos, pero si los dos puntos están cerca uno del otro (por ejemplo, a un kilómetro de distancia, en la Tierra) uno podría terminar con cos( d/R ) = 0,99999999 , lo que da como resultado una respuesta inexacta. Como la fórmula de Haversine utiliza senos, evita ese problema.
Ambas fórmulas son sólo una aproximación cuando se aplican a la Tierra , que no es una esfera perfecta: el " radio de la Tierra " R varía de 6356,752 km en los polos a 6378,137 km en el ecuador. Más importante aún, el radio de curvatura de una línea norte-sur en la superficie de la Tierra es un 1% mayor en los polos (≈6399,594 km) que en el ecuador (≈6335,439 km), por lo que no se puede garantizar que la fórmula de Haversine y la ley de los cosenos sean correctas en más del 0,5%. [ cita requerida ] Las fórmulas de Vincenty y las otras fórmulas del artículo sobre la distancia geográfica ofrecen métodos más precisos que consideran la elipticidad de la Tierra .
La ley de haversines
Dada una esfera unitaria, un "triángulo" en la superficie de la esfera se define por los círculos máximos que conectan tres puntos u , v y w en la esfera. Si las longitudes de estos tres lados son a (de u a v ), b (de u a w ) y c (de v a w ), y el ángulo de la esquina opuesta a c es C , entonces la ley de los senos de Havers establece: [10]
Como se trata de una esfera unitaria, las longitudes a , b y c son simplemente iguales a los ángulos (en radianes ) subtendidos por esos lados desde el centro de la esfera (para una esfera no unitaria, cada una de estas longitudes de arco es igual a su ángulo central multiplicado por el radio R de la esfera).
Para obtener la fórmula de haverseno de la sección anterior a partir de esta ley, simplemente se considera el caso especial donde u es el polo norte , mientras que v y w son los dos puntos cuya separación d se desea determinar. En ese caso, a y b son π/2 − φ 1,2 (es decir, las co-latitudes), C es la separación de longitud λ 2 − λ 1 , y c es la deseadad/R . Observando que el pecado( π/2 − φ ) = cos( φ ) , la fórmula de haversine sigue inmediatamente.
Como se mencionó anteriormente, esta fórmula es una forma mal condicionada de resolver c cuando c es pequeño. En su lugar, sustituimos la identidad de que cos( θ ) = 1 − 2 hav( θ ) , y también empleamos la identidad de adición cos( a − b ) = cos( a ) cos( b ) + sin( a ) sin( b ) , para obtener la ley de los senos de Havers, anterior.
Consideremos dos puntos en la esfera unitaria , dados por su latitud y longitud :
Estas representaciones son muy similares a las coordenadas esféricas , sin embargo la latitud se mide como un ángulo desde el ecuador y no desde el polo norte. Estos puntos tienen las siguientes representaciones en coordenadas cartesianas:
Desde aquí podríamos intentar calcular directamente el producto escalar y continuar, sin embargo las fórmulas se vuelven significativamente más simples cuando consideramos el siguiente hecho: la distancia entre los dos puntos no cambiará si rotamos la esfera a lo largo del eje z. Esto, en efecto, agregará una constante a . Tenga en cuenta que no se aplican consideraciones similares para transformar las latitudes: agregar una constante a las latitudes puede cambiar la distancia entre los puntos. Al elegir nuestra constante como , y establecer , nuestros nuevos puntos se convierten en:
^ de Mendoza y Ríos, José (1795). Memoria sobre algunos métodos nuevos de calcular la longitud por las distancias lunares: y aplicación de su teórica á la solución de otros problemas de navegación (en español). Madrid, España: Imprenta Real.
^ Cajori, Florian (1952) [1929]. Una historia de las notaciones matemáticas. Vol. 2 (2.ª edición corregida de la edición de 1929). Chicago: Open Court Publishing Company . pág. 172. ISBN.978-1-60206-714-1. 1602067147 . Consultado el 11 de noviembre de 2015 . La haversina aparece por primera vez en las tablas de versinas logarítmicas de José de Mendoza y Ríos (Madrid, 1801, también 1805, 1809), y más tarde en un tratado sobre navegación de James Inman (1821).(NB. ISBN y enlace para reimpresión de la segunda edición por Cosimo, Inc., Nueva York, 2013.)
^ Inman, James (1835) [1821]. Navegación y astronomía náutica: para uso de los marineros británicos (3.ª ed.). Londres, Reino Unido: W. Woodward, C. y J. Rivington . Consultado el 9 de noviembre de 2015 .(Cuarta edición: [1].)
^ HB Goodwin, The haversine in nautical astronomy, Naval Institute Proceedings , vol. 36, no. 3 (1910), pp. 735–746: Evidentemente, si se emplea una tabla de haversines, nos ahorraremos en primer lugar el problema de dividir la suma de los logaritmos por dos y, en segundo lugar, de multiplicar el ángulo tomado de las tablas por el mismo número. Esta es la ventaja especial de la forma de tabla introducida por primera vez por el profesor Inman, del Portsmouth Royal Navy College, hace casi un siglo.
^ WW Sheppard y CC Soule, Navegación práctica (Instituto Técnico Mundial: Jersey City, 1922).
^ ER Hedrick, Tablas logarítmicas y trigonométricas (Macmillan, Nueva York, 1913).
^ Gade, Kenneth (2010). "Una representación de posición horizontal no singular". Journal of Navigation . 63 (3): 395–417. Bibcode :2010JNav...63..395G. doi :10.1017/S0373463309990415. ISSN 0373-4633.
^ Korn, Grandino Arthur; Korn, Theresa M. (2000) [1922]. "Apéndice B: B9. Trigonometría plana y esférica: fórmulas expresadas en términos de la función Haversine". Manual matemático para científicos e ingenieros: definiciones, teoremas y fórmulas para referencia y revisión (3.ª ed.). Mineola, Nueva York: Dover Publications . págs. 892–893. ISBN978-0-486-41147-7.
RW Sinnott, "Virtudes de la Haversina", Sky and Telescope 68 (2), 159 (1984).
"Derivación de la fórmula de Haversine". Ask Dr. Math . 20 y 21 de abril de 1999. Archivado desde el original el 20 de enero de 2020.
W. Gellert, S. Gottwald, M. Hellwich, H. Kästner y H. Küstner, The VNR Concise Encyclopedia of Mathematics , 2ª ed., cap. 12 (Van Nostrand Reinhold: Nueva York, 1989).
Enlaces externos
Implementaciones de la fórmula de Haversine en 91 idiomas en rosettacode.org y en 17 idiomas en codecodex.com Archivado el 14 de agosto de 2018 en Wayback Machine
Otras implementaciones en C++, C (MacOS), Pascal Archivado el 16 de enero de 2019 en Wayback Machine , Python, Ruby, JavaScript, PHP Archivado el 12 de agosto de 2018 en Wayback Machine , Matlab Archivado el 13 de mayo de 2020 en Wayback Machine , MySQL