SimsWorld/StandardGlobe/standardglobe.h

92 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "standardglobe_global.h"
class QVector3D;
/// <summary>
/// 经纬高坐标系坐标
/// </summary>
struct LLAPos {
double _lon_deg = 0;
double _lat_deg = 0;
double _alt_m = 0;
};
/// <summary>
/// 地心坐标系
/// </summary>
struct ECEFPos {
double _x_pos = 0;// 指向0°经度圈与纬度0°交点
double _y_pos = 0;
double _z_pos = 0;
QVector3D getVec3() const;
static ECEFPos fromVec3(const QVector3D& p);
};
/// <summary>
/// 东天北坐标系
/// </summary>
struct ENUPos {
double _e_pos = 0;
double _n_pos = 0;
double _t_pos = 0;
};
/// <summary>
/// 极坐标
/// </summary>
struct PolarPos {
double _dist_m = 0;
double _azimuth_deg = 0;
double _pitch_deg = 0;
};
/// <summary>
/// 标准球体坐标转换工具
/// </summary>
class STANDARDGLOBE_EXPORT StandardGlobe
{
private:
/// <summary>
/// 标准正球体星球直径
/// </summary>
static double _radius_m;
public:
StandardGlobe();
static ECEFPos llaToEcef(const LLAPos &v);
static LLAPos ecefToLLA(const ECEFPos &v);
/// <summary>
/// 根据LLA坐标获取两点之间的大地线长度和b->t初始方位角warning本计算忽视LLA的高度值
/// </summary>
/// <param name="base"></param>
/// <param name="target"></param>
/// <param name="dist"></param>
/// <param name="azi"></param>
static void getDistanceWithTargetLLA(const LLAPos &base, const LLAPos &target, double &dist, double &azi);
/// <summary>
/// 根据两点之间的大地线长度和b->t初始方位角计算目标LLA定位坐标
/// </summary>
/// <param name="base"></param>
/// <param name="dist"></param>
/// <param name="azi"></param>
/// <param name="target"></param>
static void getTargetLLAWithDistance(const LLAPos& base, double dist, double azi, LLAPos& target);
/// <summary>
/// 通过LLA坐标获取目标极坐标
/// </summary>
/// <param name="base"></param>
/// <param name="target"></param>
/// <returns></returns>
static PolarPos getPolarWithLLA(const LLAPos &base, const LLAPos &target);
/// <summary>
/// 通过极坐标获取目标LLA坐标
/// </summary>
/// <param name="base"></param>
/// <param name="target"></param>
/// <returns></returns>
static LLAPos getLLAWithPolar(const LLAPos &base, const PolarPos &target);
};