/ / Розрахунок відстані, acos = Nan замість 0 - ios, swift, math, swift3

Розрахунок відстані, acos = Nan замість 0 - ios, швидкий, математика, swift3

У мене є невелика проблема з моєю функцією обчислення відстані, ось скріншот дитячого майданчика, де ми бачимо, що змінна відстані == NaN (замість 0), коли tsum == 1

ігровий майданчик показує проблему

насправді під час виконання (у моєму реальному додатку, у симуляторі), t1 + t2 + t3 == 1,0000000000000002

t1 + t2 + t3 == 1,0000000000000002

це дійсно дивно, тому що коли я обчислюю це вручну, у мене є 1

ручний розрахунок

але ios, схоже, не погоджується з цим. Чи можете ви це пояснити?

P.S: Ось посилання на дитячий майданчик https://drive.google.com/drive/folders/0B6uRRn4bFMAeN3kwSVc4dUVQcDQ?usp=sharing

P.S.2: я даю скріншот, щоб довести, що я не маніпулюю значеннями: повний знімок екрана під час виконання

Відповіді:

3 для відповіді № 1

якщо ви шукаєте те, що працює на платформах Apple, використовуйте

import CoreLocation

let lat0 = 0.0
let lon0 = 0.0

let lat1 = 90.0
let lon1 = 180.0

let l0 = CLLocation(latitude: lat0, longitude: lon0)
let l1 = CLLocation(latitude: lat1, longitude: lon1)

let distance = l0.distance(from: l1) // in meters

якщо вам це не подобається, замініть формулу

d = acos (sin φ1 ⋅ sin φ2 + cos φ1 ⋅ cos φ2 ⋅ cos Δλ) ⋅ R

з

a = sin² (Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin² (Δλ/2)

c = 2 ⋅ atan2 (√a, √ (1 − a))

d = R ⋅ c

який відомий як хаверсин формула. за допомогою функції atan2 ви уникнете математичних проблем з плаваючою крапкою