matlab语言aer2ecef,Matlab的 aer2ecef函数的C语言实现
时间: 2024-02-13 22:00:24 浏览: 152
下面是一个简单的aer2ecef函数的C语言实现,该函数将大气坐标系(azimuth, elevation, range)转换为地心地固坐标系(ECEF)。
```c
#include <math.h>
void aer2ecef(double lat, double lon, double alt, double az, double el, double r, double *x, double *y, double *z)
{
double Re = 6378137.0; // 地球半径
double f = 1.0 / 298.257223563; // 地球扁率
double e2 = 2.0*f - f*f; // 地球第一偏心率的平方
double sin_lat = sin(lat);
double cos_lat = cos(lat);
double sin_lon = sin(lon);
double cos_lon = cos(lon);
double sin_az = sin(az);
double cos_az = cos(az);
double sin_el = sin(el);
double cos_el = cos(el);
double N = Re / sqrt(1.0 - e2*sin_lat*sin_lat); // 卯酉圈曲率半径
double X = (N + alt)*cos_lat*cos_lon; // ECEF坐标系下的X坐标
double Y = (N + alt)*cos_lat*sin_lon; // ECEF坐标系下的Y坐标
double Z = (N*(1.0 - e2) + alt)*sin_lat; // ECEF坐标系下的Z坐标
double x_0 = -sin_az*cos_el*r; // 相对于ECEF坐标系中心的X坐标
double y_0 = cos_az*cos_el*r; // 相对于ECEF坐标系中心的Y坐标
double z_0 = sin_el*r; // 相对于ECEF坐标系中心的Z坐标
*x = X + cos_lon*x_0 - sin_lon*y_0; // ECEF坐标系下的X坐标
*y = Y + sin_lon*x_0 + cos_lon*y_0; // ECEF坐标系下的Y坐标
*z = Z + z_0; // ECEF坐标系下的Z坐标
}
```
该函数使用的算法来自于以下文章:
Gade, K. (2010). A non-singular horizontal position representation. Journal of Navigation, 63(03), 395-417.
阅读全文