🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
State.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/Object.hpp"
25#include "AstUtil/ObjectNamed.hpp"
26#include "AstCore/Frame.hpp"
27#include "AstCore/EventTime.hpp"
28
29AST_NAMESPACE_BEGIN
30
38enum class EStateType
39{
42 eUnknown,
43};
44
45class State;
46using PState = State*;
47using HState = SharedPtr<State>;
48
52class AST_CORE_API State: public ObjectNamed
53{
54public:
55 AST_OBJECT(State)
56 AST_PROPERT(Frame)
57 AST_PROPERT(StateEpoch)
58;
59
60 static PState NewDefault();
61
62 State() = default;
63 ~State() override = default;
64
68 static HState MakeShared(EStateType type);
69
74 static HState MakeShared(State& state, EStateType type);
75
76
80 static PState New(EStateType type);
81
82
87 static PState New(State& state, EStateType type);
88protected:
89 State(const State& state) = default; // 怎么处理深拷贝? 现在默认浅拷贝
90public:
93 virtual EStateType getStateType() const = 0;
94
98 virtual errc_t getState(CartState& state) const = 0;
99
103 virtual errc_t getState(ModOrbElem& orbElem) const = 0;
104
108 virtual errc_t setState(const CartState& state) = 0;
109
113 virtual errc_t setState(const ModOrbElem& orbElem) = 0;
114
115
120 errc_t getStateIn(Frame* frame, ModOrbElem& orbElem) const;
121
122
127 errc_t getStateIn(Frame* frame, CartState& state) const;
128
133 errc_t getStateInBodyInertial(Body* body, CartState& state) const;
134
135
136public:
137
140 errc_t setFrameByName(StringView frameName);
141
145 errc_t changeFrame(Frame* frame);
146
147
148
151 void setStateEpoch(const TimePoint& stateEpoch);
152
154 TimePoint getStateEpoch_TimePoint() const;
155
159 errc_t getStateEpoch(TimePoint& stateEpoch) const;
160
164
166 Body* getBody() const;
167
170 double getBodyRadius() const;
171
174 double getGM() const { return gm_; }
175
178 void setGM(double gm){ gm_ = gm; }
179public:
180
181public:
182
183
184#if 0
185// 这些与历元坐标系定义相关的接口增加了类设计的复杂度
186// 应该考虑如何将历元坐标系相关逻辑放在该类的顶层模块,不在这里处理相关逻辑
187public: // 与历元坐标系定义相关的接口:
188 void setCoordEpoch(EventTime* coordEpoch);
189
190 void setCoordEpoch(const TimePoint& coordEpoch);
191
192 errc_t getCoordEpoch(TimePoint& coordEpoch) const;
193
194 bool getUseCoordEpoch() const;
195
196 void setUseCoordEpoch(bool useCoordEpoch);
197
198 void setCoordAxes(Axes* axes);
199
200 errc_t changeCoordAxes(Axes* axes);
201
202 Axes* getCoordAxes() const;
203#endif
204
205PROPERTIES:
207 Frame* getFrame() const{ return frame_.get(); }
208
210 void setFrame(Frame* frame);
211
213 EventTime* getStateEpoch() const{ return stateEpoch_.get(); }
214
217 void setStateEpoch(EventTime* stateEpoch);
218
219protected:
221 double gm_{0};
223};
224
227AST_NAMESPACE_END
轴系类
定义 Axes.hpp:70
直角坐标
定义 OrbitElement.hpp:46
天体
定义 CelestialBody.hpp:52
事件时间
定义 EventTime.hpp:44
坐标系类
定义 Frame.hpp:60
修正轨道根数
定义 OrbitElement.hpp:131
命名对象
定义 ObjectNamed.hpp:36
航天器状态
定义 State.hpp:53
EventTime * getStateEpoch() const
获取状态历元时间
定义 State.hpp:213
virtual errc_t getState(CartState &state) const =0
获取状态
virtual EStateType getStateType() const =0
获取状态类型
double getGM() const
获取引力常数
定义 State.hpp:174
virtual errc_t setState(const CartState &state)=0
设置状态
SharedPtr< EventTime > & getStateEpochHandle()
获取状态历元时间句柄
定义 State.hpp:163
virtual errc_t setState(const ModOrbElem &orbElem)=0
设置状态
virtual errc_t getState(ModOrbElem &orbElem) const =0
获取状态
void setGM(double gm)
设置引力常数
定义 State.hpp:178
SharedPtr< EventTime > stateEpoch_
状态历元时间
定义 State.hpp:222
SharedPtr< Frame > frame_
参考坐标系
定义 State.hpp:220
绝对时间点
定义 TimePoint.hpp:106
EStateType
状态类型
定义 State.hpp:39
@ eCartesian
笛卡尔状态
@ eKeplerian
开普勒状态
@ eUnknown
未知插值方法
定义 STKEphemerisFileParser.cpp:43