#pragma once /*****************************************************************//** * \file SatelliteOribtModel.h * \brief 轨道模型 * * \author 陈增辉 * \date October 2024 *********************************************************************/ #include "LogInfoCls.h" #include "BaseConstVariable.h" #include "SARSatelliteSimulationAbstractCls.h" #include #include #include #include /// /// 多项式轨道模型 /// class PolyfitSatelliteOribtModel:public AbstractSatelliteOribtModel { public: PolyfitSatelliteOribtModel(); ~PolyfitSatelliteOribtModel() override; void saveToXml(const QString& filePath) ; bool loadFromXml(const QString& filePath); void readVector(QXmlStreamReader& xmlReader, const QString& name, std::vector& vec); void writeVector(QXmlStreamWriter& xmlWriter, const QString& name, const std::vector& vec); public: QString getSatelliteOribtModelParamsString(); public: // 卫星轨道节点 virtual SatelliteOribtNode getSatelliteOribtNode(double& timeFromStartTime, bool& antAzAngleFlag) override; // 获取轨道节点 virtual ErrorCode getSatelliteOribtNode(double& timeFromStartTime, SatelliteOribtNode& node, bool& antAzAngleFlag) override; // 获取轨道节点 virtual ErrorCode getSatelliteAntDirectNormal(SatelliteOribtNode& Rs, Vector3D& Rt, SatelliteAntDirect& antNode); // 计算目标在天线方向图中的位置 public: // 卫星轨道模型的参考时间节点 virtual void setSatelliteOribtStartTime(long double oribtStartTime) override;// 设置卫星模型参考时间 virtual long double getSatelliteOribtStartTime() override;// 获取卫星模型参考时间 public: // 入射角相关参数 virtual void setbeamAngle(double beamAngle, bool RightLook) override;// 设置波位角 public: // 天线摆动角相关参数 virtual void setAzAngleRange(double cycletime, double minAzAngle, double maxAzAngle, double referenceAzAngle, double referenceTimeFromStartTime) override;//方位角变换循环时间 ;方位角变换范围; 特定时间的方位角,用于计算方位角变化情况 virtual double getAzAngleInCurrentTimeFromStartTime(double& currentTime) override;// 获取当前时间的 天线摆动角 virtual ErrorCode getAzAngleInCurrentTimeFromStartTime(double& currentTime, double& AzAngle);// 获取当前时间的 天线摆动角 public: // 定义在原始天线坐标下的天线坐标系的调整,其中仍然定义-Z 轴为 天线指向方向 virtual void setAntnnaAxisX(double X, double Y, double Z) override; // 设置天线X轴指向 virtual void setAntnnaAxisY(double X, double Y, double Z) override; // 设置天线X轴指向 virtual void setAntnnaAxisZ(double X, double Y, double Z) override; // 设置天线X轴指向 virtual ErrorCode getAntnnaDirection(SatelliteOribtNode& node) override; // 获取天线指向方向 virtual ErrorCode getZeroDopplerAntDirect(SatelliteOribtNode& node) override; private: // 变量 double beamAngle; // 波位角 bool RightLook; // 左右视 double cycletime; // 方位角变换循环时间 double minAzAngle; // 方位角变换范围 double maxAzAngle; // 方位角变换范围 double referenceAzAngle; // 特定时间的方位角,用于计算方位角变化情况 double referenceTimeFromStartTime; // 特定时间的方位角,用于计算方位角变化情况 Point3 AntnnaAxisX; // 天线X轴指向 Point3 AntnnaAxisY; // 天线Y轴指向 Point3 AntnnaAxisZ; // 天线Z轴指向 private: // 轨道模型 std::vector oribtNodes; long double oribtStartTime; // 卫星模型参考时间 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; private: double Pt; // 发射电压 double Gri;// 系统增益 public: long double getOribtStartTime(); // 卫星模型参考时间 std::vector getPolyfitPx(); // 空间坐标 std::vector getPolyfitPy(); std::vector getPolyfitPz(); std::vector getPolyfitVx(); // 速度拟合参数 std::vector getPolyfitVy(); std::vector getPolyfitVz(); public: // 增加节点 void addOribtNode(SatelliteOribtNode node); ErrorCode polyFit(int polynum = 3, bool input_timeFromReferenceTime = false); public: virtual double getPt() override; virtual double getGri() override; virtual void setPt(double Pt) override; virtual void setGri(double gri) override; //virtual double getPt(); //virtual double getGri(); //virtual void setPt(double Pt); //virtual void setGri(double gri); }; std::shared_ptr CreataPolyfitSatelliteOribtModel(std::vector &nodes, long double startTime,int polynum=3);