🛰️航天仿真算法库 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:
53
54 using ThirdBodyList = std::vector<ThirdBodyForce>;
55
56 bool useDrag() const{return useDrag_;}
57 void useDrag(bool useDrag){useDrag_ = useDrag;}
58
59 bool useSRP() const{return useSRP_;}
60 void useSRP(bool useSRP){useSRP_ = useSRP;}
61
62 bool useRelativityCorrection() const{return useRelativityCorrection_;}
63 void useRelativityCorrection(bool useRelativityCorrection){useRelativityCorrection_ = useRelativityCorrection;}
64
66 Body* centralBody() const{return centralBody_.get();}
68 void setCentralBody(Body* body){centralBody_ = body;}
69
71 DragForce& drag(){return drag_;}
72 const DragForce& drag() const {return drag_;}
73
75 SolarRadiationPressure& srp(){return srp_;}
76 const SolarRadiationPressure& srp() const {return srp_;}
77
80 GravityForce& gravity();
81
84 PointMassForce& pointMass();
85
88 BodyAttraction& bodyAttraction();
89
91 const BodyAttraction& bodyAttraction() const;
92
94 EBodyAttractionType bodyAttractionType() const;
95
98 ThirdBodyForce* addThirdBody(Body* body);
99
101 ThirdBodyForce* addThirdBody(ThirdBodyForce& force);
102
105 ThirdBodyForce* getThirdBody(Body* body);
106
109 ThirdBodyForce* getThirdBody(StringView bodyName);
110
112 const ThirdBodyList& getThirdBodies() const{return thirdBodies_;}
113private:
114 bool useDrag_{false};
115 bool useSRP_{false};
116 bool useRelativityCorrection_{false};
117 SharedPtr<Body> centralBody_;
118 DragForce drag_;
119 SolarRadiationPressure srp_;
120 ThirdBodyList thirdBodies_;
121 ClonePtr<BodyAttraction> bodyAttraction_;
122
123 bool useMoonGravity_{false};
124 double moonGravity_{kMoonGrav};
125public:
126 bool useMoonGravity() const{return useMoonGravity_;}
127 void useMoonGravity(bool useMoonGravity){useMoonGravity_ = useMoonGravity;}
128 double moonGravity() const{return moonGravity_;}
129 void setMoonGravity(double moonGravity){moonGravity_ = moonGravity;}
130};
131
132
135AST_NAMESPACE_END
天体
定义 CelestialBody.hpp:52
大气阻力模型
定义 DragForce.hpp:69
高精度轨道预报力模型
定义 HPOPForceModel.hpp:49
SolarRadiationPressure & srp()
获取太阳辐射压模型
定义 HPOPForceModel.hpp:75
const ThirdBodyList & getThirdBodies() const
获取三体引力模型列表
定义 HPOPForceModel.hpp:112
void setCentralBody(Body *body)
设置中心天体
定义 HPOPForceModel.hpp:68
Body * centralBody() const
获取中心天体
定义 HPOPForceModel.hpp:66
DragForce & drag()
获取阻力模型
定义 HPOPForceModel.hpp:71
命名对象
定义 ObjectNamed.hpp:36
太阳辐射压力
定义 SolarRadiationPressure.hpp:47
constexpr double kMoonGrav
月球引力常数 [m^3/s^2]. (GLGM2)
定义 Constants.h:89