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