SimsWorld/StandardGlobe/standardglobe.h

92 lines
2.1 KiB
C
Raw Normal View History

2025-05-31 15:28:41 +00:00
#pragma once
#include "standardglobe_global.h"
2025-06-07 08:44:25 +00:00
class QVector3D;
2025-05-31 15:28:41 +00:00
/// <summary>
2025-06-01 14:37:26 +00:00
/// <20><>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>
2025-05-31 15:28:41 +00:00
/// </summary>
struct LLAPos {
double _lon_deg = 0;
double _lat_deg = 0;
double _alt_m = 0;
};
2025-06-01 14:37:26 +00:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
/// </summary>
struct ECEFPos {
2025-06-07 08:44:25 +00:00
double _x_pos = 0;// ָ<><D6B8>0<EFBFBD><EFBFBD><E3BEAD>Ȧ<EFBFBD><C8A6>γ<EFBFBD><CEB3>0<EFBFBD><EFBFBD><E3BDBB>
2025-06-01 14:37:26 +00:00
double _y_pos = 0;
double _z_pos = 0;
2025-06-01 14:37:46 +00:00
QVector3D getVec3() const;
2025-06-07 08:44:25 +00:00
static ECEFPos fromVec3(const QVector3D& p);
2025-06-01 14:37:26 +00:00
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><ECB1B1><EFBFBD><EFBFBD>ϵ
/// </summary>
struct ENUPos {
double _e_pos = 0;
double _n_pos = 0;
double _t_pos = 0;
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct PolarPos {
double _dist_m = 0;
double _azimuth_deg = 0;
double _pitch_deg = 0;
};
2025-05-31 15:28:41 +00:00
/// <summary>
/// <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
class STANDARDGLOBE_EXPORT StandardGlobe
{
2025-06-01 14:37:26 +00:00
private:
/// <summary>
/// <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>
/// </summary>
static double _radius_m;
2025-05-31 15:28:41 +00:00
public:
2025-06-01 14:37:26 +00:00
StandardGlobe();
static ECEFPos llaToEcef(const LLAPos &v);
2025-06-07 07:11:48 +00:00
static LLAPos ecefToLLA(const ECEFPos &v);
/// <summary>
/// <20><><EFBFBD><EFBFBD>LLA<4C><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>Ⱥ<EFBFBD>b->t<><74>ʼ<EFBFBD><CABC>λ<EFBFBD>ǣ<EFBFBD>warning<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LLA<4C>ĸ߶<C4B8>ֵ
/// </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>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>Ⱥ<EFBFBD>b->t<><74>ʼ<EFBFBD><CABC>λ<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>LLA<4C><41>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
/// </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);
2025-06-07 08:44:25 +00:00
/// <summary>
/// ͨ<><CDA8>LLA<4C><41><EFBFBD><EFBFBD><EAA3AC>ȡĿ<C8A1><EFBFBD><EABCAB><EFBFBD><EFBFBD>
/// </summary>
/// <param name="base"></param>
/// <param name="target"></param>
/// <returns></returns>
static PolarPos getPolarWithLLA(const LLAPos &base, const LLAPos &target);
/// <summary>
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAA3AC>ȡĿ<C8A1><C4BF>LLA<4C><41><EFBFBD><EFBFBD>
/// </summary>
/// <param name="base"></param>
/// <param name="target"></param>
/// <returns></returns>
static LLAPos getLLAWithPolar(const LLAPos &base, const PolarPos &target);
2025-05-31 15:28:41 +00:00
};