帮我用C++写代码,已知两点的经纬度,求其中一点相对另一点的方位角
时间: 2024-05-05 14:17:54 浏览: 20
可以的,这是一个计算方位角的问题。首先需要将经纬度转换成直角坐标系中的坐标,然后根据坐标差值计算出方位角。以下是示例代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
// 地球半径(单位:米)
const double EARTH_RADIUS = 6371000.0;
// 经度、纬度转弧度
double toRadian(double degree) {
return degree * PI / 180.0;
}
// 计算两点间的距离(单位:米)
double distance(double lat1, double lon1, double lat2, double lon2) {
double radLat1 = toRadian(lat1);
double radLat2 = toRadian(lat2);
double a = radLat1 - radLat2;
double b = toRadian(lon1) - toRadian(lon2);
double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
s = s * EARTH_RADIUS;
return s;
}
// 计算方位角(单位:度)
double bearing(double lat1, double lon1, double lat2, double lon2) {
double radLat1 = toRadian(lat1);
double radLat2 = toRadian(lat2);
double radLon1 = toRadian(lon1);
double radLon2 = toRadian(lon2);
double y = sin(radLon2 - radLon1) * cos(radLat2);
double x = cos(radLat1) * sin(radLat2) - sin(radLat1) * cos(radLat2) * cos(radLon2 - radLon1);
double brng = atan2(y, x);
brng = brng * 180.0 / PI;
return fmod((brng + 360.0), 360.0);
}
int main() {
double lat1 = 39.9075; // 第一个点的纬度
double lon1 = 116.39723; // 第一个点的经度
double lat2 = 31.230416; // 第二个点的纬度
double lon2 = 121.473701; // 第二个点的经度
double dist = distance(lat1, lon1, lat2, lon2); // 计算距离
double brng = bearing(lat1, lon1, lat2, lon2); // 计算方位角
printf("两点间的距离为:%.2f 米\n", dist);
printf("第一个点相对于第二个点的方位角为:%.2f 度\n", brng);
return 0;
}
```
希望对你有帮助。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)