🛰️航天仿真算法库 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,
47 eVenus = 1,
48 eEarth = 2,
49 eMars = 3,
51 eSaturn = 5,
52 eUranus = 6,
54 ePluto = 8,
55 eMoon = 9,
56 eSun = 10,
57 eSSBarycenter = 11,
58 eEMBarycenter = 12,
59 };
60
61 JplDe();
62 ~JplDe();
63
64 JplDe(const JplDe&) = delete;
65 JplDe& operator=(const JplDe&) = delete;
66
70 errc_t open(const char* filepath);
71
72
73 errc_t openDefault();
74
77 bool isOpen() const;
78
79
81 void close();
82
83
92 errc_t getPosVelICRF(
93 const TimePoint& time,
94 EDataCode target,
95 EDataCode referenceBody,
96 Vector3d& pos,
97 Vector3d& vel
98 );
99
100 errc_t getPosVelICRF(
101 const TimePoint& time,
102 EDataCode target,
103 EDataCode referenceBody,
104 Vector3d& pos,
105 Vector3d* vel
106 );
107
108
116 errc_t getPosICRF(
117 const TimePoint& time,
118 EDataCode target,
119 EDataCode referenceBody,
120 Vector3d& pos
121 );
122
123
129 errc_t getNutation(
130 const TimePoint& time,
131 double& nutLong,
132 double& nutObl
133 );
134
135
142 errc_t getLibration(
143 const TimePoint& time,
144 Euler& ang,
145 Euler& angRate
146 );
147
148
154 errc_t getLibration(
155 const TimePoint& time,
156 Euler& ang
157 );
158
161 uint32_t getEphemVersion() const{ return ephemVersion_; }
162
163
167 errc_t getInterval(TimeInterval& interval) const;
168
169private:
170 errc_t readDataBlock(size_t idx);
171 errc_t getStateTDB(const JulianDate& jdTDB, int dataid, double pos[], double vel[]);
172 errc_t getStateTDB(const JulianDate& jdTDB, int datalist[11], double statelist[11][6]);
173
174 errc_t getState(const TimePoint& time, int dataid, double pos[], double vel[]);
175 errc_t getState(const TimePoint& time, int datalist[11], double statelist[11][6]);
176protected:
177 bool isSameEndian_; // 二进制文件与系统大小端是否一致
178 uint32_t ephemVersion_{ 0 }; // De星历版本
179 uint32_t numConstants_{}; // 文件的常量个数
180 uint32_t numDataBlock_{0}; // 星历总的数据块个数
181 uint32_t numCoeff_{}; // 星历每个数据块的系数数量
182 uint32_t ipt_[15][3]{}; // 数据指针[数据起始位置;每个坐标分量的数据量;子块个数:如4代表了32天要分为四块,每个子块包含了8天的数据]
183 double ephemStart_{0}; // 星历起始时间(JED)
184 double ephemEnd_{0}; // 星历结束时间(JED)
185 double ephemStep_{0}; // 星历每个数据块的天数
186 double au_{}; // 光速 km
187 double emMassRatio_{}; // 地球月球质量比
188 FILE* deFile_{ NULL }; // De二进制文件
189 double** dataBlocks_{NULL}; // 星历数据块的内存缓存
190 std::mutex dataBlockMutex_; // 数据块缓存互斥锁
191};
192
193
194
197AST_NAMESPACE_END
欧拉角
定义 Euler.hpp:31
JPL DE文件接口类
定义 JplDe.hpp:41
EDataCode
定义 JplDe.hpp:44
uint32_t getEphemVersion() const
获取JPL DE文件的星历版本
定义 JplDe.hpp:161
儒略日
定义 JulianDate.hpp:86
时间区间
定义 TimeInterval.hpp:64
绝对时间点
定义 TimePoint.hpp:108
@ eJupiter
木星
定义 CelestialBody.hpp:394
@ eVenus
金星
定义 CelestialBody.hpp:384
@ eMoon
月球
定义 CelestialBody.hpp:387
@ eUranus
天王星
定义 CelestialBody.hpp:439
@ eMercury
水星
定义 CelestialBody.hpp:382
@ eNeptune
海王星
定义 CelestialBody.hpp:457
@ eSaturn
土星
定义 CelestialBody.hpp:412
@ eEarth
地球
定义 CelestialBody.hpp:386
@ eSun
太阳
定义 CelestialBody.hpp:380
@ eMars
火星
定义 CelestialBody.hpp:389
@ ePluto
冥王星
定义 CelestialBody.hpp:467