2024-11-25 01:30:14 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
/*****************************************************************//**
|
|
|
|
|
* \file SatelliteOribtModel.h
|
|
|
|
|
* \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
|
|
|
|
|
*
|
|
|
|
|
* \author <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* \date October 2024
|
|
|
|
|
*********************************************************************/
|
|
|
|
|
#include "LogInfoCls.h"
|
|
|
|
|
#include "BaseConstVariable.h"
|
|
|
|
|
#include "SARSatelliteSimulationAbstractCls.h"
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <memory>
|
2025-02-14 02:18:48 +00:00
|
|
|
|
#include <QFile>
|
|
|
|
|
#include <QXmlStreamWriter>
|
|
|
|
|
|
2024-11-25 01:30:14 +00:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|
|
|
|
/// </summary>
|
|
|
|
|
class PolyfitSatelliteOribtModel:public AbstractSatelliteOribtModel
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
PolyfitSatelliteOribtModel();
|
|
|
|
|
~PolyfitSatelliteOribtModel() override;
|
2025-02-14 02:18:48 +00:00
|
|
|
|
|
|
|
|
|
void saveToXml(const QString& filePath) ;
|
|
|
|
|
bool loadFromXml(const QString& filePath);
|
|
|
|
|
void readVector(QXmlStreamReader& xmlReader, const QString& name, std::vector<double>& vec);
|
|
|
|
|
void writeVector(QXmlStreamWriter& xmlWriter, const QString& name, const std::vector<double>& vec);
|
|
|
|
|
|
2024-11-25 06:26:46 +00:00
|
|
|
|
public:
|
|
|
|
|
QString getSatelliteOribtModelParamsString();
|
2024-11-25 01:30:14 +00:00
|
|
|
|
|
|
|
|
|
public: // <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
virtual SatelliteOribtNode getSatelliteOribtNode(double& timeFromStartTime, bool& antAzAngleFlag) override; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
virtual ErrorCode getSatelliteOribtNode(double& timeFromStartTime, SatelliteOribtNode& node, bool& antAzAngleFlag) override; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
virtual ErrorCode getSatelliteAntDirectNormal(SatelliteOribtNode& Rs, Vector3D& Rt, SatelliteAntDirect& antNode); // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>ͼ<EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
public: // <20><><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD>ģ<EFBFBD>͵IJο<C4B2>ʱ<EFBFBD><CAB1><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
virtual void setSatelliteOribtStartTime(long double oribtStartTime) override;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳο<CDB2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
virtual long double getSatelliteOribtStartTime() override;// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳο<CDB2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
public: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|
|
|
|
virtual void setbeamAngle(double beamAngle, bool RightLook) override;// <20><><EFBFBD>ò<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
|
|
|
|
public: // <20><><EFBFBD>߰ڶ<DFB0><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|
|
|
|
virtual void setAzAngleRange(double cycletime, double minAzAngle, double maxAzAngle, double referenceAzAngle, double referenceTimeFromStartTime) override;//<2F><>λ<EFBFBD>DZ任ѭ<E4BBBB><D1AD>ʱ<EFBFBD><CAB1> ;<3B><>λ<EFBFBD>DZ任<C7B1><E4BBBB>Χ<EFBFBD><CEA7> <20>ض<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ķ<EFBFBD>λ<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC>㷽λ<E3B7BD>DZ仯<C7B1><E4BBAF><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
virtual double getAzAngleInCurrentTimeFromStartTime(double& currentTime) override;// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD> <20><><EFBFBD>߰ڶ<DFB0><DAB6><EFBFBD>
|
|
|
|
|
virtual ErrorCode getAzAngleInCurrentTimeFromStartTime(double& currentTime, double& AzAngle);// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD> <20><><EFBFBD>߰ڶ<DFB0><DAB6><EFBFBD>
|
|
|
|
|
|
|
|
|
|
public: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>-Z <20><>Ϊ <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
virtual void setAntnnaAxisX(double X, double Y, double Z) override; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>ָ<EFBFBD><D6B8>
|
|
|
|
|
virtual void setAntnnaAxisY(double X, double Y, double Z) override; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>ָ<EFBFBD><D6B8>
|
|
|
|
|
virtual void setAntnnaAxisZ(double X, double Y, double Z) override; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
|
|
|
|
virtual ErrorCode getAntnnaDirection(SatelliteOribtNode& node) override; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2024-11-25 17:51:20 +00:00
|
|
|
|
virtual ErrorCode getZeroDopplerAntDirect(SatelliteOribtNode& node) override;
|
2024-11-25 01:30:14 +00:00
|
|
|
|
private: // <20><><EFBFBD><EFBFBD>
|
2025-02-14 02:18:48 +00:00
|
|
|
|
|
2024-11-25 01:30:14 +00:00
|
|
|
|
double beamAngle; // <20><>λ<EFBFBD><CEBB>
|
|
|
|
|
bool RightLook; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
double cycletime; // <20><>λ<EFBFBD>DZ任ѭ<E4BBBB><D1AD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
double minAzAngle; // <20><>λ<EFBFBD>DZ任<C7B1><E4BBBB>Χ
|
|
|
|
|
double maxAzAngle; // <20><>λ<EFBFBD>DZ任<C7B1><E4BBBB>Χ
|
|
|
|
|
double referenceAzAngle; // <20>ض<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ķ<EFBFBD>λ<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC>㷽λ<E3B7BD>DZ仯<C7B1><E4BBAF><EFBFBD><EFBFBD>
|
|
|
|
|
double referenceTimeFromStartTime; // <20>ض<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ķ<EFBFBD>λ<EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC>㷽λ<E3B7BD>DZ仯<C7B1><E4BBAF><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
Point3 AntnnaAxisX; // <20><><EFBFBD><EFBFBD>X<EFBFBD><58>ָ<EFBFBD><D6B8>
|
|
|
|
|
Point3 AntnnaAxisY; // <20><><EFBFBD><EFBFBD>Y<EFBFBD><59>ָ<EFBFBD><D6B8>
|
|
|
|
|
Point3 AntnnaAxisZ; // <20><><EFBFBD><EFBFBD>Z<EFBFBD><5A>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
2025-02-14 02:18:48 +00:00
|
|
|
|
private: // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
2024-11-25 01:30:14 +00:00
|
|
|
|
std::vector<SatelliteOribtNode> oribtNodes;
|
|
|
|
|
|
2025-02-14 02:18:48 +00:00
|
|
|
|
long double oribtStartTime; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳο<CDB2>ʱ<EFBFBD><CAB1>
|
2024-11-25 01:30:14 +00:00
|
|
|
|
std::vector<double> polyfitPx; // <20>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
std::vector<double> polyfitPy;
|
|
|
|
|
std::vector<double> polyfitPz;
|
|
|
|
|
std::vector<double> polyfitVx; // <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
std::vector<double> polyfitVy;
|
|
|
|
|
std::vector<double> polyfitVz;
|
|
|
|
|
|
|
|
|
|
double Pxchisq; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> X2
|
|
|
|
|
double Pychisq;
|
|
|
|
|
double Pzchisq;
|
|
|
|
|
double Vxchisq;
|
|
|
|
|
double Vychisq;
|
|
|
|
|
double Vzchisq;
|
2025-02-14 02:18:48 +00:00
|
|
|
|
private:
|
|
|
|
|
double Pt; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
|
|
|
|
double Gri;// ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
|
|
|
|
|
|
2025-02-17 09:13:18 +00:00
|
|
|
|
public:
|
|
|
|
|
long double getOribtStartTime(); // <20><><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳο<CDB2>ʱ<EFBFBD><CAB1>
|
|
|
|
|
std::vector<double> getPolyfitPx(); // <20>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
std::vector<double> getPolyfitPy();
|
|
|
|
|
std::vector<double> getPolyfitPz();
|
|
|
|
|
std::vector<double> getPolyfitVx(); // <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
std::vector<double> getPolyfitVy();
|
|
|
|
|
std::vector<double> getPolyfitVz();
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 02:18:48 +00:00
|
|
|
|
|
|
|
|
|
public: // <20><><EFBFBD>ӽڵ<D3BD>
|
|
|
|
|
void addOribtNode(SatelliteOribtNode node);
|
|
|
|
|
ErrorCode polyFit(int polynum = 3, bool input_timeFromReferenceTime = false);
|
2024-11-25 01:30:14 +00:00
|
|
|
|
|
2025-02-14 02:18:48 +00:00
|
|
|
|
|
2024-11-25 01:30:14 +00:00
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 02:18:48 +00:00
|
|
|
|
|
2024-11-25 01:30:14 +00:00
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<AbstractSatelliteOribtModel> CreataPolyfitSatelliteOribtModel(std::vector<SatelliteOribtNode> &nodes, long double startTime,int polynum=3);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|