tmp update
This commit is contained in:
parent
333339dc6a
commit
0bcf481b95
@ -88,16 +88,11 @@ double gctl::sqrtn(double d,int n,double eps)
|
||||
return halfx;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 计算一个椭圆在不同位置的半径
|
||||
*
|
||||
* @param[in] x_len x方向半径
|
||||
* @param[in] y_len y方向半径
|
||||
* @param[in] x_arc 椭圆绕原点逆时针旋转的角度 (弧度)
|
||||
* @param[in] arc 计算方向与x轴正方向的夹角(弧度) 逆时针为正
|
||||
*
|
||||
* @return 半径值
|
||||
*/
|
||||
double gctl::geographic_area(double lon1, double lon2, double lat1, double lat2, double R)
|
||||
{
|
||||
return fabs(R*R*(arc(lon2) - arc(lon1))*(sind(lat2) - sind(lat1)));
|
||||
}
|
||||
|
||||
double gctl::ellipse_radius_2d(double x_len, double y_len, double arc, double x_arc)
|
||||
{
|
||||
if (fabs(x_len - y_len) < 1e-8) // 就是个圆 直接加
|
||||
@ -108,20 +103,6 @@ double gctl::ellipse_radius_2d(double x_len, double y_len, double arc, double x_
|
||||
return sqrt(pow(x_len*cos(arc-x_arc),2) + pow(y_len*sin(arc-x_arc),2));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 计算已椭圆为基准面的高程数据的绝对坐标位置。
|
||||
*
|
||||
* 假设高程数据的测量方向(如大地水准面)为椭圆切线的垂直方向(与切点与坐标原点的连线方向不一致)
|
||||
* 则高程点的绝对空间位置的维度值与切点的维度值也不一致。此函数可以计算校正后的维度值与球心半径。
|
||||
*
|
||||
* @param x_len 椭圆的x方向半径(一般为长轴)
|
||||
* @param y_len 椭圆的y方向半径(一般为短轴)
|
||||
* @param arc 计算方向与x轴正方向的夹角(弧度) 逆时针为正(等于纬度)
|
||||
* @param elev 切点的高程值
|
||||
* @param out_arc 校正后的维度值
|
||||
* @param out_rad 校正后高程点的球心半径
|
||||
* @param x_arc x轴正方向绕原点逆时针旋转的角度 (弧度),默认为0
|
||||
*/
|
||||
void gctl::ellipse_plus_elevation_2d(double x_len, double y_len, double arc, double elev,
|
||||
double &out_arc, double &out_rad, double x_arc)
|
||||
{
|
||||
@ -158,17 +139,6 @@ void gctl::ellipse_plus_elevation_2d(double x_len, double y_len, double arc, dou
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 椭球或者球在不同球面位置的半径
|
||||
*
|
||||
* @param[in] x_len x方向半径
|
||||
* @param[in] y_len y方向半径
|
||||
* @param[in] z_len z方向半径
|
||||
* @param[in] phi 计算方向与x轴正方向的夹角(弧度) 逆时针为正
|
||||
* @param[in] theta 计算方向与z轴正方向的夹角(弧度) 逆时针为正
|
||||
*
|
||||
* @return 半径值
|
||||
*/
|
||||
double gctl::ellipsoid_radius(double x_len, double y_len, double z_len, double phi, double theta)
|
||||
{
|
||||
return x_len*y_len*z_len/sqrt(pow(y_len*z_len*sin(theta)*cos(phi),2) +
|
||||
|
@ -71,6 +71,18 @@ namespace gctl
|
||||
*/
|
||||
double sqrtn(double val, int order, double eps = 1e-5);
|
||||
|
||||
/**
|
||||
* @brief 计算经纬度网格的面积
|
||||
*
|
||||
* @param lon1 经度起点
|
||||
* @param lon2 经度终点
|
||||
* @param lat1 纬度起点
|
||||
* @param lat2 纬度终点
|
||||
* @param R 半径
|
||||
* @return 面积
|
||||
*/
|
||||
double geographic_area(double lon1, double lon2, double lat1, double lat2, double R);
|
||||
|
||||
/**
|
||||
* @brief 计算一个椭圆在不同位置的半径
|
||||
*
|
||||
|
@ -42,6 +42,12 @@ namespace gctl
|
||||
return (T(0) < d) - (d < T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T arc(T deg)
|
||||
{
|
||||
return deg*GCTL_Pi/180.0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T sind(T deg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user