如何解决余弦公式的串行定律
| 我正试图从另一个点的经度计算一个点的经度。它们具有相同的纬度,并且它们之间的距离是已知的。我尝试使用余弦公式的序列法。# \'lat\' short for \'latitude\',\'lng\' short for \'longitude\'.
# EARTH_RADIUS = 6371000.0,unit is meter.
#
distance = Math.acos( Math.sin(lat1)*Math.sin(lat2) +
Math.cos(lat1)*Math.cos(lat2) *
Math.cos(lng2-lng1)) * EARTH_RADIUS
如果两点的纬度相等(lat1 == lat2),我可以根据距离从lng1计算出lng2。所以我从余弦公式的余弦定理推论该公式
# lat1 == lat2 == lat
# \'distance\' and \'lng\' are known
lng2 = Math.acos((Math.cos(distance/EARTH_RADIUS) - Math.sin(lat)*Math.sin(lat))/(Math.cos(lat)*Math.cos(lat))) + lng
除某些情况外,此公式非常有效。
喜欢
lat_degrees = -89.8345981836319
lng_degrees = 96.42309331893921
lat = lat1 = lat2 = (lat_degrees * Math::PI)/180 # -1.567909520510494
lng = (lng_degrees * Math::PI)/180 # 1.682900453373236
distance = 67544.06725769254
这将解决错误
Math::DomainError: Numerical argument is out of domain - \"acos\"
因为Math.acos(value)中的值等于-2.5100189069914602,小于-1。我对此一无所知。派生形式错误吗?
解决方法
您的公式没有错。我没有进行计算,但我想要指出的是,您(非常!)靠近南极,并且基本上没有两个点相隔这么大的距离。
, 只需在它之前添加一个比较:
if lat1 == lat2 and lng1 == lng2
return 0
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。