🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
JplDe.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstCore/RunTime.hpp"
25#include <stdint.h> // for uint32_t
26#include <cstdio> // for FILE
27#include <mutex> // for std::mutex
28
29AST_NAMESPACE_BEGIN
30
31
40class AST_CORE_API JplDe
41{
42public:
44 {
45 eNotAvailable = -1,
46 eMercury = 0,
47 eVenus = 1,
48 eEarth = 2,
49 eMars = 3,
50 eJupiter = 4,
51 eSaturn = 5,
52 eUranus = 6,
53 eNeptune = 7,
54 ePluto = 8,
55 eMoon = 9,
56 eSun = 10,
57 eSSBarycenter = 11,
58 eEMBarycenter = 12,
59 };
60
61 JplDe();
62 ~JplDe();
63
67 errc_t open(const char* filepath);
68
69
70 errc_t openDefault();
71
74 bool isOpen() const;
75
76
78 void close();
79
80
89 errc_t getPosVelICRF(
90 const TimePoint& time,
91 EDataCode target,
92 EDataCode referenceBody,
93 Vector3d& pos,
94 Vector3d& vel
95 );
96
97 errc_t getPosVelICRF(
98 const TimePoint& time,
99 EDataCode target,
100 EDataCode referenceBody,
101 Vector3d& pos,
102 Vector3d* vel
103 );
104
105
113 errc_t getPosICRF(
114 const TimePoint& time,
115 EDataCode target,
116 EDataCode referenceBody,
117 Vector3d& pos
118 );
119
128 const JulianDate jdTT,
129 EDataCode target,
130 EDataCode referenceBody,
131 Vector3d& pos
132 );
133
139 errc_t getNutation(
140 const TimePoint& time,
141 double& nutLong,
142 double& nutObl
143 );
144
145
152 errc_t getLibration(
153 const TimePoint& time,
154 Vector3d& ang,
155 Vector3d& angRate
156 );
157
163 errc_t getLibration(
164 const TimePoint& time,
165 Vector3d& ang
166 );
167
173 errc_t getLibration(
174 const TimePoint& time,
175 Euler& ang
176 );
177
180 uint32_t getEphemVersion() const{ return m_EphemVerion; }
181
182
186 errc_t getInterval(TimeInterval& interval) const;
187
188private:
189 errc_t readDataBlock(size_t idx);
190 errc_t getStateTDB(const JulianDate& jdTDB, int dataid, double pos[], double vel[]);
191 errc_t getStateTDB(const JulianDate& jdTDB, int datalist[11], double statelist[11][6]);
192
193 errc_t getState(const TimePoint& time, int dataid, double pos[], double vel[]);
194 errc_t getState(const TimePoint& time, int datalist[11], double statelist[11][6]);
195protected:
196 bool m_IsSameEndian; // 二进制文件与系统大小端是否一致
197 uint32_t m_EphemVerion{ 0 }; // De星历版本
198 uint32_t m_NumConstants; // 文件的常量个数
199 uint32_t m_NumDataBlock{0}; // 星历总的数据块个数
200 uint32_t m_NumCoeff; // 星历每个数据块的系数数量
201 uint32_t m_ipt[15][3]{}; // 数据指针[数据起始位置;每个坐标分量的数据量;子块个数:如4代表了32天要分为四块,每个子块包含了8天的数据]
202 double m_EphemStart{0}; // 星历起始时间(JED)
203 double m_EphemEnd{0}; // 星历结束时间(JED)
204 double m_EphemStep{0}; // 星历每个数据块的天数
205 double m_AU; // 光速 km
206 double m_EMMassRatio; // 地球月球质量比
207 FILE* m_DeFile{ NULL }; // De二进制文件
208 double** m_DataBlocks{NULL}; // 星历数据块的内存缓存
209 std::mutex m_DataBlockMutex; // 数据块缓存互斥锁
210};
211
212
213
216AST_NAMESPACE_END
欧拉角
定义 Euler.hpp:31
JPL DE文件接口类
定义 JplDe.hpp:41
EDataCode
定义 JplDe.hpp:44
errc_t getPosICRF_TT(const JulianDate jdTT, EDataCode target, EDataCode referenceBody, Vector3d &pos)
获取对应时间点的目标天体在参考天体下的位置
uint32_t getEphemVersion() const
获取JPL DE文件的星历版本
定义 JplDe.hpp:180
儒略日
定义 JulianDate.hpp:82
时间区间
定义 TimeInterval.hpp:59
绝对时间点
定义 TimePoint.hpp:106