🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
AstroBlockFactory.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstCore/BlockDerivative.hpp"
25#include "AstCore/BlockMotion.hpp"
26#include "AstCore/BlockMotionPartial.hpp"
27#include "AstCore/BlockTwoBody.hpp"
28#include "AstCore/BlockTwoBodyPartial.hpp"
29#include "AstCore/BlockGravity.hpp"
30#include "AstCore/BlockGravityPartial.hpp"
31#include "AstCore/BlockMass.hpp"
32#include "AstCore/BlockDrag.hpp"
33#include "AstCore/BlockDragPartial.hpp"
34#include "AstCore/BlockSRP.hpp"
35#include "AstCore/BlockSRPPartial.hpp"
36#include "AstCore/BlockThirdBodyGravity.hpp"
37#include "AstCore/BlockThirdBodyGravityPartial.hpp"
38#include "AstCore/BlockThirdBodyPointMass.hpp"
39#include "AstCore/BlockThirdBodyPointMassPartial.hpp"
40#include "AstCore/BlockStateTransitionMatrix.hpp"
41#include "AstCore/BlockDragSensitivity.hpp"
42#include "AstCore/BlockSRPSensitivity.hpp"
43#include "AstCore/Axes.hpp"
44#include "AstCore/Atmosphere.hpp"
45#include "AstCore/EclipseCalculator.hpp"
46#include "AstMath/Matrix.hpp"
47#include <vector>
48
49AST_NAMESPACE_BEGIN
50
66{
67public:
68 explicit AstroBlockFactory(bool useSTM = false) : useSTM_(useSTM) {}
69
70 // ── 运动学 ──
71
72 BlockMotion* createMotionBlock() {
73 if (useSTM_)
74 return new BlockMotionPartial();
75 else
76 return new BlockMotion();
77 }
78
79 // ── 中心天体 ──
80
81 BlockTwoBody* createTwoBodyBlock(double GM) {
82 if (useSTM_)
83 return new BlockTwoBodyPartial(GM);
84 else
85 return new BlockTwoBody(GM);
86 }
87
88 BlockGravity* createGravityBlock(GravityField&& gf, int degree, int order,
89 Axes* gravityAxes, Axes* propAxes)
90 {
91 if (useSTM_)
92 return new BlockGravityPartial(std::move(gf), degree, order, gravityAxes, propAxes);
93 else
94 return new BlockGravity(std::move(gf), degree, order, gravityAxes, propAxes);
95 }
96
97 // ── 质量 ──
98
99 BlockMass* createMassBlock(double mass) { return new BlockMass(mass); }
100
101 // ── 阻力 / SRP ──
102
103 BlockDrag* createDragBlock(Atmosphere* atm, double cd, double area, Frame* frame)
104 {
105 if (useSTM_)
106 return new BlockDragPartial(atm, cd, area, frame);
107 else
108 return new BlockDrag(atm, cd, area, frame);
109 }
110
111 BlockSRP* createSRPBlock(EclipseCalculator* ec, double cr, double area, Frame* frame)
112 {
113 if (useSTM_)
114 return new BlockSRPPartial(ec, cr, area, frame);
115 else
116 return new BlockSRP(ec, cr, area, frame);
117 }
118
119 // ── 三体 ──
120
121 BlockThirdBodyGravity* createThirdBodyGravityBlock(Point* ephemeris, GravityField&& gf,
122 int degree, int order,
123 Axes* gravityAxes, Frame* propFrame)
124 {
125 if (useSTM_)
126 return new BlockThirdBodyGravityPartial(ephemeris, std::move(gf), degree, order, gravityAxes, propFrame);
127 else
128 return new BlockThirdBodyGravity(ephemeris, std::move(gf), degree, order, gravityAxes, propFrame);
129 }
130
131 BlockThirdBodyPointMass* createThirdBodyPointMassBlock(Point* ephemeris, double GM, Frame* frame)
132 {
133 if (useSTM_)
134 return new BlockThirdBodyPointMassPartial(ephemeris, GM, frame);
135 else
136 return new BlockThirdBodyPointMass(ephemeris, GM, frame);
137 }
138 BlockStateTransitionMatrix* createStateTransitionMatrixBlock() { return new BlockStateTransitionMatrix(); }
139
140 // ── 参数敏感度传播 ──
141
142 BlockDragSensitivity* createDragSensitivityBlock() { return new BlockDragSensitivity(); }
143 BlockSRPSensitivity* createSRPSensitivityBlock() { return new BlockSRPSensitivity(); }
144private:
145 bool useSTM_;
146};
147
150AST_NAMESPACE_END
天体力学函数块工厂
定义 AstroBlockFactory.hpp:66
大气模型基类
定义 Atmosphere.hpp:48
轴系抽象基类
定义 Axes.hpp:72
大气阻力偏导数(梯度)函数块
定义 BlockDragPartial.hpp:74
弹道系数B敏感度传播函数块
定义 BlockDragSensitivity.hpp:56
大气阻力函数块
定义 BlockDrag.hpp:57
重力场偏导数(梯度)函数块
定义 BlockGravityPartial.hpp:61
重力场函数块
定义 BlockGravity.hpp:54
质量函数块
定义 BlockMass.hpp:44
运动学偏导数函数块
定义 BlockMotionPartial.hpp:59
运动学函数块
定义 BlockMotion.hpp:44
太阳辐射压力偏导数(梯度)函数块
定义 BlockSRPPartial.hpp:73
SRP综合参数K敏感度传播函数块
定义 BlockSRPSensitivity.hpp:56
太阳辐射压力函数块
定义 BlockSRP.hpp:76
状态转换矩阵(STM)函数块
定义 BlockStateTransitionMatrix.hpp:72
三体球谐重力偏导数(梯度)函数块
定义 BlockThirdBodyGravityPartial.hpp:72
三体重力场函数块
定义 BlockThirdBodyGravity.hpp:67
三体点质量引力偏导数(梯度)函数块
定义 BlockThirdBodyPointMassPartial.hpp:69
三体点质量引力函数块
定义 BlockThirdBodyPointMass.hpp:52
二体引力偏导数(梯度)函数块
定义 BlockTwoBodyPartial.hpp:64
二体引力函数块
定义 BlockTwoBody.hpp:52
阴影光照计算器
定义 EclipseCalculator.hpp:37
坐标系抽象基类
定义 Frame.hpp:62
重力场系数
定义 GravityField.hpp:88
点抽象基类
定义 Point.hpp:41