#pragma once #ifndef __GF3PSTNCLASS_H__ #define __GF3PSTNCLASS_H__ #include "gf3calibrationandorthlib_global.h" #include "LogInfoCls.h" #include "BaseConstVariable.h" #include "GeoOperator.h" #include #include #include /// /// 多项式轨道模型 /// class GF3CALIBRATIONANDORTHLIB_EXPORT GF3PolyfitSatelliteOribtModel { public: GF3PolyfitSatelliteOribtModel(); ~GF3PolyfitSatelliteOribtModel() ; public: QString getSatelliteOribtModelParamsString(); public: // 卫星轨道节点 virtual SatelliteOribtNode getSatelliteOribtNode(double& timeFromStartTime, bool& antAzAngleFlag) ; // 获取轨道节点 virtual ErrorCode getSatelliteOribtNode(double& timeFromStartTime, SatelliteOribtNode& node, bool& antAzAngleFlag) ; // 获取轨道节点 virtual ErrorCode getSatelliteAntDirectNormal(SatelliteOribtNode& Rs, Vector3D& Rt, SatelliteAntDirect& antNode); // 计算目标在天线方向图中的位置 public: // 卫星轨道模型的参考时间节点 virtual void setSatelliteOribtStartTime(long double oribtStartTime) ;// 设置卫星模型参考时间 virtual long double getSatelliteOribtStartTime() ;// 获取卫星模型参考时间 public: // 入射角相关参数 virtual void setbeamAngle(double beamAngle, bool RightLook) ;// 设置波位角 public: // 天线摆动角相关参数 virtual void setAzAngleRange(double cycletime, double minAzAngle, double maxAzAngle, double referenceAzAngle, double referenceTimeFromStartTime) ;//方位角变换循环时间 ;方位角变换范围; 特定时间的方位角,用于计算方位角变化情况 virtual double getAzAngleInCurrentTimeFromStartTime(double& currentTime) ;// 获取当前时间的 天线摆动角 virtual ErrorCode getAzAngleInCurrentTimeFromStartTime(double& currentTime, double& AzAngle);// 获取当前时间的 天线摆动角 public: // 定义在原始天线坐标下的天线坐标系的调整,其中仍然定义-Z 轴为 天线指向方向 virtual void setAntnnaAxisX(double X, double Y, double Z) ; // 设置天线X轴指向 virtual void setAntnnaAxisY(double X, double Y, double Z) ; // 设置天线X轴指向 virtual void setAntnnaAxisZ(double X, double Y, double Z) ; // 设置天线X轴指向 virtual ErrorCode getAntnnaDirection(SatelliteOribtNode& node); // 获取天线指向方向 virtual ErrorCode getZeroDopplerAntDirect(SatelliteOribtNode& node); private: // 变量 long double oribtStartTime; // 卫星模型参考时间 double beamAngle; // 波位角 bool RightLook; // 左右视 double cycletime; // 方位角变换循环时间 double minAzAngle; // 方位角变换范围 double maxAzAngle; // 方位角变换范围 double referenceAzAngle; // 特定时间的方位角,用于计算方位角变化情况 double referenceTimeFromStartTime; // 特定时间的方位角,用于计算方位角变化情况 Point3 AntnnaAxisX; // 天线X轴指向 Point3 AntnnaAxisY; // 天线Y轴指向 Point3 AntnnaAxisZ; // 天线Z轴指向 public: // 增加节点 void addOribtNode(SatelliteOribtNode node); ErrorCode polyFit(int polynum = 3, bool input_timeFromReferenceTime = false); private: // 轨道节点 std::vector oribtNodes; std::vector polyfitPx; // 空间坐标 std::vector polyfitPy; std::vector polyfitPz; std::vector polyfitVx; // 速度拟合参数 std::vector polyfitVy; std::vector polyfitVz; double Pxchisq; // 拟合误差 X2 double Pychisq; double Pzchisq; double Vxchisq; double Vychisq; double Vzchisq; public: virtual double getPt() ; virtual double getGri() ; virtual void setPt(double Pt) ; virtual void setGri(double gri) ; //virtual double getPt(); //virtual double getGri(); //virtual void setPt(double Pt); //virtual void setGri(double gri); private: double Pt; // 发射电压 double Gri;// 系统增益 }; std::shared_ptr GF3CALIBRATIONANDORTHLIB_EXPORT CreataGF3PolyfitSatelliteOribtModel(std::vector& nodes, long double startTime, int polynum = 3); #endif