ios - 距离计算,acos = Nan 而不是0

标签 ios swift math swift3

我的距离计算函数有一点问题,这是一个 Playground 的截图,当 tsum == 1 时,我们看到距离变量 == NaN(而不是 0)

playground showing problem

实际上在运行时(在我的真实应用程序中,在模拟器中),t1 + t2 + t3 == 1.0000000000000002

t1 + t2 + t3 == 1.0000000000000002

这真的很奇怪,因为当我手动计算它时,我有 1

manual calculation

但是ios好像不同意。 你能解释一下吗?

P.S : 这是 Playground 的链接 https://drive.google.com/drive/folders/0B6uRRn4bFMAeN3kwSVc4dUVQcDQ?usp=sharing

P.S.2 : 我给了一个截图来证明我没有操纵值: complete screenshot at runtime

最佳答案

如果您正在寻找适用于苹果平台的东西,请使用

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

这被称为haversine 公式。借助 atan2 函数,您可以避免 float 学问题

关于ios - 距离计算,acos = Nan 而不是0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701178/

相关文章:

ios - 在 viewDidLoad IOS 10 中获取内部 View 大小

ios - 在 UIButton 上的透明 imageView 图像后面插入 UIVisualEffectView

ios - 如何使用贝塞尔曲线路径在 swift 4 中用箭头创建虚线?

ios - 在 iOS 11 上通话时如何访问电话音频流?

iphone - 有多个 View 时如何禁用多点触控?

swift - Spritekit-场景转换延迟

ios - 调用中参数 'totalBytesWritten' 缺少参数

ios - acos和cos的度数未给出正确的结果

javascript - 从特定点计算最近的点

python - 如何绘制随机平面