c++xyz转换enu代码
时间: 2023-08-13 17:12:38 浏览: 207
XYZ坐标转化为ENU坐标
3星 · 编辑精心推荐
这是一个将XYZ坐标系转换为ENU坐标系的C++代码示例:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 定义常量PI
const double PI = 3.14159265358979323846;
// 定义结构体表示三维向量
struct Vector3 {
double x, y, z;
};
// XYZ坐标系转ENU坐标系
Vector3 ConvertXYZToENU(Vector3 xyz, Vector3 ref) {
Vector3 enu;
double sin_lat = sin(ref.x * PI / 180.0); // 弧度制转换
double cos_lat = cos(ref.x * PI / 180.0);
double sin_lon = sin(ref.y * PI / 180.0);
double cos_lon = cos(ref.y * PI / 180.0);
enu.x = -sin_lon * (xyz.x - ref.x) + cos_lon * (xyz.y - ref.y);
enu.y = -cos_lon * sin_lat * (xyz.x - ref.x) - sin_lat * sin_lon * (xyz.y - ref.y) + cos_lat * (xyz.z - ref.z);
enu.z = cos_lat * cos_lon * (xyz.x - ref.x) + cos_lat * sin_lon * (xyz.y - ref.y) + sin_lat * (xyz.z - ref.z);
return enu;
}
int main() {
// 测试数据
Vector3 xyz = {1.0, 2.0, 3.0};
Vector3 ref = {45.0, 135.0, 0.0};
Vector3 enu = ConvertXYZToENU(xyz, ref);
cout << "ENU: (" << enu.x << ", " << enu.y << ", " << enu.z << ")" << endl;
return 0;
}
```
其中,`Vector3`结构体表示三维向量,包含`x`、`y`、`z`三个成员变量;`ConvertXYZToENU`函数将一个给定的XYZ坐标系下的点转换为ENU坐标系下的点,返回一个`Vector3`类型的结果。
在`main`函数中,我们定义了一个测试数据`xyz`和参考点`ref`,然后调用`ConvertXYZToENU`函数将`xyz`转换为ENU坐标系下的点`enu`,最后输出结果。
阅读全文