🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
HPOPForceModel.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstCore/CelestialBody.hpp"
25#include "AstCore/GravityForce.hpp"
26#include "AstCore/PointMassForce.hpp"
27#include "AstCore/DragForce.hpp"
28#include "AstCore/ThirdBodyForce.hpp"
29#include "AstCore/SolarRadiationPressure.hpp"
30#include "AstCore/RelativityCorrection.hpp"
31#include "AstUtil/Object.hpp"
32#include "AstUtil/ObjectNamed.hpp"
33#include "AstUtil/Constants.h"
34#include "AstUtil/ScopedPtr.hpp"
35#include "AstUtil/ClonePtr.hpp"
36#include <vector>
37
38AST_NAMESPACE_BEGIN
39
48class AST_CORE_API HPOPForceModel: public ObjectNamed
49{
50public:
51 AST_OBJECT(HPOPForceModel)
54
55 using ThirdBodyList = std::vector<ThirdBodyForce>;
56
57 bool useCentralBodyAttraction() const{return useCentralBodyAttraction_;}
58
59 bool useDrag() const{return useDrag_;}
60 void useDrag(bool useDrag){useDrag_ = useDrag;}
61
62 bool useSRP() const{return useSRP_;}
63 void useSRP(bool useSRP){useSRP_ = useSRP;}
64
65 bool useRelativityCorrection() const{return useRelativityCorrection_;}
66 void useRelativityCorrection(bool useRelativityCorrection){useRelativityCorrection_ = useRelativityCorrection;}
67
69 Body* centralBody() const;
71 void setCentralBody(Body* body){centralBody_ = body;}
72
74 DragForce& drag(){return drag_;}
75 const DragForce& drag() const {return drag_;}
76
78 SolarRadiationPressure& srp(){return srp_;}
79 const SolarRadiationPressure& srp() const {return srp_;}
80
83 GravityForce& gravity();
84
87 PointMassForce& pointMass();
88
91 BodyAttraction& bodyAttraction();
92
94 const BodyAttraction& bodyAttraction() const;
95
97 EBodyAttractionType bodyAttractionType() const;
98
102 ThirdBodyForce* addThirdBody(StringView bodyName);
103
106 ThirdBodyForce* addThirdBody(Body* body);
107
109 ThirdBodyForce* addThirdBody(ThirdBodyForce& force);
110
113 ThirdBodyForce* getThirdBody(Body* body);
114
117 ThirdBodyForce* getThirdBody(StringView bodyName);
118
120 const ThirdBodyList& getThirdBodies() const{return thirdBodies_;}
121private:
122 bool useDrag_{false};
123 bool useSRP_{false};
124 bool useRelativityCorrection_{false};
125 bool useCentralBodyAttraction_{true};
126 SharedPtr<Body> centralBody_;
127 DragForce drag_;
128 SolarRadiationPressure srp_;
129 ThirdBodyList thirdBodies_;
130 ClonePtr<BodyAttraction> bodyAttraction_;
131
132 bool useMoonGravity_{false};
133 double moonGravity_{kMoonGrav};
134public: // [月球特定的接口,待废弃]
135 bool useMoonGravity() const{return useMoonGravity_;}
136 void useMoonGravity(bool useMoonGravity){useMoonGravity_ = useMoonGravity;}
137 double moonGravity() const{return moonGravity_;}
138 void setMoonGravity(double moonGravity){moonGravity_ = moonGravity;}
139};
140
141
144AST_NAMESPACE_END
天体
定义 CelestialBody.hpp:72
大气阻力模型
定义 DragForce.hpp:69
高精度轨道预报力模型
定义 HPOPForceModel.hpp:49
SolarRadiationPressure & srp()
获取太阳辐射压模型
定义 HPOPForceModel.hpp:78
const ThirdBodyList & getThirdBodies() const
获取三体引力模型列表
定义 HPOPForceModel.hpp:120
void setCentralBody(Body *body)
设置中心天体
定义 HPOPForceModel.hpp:71
DragForce & drag()
获取阻力模型
定义 HPOPForceModel.hpp:74
命名对象
定义 ObjectNamed.hpp:36
太阳辐射压力
定义 SolarRadiationPressure.hpp:47
constexpr double kMoonGrav
月球引力常数 [m^3/s^2]. (GLGM2)
定义 Constants.h:105