Dada a latitude / longitude de dois pontos na Lua (lat1, lon1)
e (lat2, lon2)
, calcule a distância entre os dois pontos em quilômetros, usando qualquer fórmula que dê o mesmo resultado que a fórmula de haversine.
Entrada
- Quatro valores inteiros
lat1, lon1, lat2, lon2
em graus (ângulo) ou - quatro valores decimais
ϕ1, λ1, ϕ2, λ2
em radianos.
Resultado
Distância em quilômetros entre os dois pontos (decimal com precisão ou número inteiro arredondado).
Fórmula de Haversine
Onde
r
é o raio da esfera (suponha que o raio da Lua seja 1737 km),ϕ1
latitude do ponto 1 em radianosϕ2
latitude do ponto 2 em radianosλ1
longitude do ponto 1 em radianosλ2
longitude do ponto 2 em radianosd
é a distância circular entre os dois pontos
(fonte: https://en.wikipedia.org/wiki/Haversine_formula )
Outras fórmulas possíveis
d = r * acos(sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1))
@miles 'formula .d = r * acos(cos(ϕ1 - ϕ2) + cos ϕ1 cos ϕ2 (cos(λ2 - λ1) - 1))
A fórmula de @Neil .
Exemplo onde entradas são graus e saída como número inteiro arredondado
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
Regras
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- Especifique na resposta se as entradas estão em graus ou radianos .
- Não há necessidade de lidar com valores inválidos de latitude / longitude
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
d = r * acos( sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1) )
onder = 1737