🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
DataGroupVectorPrv.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include <cmath>
24
25#include "AstGlobal.h"
26#include "AstReport/DataGroupTimeVar.hpp"
27#include "AstCore/Vector.hpp"
28#include "AstCore/Axes.hpp"
29#include "AstUtil/Span.hpp"
30
31AST_NAMESPACE_BEGIN
32
41{
42public:
43 struct Data
44 {
45 TimePoint time_;
46 Vector3d vector_;
47 Vector3d velocity_;
48
49 const TimePoint& getTime() const { return time_; }
50
51 // 分量 & 模
52 double getX() const { return vector_.x(); }
53 double getY() const { return vector_.y(); }
54 double getZ() const { return vector_.z(); }
55 double getMagnitude() const { return vector_.norm(); }
56
57 // 方向余弦
58 double getXOverMag() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : vector_.x() / m; }
59 double getYOverMag() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : vector_.y() / m; }
60 double getZOverMag() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : vector_.z() / m; }
61
62 // 球面角
63 double getRightAscension() const { return std::atan2(vector_.y(), vector_.x()); }
64 double getDeclination() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : std::asin(vector_.z() / m); }
65 double getCoDeclination() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : std::acos(vector_.z() / m); }
66 double getNegativeDeclination() const { return -getDeclination(); }
67
68 // 方向角 (与各轴的夹角)
69 double getDirectionAngleX() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : std::acos(vector_.x() / m); }
70 double getDirectionAngleY() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : std::acos(vector_.y() / m); }
71 double getDirectionAngleZ() const { double m = vector_.norm(); return (m < 1e-12) ? 0.0 : std::acos(vector_.z() / m); }
72
73 // 导数
74 double getDerivativeX() const { return velocity_.x(); }
75 double getDerivativeY() const { return velocity_.y(); }
76 double getDerivativeZ() const { return velocity_.z(); }
77 double getDerivativeMagnitude() const { return velocity_.norm(); }
78 };
79 static DataElements Elements();
80
81 DataGroupVectorPrv() = default;
82 ~DataGroupVectorPrv() = default;
83public:
84 errc_t calculate(const TimeList& timeList, VariantVector& result) const override;
85 const DataElements& getElements() const override;
86public:
87 errc_t calculate(const TimeList& timeList, std::vector<Data>& result) const;
88 errc_t calculate(const TimeList& timeList, Span<Data> result) const;
89public:
90 Vector* getVector() const { return vector_.get(); }
91 Axes* getAxes() const { return axes_.get(); }
92private:
93 WeakPtr<Vector> vector_{};
94 WeakPtr<Axes> axes_;
95};
96
97
100AST_NAMESPACE_END
随时间变化的数据组
定义 DataGroupTimeVar.hpp:37
向量数据组 (派生量) — 分量、模、方向余弦、球面角、方向角、导数
定义 DataGroupVectorPrv.hpp:41
绝对时间点
定义 TimePoint.hpp:108
Unit m
定义 Unit.cpp:456
定义 DataGroupVectorPrv.hpp:44
Vector3d velocity_
向量的时间导数
定义 DataGroupVectorPrv.hpp:47
Vector3d vector_
向量
定义 DataGroupVectorPrv.hpp:46