🛰️航天仿真算法库 SpaceAST 0.3.1
载入中...
搜索中...
未找到
KinematicRotation.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Rotation.hpp"
25#include "AstCore/OrbitElement.hpp"
26
27AST_NAMESPACE_BEGIN
28
29#define _AST_DEF_KINEMATICROTATION_PROPERTIES\
30 _AST_DEF_ROTATION_PROPERTIES\
31 const Vector3d& rotationRate() const { return angvel_; }\
32 Vector3d& rotationRate() { return angvel_; }\
33 const Vector3d& getRotationRate() const { return angvel_; }\
34 Vector3d& getRotationRate() { return angvel_; }\
35 void setRotationRate(const Vector3d& angvel) { angvel_ = angvel; }\
36 KinematicRotation& kinematicRotation() { return reinterpret_cast<KinematicRotation&>(rotation_); }\
37 const KinematicRotation& kinematicRotation() const { return reinterpret_cast<const KinematicRotation&>(rotation_); }\
38 KinematicRotation& getKinematicRotation() { return kinematicRotation(); }\
39 const KinematicRotation& getKinematicRotation() const { return kinematicRotation(); }\
40 void setKinematicRotation(const KinematicRotation& rot) { kinematicRotation() = rot; }\
41
42
50{
51public:
53 static KinematicRotation Identity();
54
56 KinematicRotation() = default;
57
61 KinematicRotation(const Rotation& rot, const Vector3d& angvel);
62
63
67 KinematicRotation(const Matrix3d& mat, const Vector3d& angvel);
68
69 _AST_DEF_KINEMATICROTATION_PROPERTIES
70
74 KinematicRotation& compose(const KinematicRotation& next);
75
80 KinematicRotation composed(const KinematicRotation& next) const;
81
86 KinematicRotation operator*(const KinematicRotation& next) const;
87
92 KinematicRotation& operator*=(const KinematicRotation& next);
93
96 void getInverse(KinematicRotation& inversed) const;
97
100 KinematicRotation inverse() const;
101
107 void transformVectorVelocity(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
108
112 CartState transformCartState(const CartState& state) const;
113
120 void transformVectorVelocityInv(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
121protected:
122 Rotation rotation_{};
123 Vector3d angvel_{};
124};
125
126A_ALWAYS_INLINE KinematicRotation KinematicRotation::Identity()
127{
128 return KinematicRotation(Matrix3d::Identity(), Vector3d::Zero());
129}
130
131A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Matrix3d &mat, const Vector3d &angvel)
132 : rotation_(mat)
133 , angvel_(angvel)
134{
135}
136
137A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Rotation &rot, const Vector3d &angvel)
138 : rotation_(rot)
139 , angvel_(angvel)
140{
141}
142
144{
145 angvel_ = this->angvel_ + next.angvel_ * this->matrix();
146 matrix() = next.matrix() * this->matrix();
147 return *this;
148}
149
151{
152 return KinematicRotation(next.matrix() * this->matrix(), this->angvel_ + next.angvel_ * this->matrix());
153}
154
156{
157 return composed(next);
158}
159
161{
162 return compose(next);
163}
164
165A_ALWAYS_INLINE void KinematicRotation::getInverse(KinematicRotation &inversed) const
166{
167 inversed.setRotationRate(-(this->matrix()*angvel_));
168 this->rotation().getInverse(inversed.rotation());
169}
170
172{
173 KinematicRotation retval;
174 this->getInverse(retval);
175 return retval;
176}
177
178A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d& vectorOut, Vector3d &velocityOut) const
179{
180 // 注意:这里要先计算velocityOut,防止vector和vectorOut地址相同时值被覆盖
181 velocityOut = this->matrix() * (velocity - this->angvel_.cross(vector));
182 vectorOut = this->matrix() * vector;
183}
184
186{
187 CartState stateOut;
188 this->transformVectorVelocity(state.pos(), state.vel(), stateOut.pos(), stateOut.vel());
189 return stateOut;
190}
191
192A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
193{
194 vectorOut = vector * this->matrix();
195 velocityOut = velocity* this->matrix() + this->angvel_.cross(vectorOut);
196}
197
198AST_NAMESPACE_END
直角坐标
定义 OrbitElement.hpp:53
const Vector3d & pos() const
获取位置
定义 OrbitElement.hpp:66
const Vector3d & vel() const
获取速度
定义 OrbitElement.hpp:73
运动学坐标系旋转
定义 KinematicRotation.hpp:50
KinematicRotation composed(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:150
CartState transformCartState(const CartState &state) const
变换状态向量和速度
定义 KinematicRotation.hpp:185
Vector3d angvel_
角速度
定义 KinematicRotation.hpp:123
void transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换位置和速度(逆变换)
定义 KinematicRotation.hpp:192
KinematicRotation()=default
运动学旋转默认构造函数
void transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换向量和速度
定义 KinematicRotation.hpp:178
KinematicRotation & operator*=(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:160
void getInverse(KinematicRotation &inversed) const
获取逆旋转
定义 KinematicRotation.hpp:165
KinematicRotation operator*(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:155
_AST_DEF_KINEMATICROTATION_PROPERTIES KinematicRotation & compose(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:143
KinematicRotation inverse() const
获取逆旋转
定义 KinematicRotation.hpp:171
坐标系旋转类
定义 Rotation.hpp:55