Dada la latitud / longitud de dos puntos en la Luna (lat1, lon1)
y (lat2, lon2)
, calcule la distancia entre los dos puntos en kilómetros, usando cualquier fórmula que dé el mismo resultado que la fórmula de Haversine.
Entrada
- Cuatro valores enteros
lat1, lon1, lat2, lon2
en grados (ángulo) o - cuatro valores decimales
ϕ1, λ1, ϕ2, λ2
en radianes.
Salida
Distancia en kilómetros entre los dos puntos (decimal con cualquier precisión o número entero redondeado).
Fórmula de Haversine
dónde
r
es el radio de la esfera (suponga que el radio de la Luna es de 1737 km),ϕ1
latitud del punto 1 en radianesϕ2
latitud del punto 2 en radianesλ1
longitud del punto 1 en radianesλ2
longitud del punto 2 en radianesd
es la distancia circular entre los dos puntos
(fuente: https://en.wikipedia.org/wiki/Haversine_formula )
Otras posibles fórmulas
d = r * acos(sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1))
fórmula de @miles .d = r * acos(cos(ϕ1 - ϕ2) + cos ϕ1 cos ϕ2 (cos(λ2 - λ1) - 1))
La fórmula de @Neil .
Ejemplo donde las entradas son grados y la salida como entero redondeado
42, 9, 50, 2 --> 284
50, 2, 42, 9 --> 284
4, -2, -2, 1 --> 203
77, 8, 77, 8 --> 0
10, 2, 88, 9 --> 2365
Reglas
- La entrada y la salida se pueden dar en cualquier formato conveniente .
- Especifique en la respuesta si las entradas están en grados o radianes .
- No es necesario manejar valores de latitud / longitud no válidos
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
d = r * acos( sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1) )
donder = 1737