Враховуючи широту / довготу двох точок на Місяці (lat1, lon1)
і (lat2, lon2)
обчисліть відстань між двома точками в кілометрах, використовуючи будь-яку формулу, яка дає такий же результат, як і формула Гаверсина.
Вхідні дані
- Чотири цілих значення
lat1, lon1, lat2, lon2
в градусі (куті) або - чотири десяткових значення
ϕ1, λ1, ϕ2, λ2
в радіанах.
Вихідні дані
Відстань у кілометрах між двома точками (десятковий з будь-якою точністю або округлим цілим числом).
Формула Гаверсина
де
r
- радіус сфери (припустимо, радіус Місяця - 1737 км),ϕ1
широта точки 1 в радіанахϕ2
широта точки 2 в радіанахλ1
довгота точки 1 в радіанахλ2
довгота точки 2 в радіанахd
- кругова відстань між двома точками
(джерело: https://en.wikipedia.org/wiki/Haversine_formula )
Інші можливі формули
d = r * acos(sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1))
@miles 'формула .d = r * acos(cos(ϕ1 - ϕ2) + cos ϕ1 cos ϕ2 (cos(λ2 - λ1) - 1))
@Neil формула «и .
Приклад, коли вхідні дані є градусами, а виведення у вигляді округлого цілого числа
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
Правила
- Введення та вихід можуть бути задані у будь-якому зручному форматі .
- Укажіть у відповіді, чи вхідні дані в градусах чи радіанах .
- Не потрібно обробляти недійсні значення широти / довготи
- Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
- Якщо можливо, додайте посилання на онлайн-тестувальне середовище, щоб інші люди могли спробувати ваш код!
- Стандартні лазівки заборонені.
- Це код-гольф, тому застосовуються всі звичайні правила гольфу, і найкоротший код (у байтах) виграє.
d = r * acos( sin ϕ1 sin ϕ2 + cos ϕ1 cos ϕ2 cos(λ2 - λ1) )
деr = 1737