🛰️航天仿真算法库 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
29
AST_NAMESPACE_BEGIN
30
31
40
class
AST_CORE_API
JplDe
41
{
42
public
:
43
enum
EDataCode
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
127
errc_t
getPosICRF_TT
(
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
188
private
:
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]);
195
protected
:
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
216
AST_NAMESPACE_END
ast::Euler
欧拉角
定义
Euler.hpp:31
ast::JplDe
JPL DE文件接口类
定义
JplDe.hpp:41
ast::JplDe::EDataCode
EDataCode
定义
JplDe.hpp:44
ast::JplDe::getPosICRF_TT
errc_t getPosICRF_TT(const JulianDate jdTT, EDataCode target, EDataCode referenceBody, Vector3d &pos)
获取对应时间点的目标天体在参考天体下的位置
ast::JplDe::getEphemVersion
uint32_t getEphemVersion() const
获取JPL DE文件的星历版本
定义
JplDe.hpp:180
ast::JulianDate
儒略日
定义
JulianDate.hpp:82
ast::TimeInterval
时间区间
定义
TimeInterval.hpp:59
ast::TimePoint
绝对时间点
定义
TimePoint.hpp:106
src
AstCore
Data
JplDe.hpp
制作者
1.12.0