C - Haversine配方稍微脱落

时间:2015-09-17 04:10:09

标签: c haversine

在计算两个纬度/经度坐标之间的距离时,我的输出似乎略微偏离,我似乎无法解决原因。下面是我的代码(Haversine公式的实现)

float calcDistance(double latHome, double lonHome, double latDest, double lonDest) {

    double pi = 3.141592653589793;
    int R = 6371; //Radius of the Earth
    latHome = (pi/180)*(latHome);
    latDest = (pi/180)*(latDest);
    double differenceLon = (pi/180)*(lonDest - lonHome);
    double differenceLat = (pi/180)*(latDest - latHome);
    double a = sin(differenceLat/2) * sin(differenceLat/2) + 
    cos(latHome) * cos(latDest) * 
    sin(differenceLon/2) * sin(differenceLon/2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double distance = R * c;
    printf("%f\n", distance);
    return distance;
}

输入:38.898556 -77.037852 38.897147 -77.043934

输出:0.526339

假设得到0.5492

1 个答案:

答案 0 :(得分:3)

我能想到的唯一一件事(如果修复了会产生预期的结果)是你覆盖本地参数latHomelatDest(但在计算时可能应该使用原始参数{ {1}}和differenceLon以上differenceLat)。为a使用其他名称,然后使用新名称计算latHomeTmp,它将起作用,如:

a

一般来说,保持传递给函数的参数是不可变的是一个好主意,以避免像这样的情况(当然,不是一套石头规则,但我通常会遵守它)。