c++ 实现计算方位数值,已知两个经纬度
时间: 2024-11-04 18:10:58 浏览: 5
已知本地经纬度和目标方位距离计算目标经纬度
5星 · 资源好评率100%
在C++中,计算两点之间的方位通常涉及到地理坐标系统中的球面距离计算,例如Haversine公式来估算地球上两点之间的大圆弧距离。但是,直接得到方位角(比如经度差对应的角度)则需要一些额外的步骤。下面是一个简单的示例,展示如何计算两地之间的相对方位:
```cpp
#include <cmath>
#include <iostream>
const double earth_radius = 6371; // 地球平均半径,单位公里
// 转换角度为弧度
double toRadians(double degrees) {
return degrees * M_PI / 180;
}
// 使用Haversine公式计算两点之间的大圆弧距离
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;
}
// 计算方向(假设东经朝东为正)
double getDirection(double lon1, double lon2) {
if (lon2 > lon1) {
return lon2 - lon1; // 向东走,正值
} else if (lon2 < lon1) {
return 360 - (lon1 - lon2); // 向西走,补足360度
} else { // 相同经度
return 0;
}
}
int main() {
double lat1 = 39.9042, lon1 = 116.4074; // 北京坐标
double lat2 = 51.5074, lon2 = -0.1278; // 伦敦坐标
double distance = haversine(lat1, lon1, lat2, lon2);
double direction = getDirection(lon1, lon2);
std::cout << "Distance between Beijing and London: " << distance << " km\n";
std::cout << "Direction from Beijing to London: " << direction << " degrees East" << std::endl;
return 0;
}
```
在这个例子中,`getDirection()`函数会计算出从第一个点到第二个点的经度差,并将其转换为角度。注意,这个简单实现并未考虑维度变化对方位的影响,实际应用中可能会更复杂。
阅读全文