我正在尝试计算两点之间的距离并使用acos()
函数进行处理...但我没有得到精确的结果......如果距离很小
float distance_between(dest& point1,dest point2) {
float EARTH_RADIUS = 6371.0;//in km
float point1_lat_in_radians = point1.lat*(PI/180);
float point2_lat_in_radians = point2.lat*(PI/180);
float point1_long_in_radians = point1.lon*(PI/180);
float point2_long_in_radians = point2.lon*(PI/180);
float res = acos( sin( point1_lat_in_radians ) * sin( point2_lat_in_radians ) + cos( point1_lat_in_radians ) * cos( point2_lat_in_radians ) * cos( point2_long_in_radians - point1_long_in_radians) ) * EARTH_RADIUS;
cout<<res<<endl;
res = round(res*100)/100;
return res;
}
我正在检查以下坐标之间的距离
52.378281 4.900070和52.379141 4.880590
52.373634 4.890289和52.379141 4.880590
在两种情况下结果都是0.我知道距离很小但有没有办法获得像0.xxx这样的精确距离?
答案 0 :(得分:3)
使用double
代替float
来获得更高的精确度。
这样你就可以使用这个原型了:
double acos (double x);
必须阅读Difference between float and double问题。从那里我们有: