C语言求经纬线上任意两点球面的距离
时间: 2024-10-20 17:07:12 浏览: 52
在C语言中,计算地球表面(假设为球形,实际地球稍扁一些)上两个经纬度点之间的距离通常使用Haversine公式,它考虑了地球的曲率。以下是Haversine公式的简单实现:
首先,我们需要预定义地球半径(单位为公里),这里取平均值约为6371公里:
```c
#define EARTH_RADIUS 6371
double toRadians(double degrees) {
return degrees * M_PI / 180.0;
}
double haversine(double lat1, double lon1, double lat2, double lon2) {
double dLat = toRadians(lat2 - lat1);
double dLon = toRadians(lon2 - lon1);
double a = sin(dLat / 2) * sin(dLat / 2) +
cos(toRadians(lat1)) * cos(toRadians(lat2)) *
sin(dLon / 2) * sin(dLon / 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
return EARTH_RADIUS * c;
}
```
上述代码中,`haversine`函数接受四个参数:经度和纬度(以度为单位)。函数内部先将角度转换为弧度,然后计算半圆的弦长(a),再利用Haversine公式得出大圆弧距离(c),最后乘以地球半径得到最终结果。
阅读全文