🛰️航天仿真算法库 SpaceAST 0.0.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
32{
33public:
34 using Rotation::getMatrix;
35 using Rotation::getQuaternion;
36 using Rotation::transformVector;
37 using Rotation::transformVectorInv;
38
40 static KinematicRotation Identity();
41
43 KinematicRotation() = default;
44
48 KinematicRotation(const Rotation& rot, const Vector3d& angvel);
49
50
54 KinematicRotation(const Matrix3d& mat, const Vector3d& angvel);
55
58 const Vector3d& getRotationRate() const { return angvel_; }
59
62 void setRotationRate(const Vector3d& angvel) { angvel_ = angvel; }
63
66 const Rotation& getRotation() const { return *this; }
67 Rotation& getRotation() { return *this; }
68
69
72 void setRotation(const Rotation& rot) { (Rotation&)*this = rot; }
73
77 KinematicRotation& compose(const KinematicRotation& next);
78
83 KinematicRotation composed(const KinematicRotation& next) const;
84
89 KinematicRotation operator*(const KinematicRotation& next) const;
90
95 KinematicRotation& operator*=(const KinematicRotation& next);
96
99 void getInverse(KinematicRotation& inversed) const;
100
103 KinematicRotation inverse() const;
104
110 void transformVectorVelocity(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
111
115 CartState transformCartState(const CartState& state) const;
116
123 void transformVectorVelocityInv(const Vector3d& vector, const Vector3d& velocity, Vector3d& vectorOut, Vector3d& velocityOut) const;
124protected:
125 Vector3d angvel_;
126};
127
128A_ALWAYS_INLINE KinematicRotation KinematicRotation::Identity()
129{
130 return KinematicRotation(Matrix3d::Identity(), Vector3d::Zero());
131}
132
133A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Matrix3d &mat, const Vector3d &angvel)
134 : Rotation(mat)
135 , angvel_(angvel)
136{
137}
138
139A_ALWAYS_INLINE KinematicRotation::KinematicRotation(const Rotation &rot, const Vector3d &angvel)
140 : Rotation(rot)
141 , angvel_(angvel)
142{
143}
144
146{
147 angvel_ = this->angvel_ + next.angvel_ * this->matrix_;
148 matrix_ = next.matrix_ * this->matrix_;
149 return *this;
150}
151
153{
154 return KinematicRotation(next.matrix_ * this->matrix_, this->angvel_ + next.angvel_ * this->matrix_);
155}
156
158{
159 return composed(next);
160}
161
163{
164 return compose(next);
165}
166
167A_ALWAYS_INLINE void KinematicRotation::getInverse(KinematicRotation &inversed) const
168{
169 inversed.setRotationRate(-(this->matrix_*angvel_));
170 this->Rotation::getInverse(inversed);
171}
172
174{
175 KinematicRotation retval;
176 this->getInverse(retval);
177 return retval;
178}
179
180A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d& vectorOut, Vector3d &velocityOut) const
181{
182 // 注意:这里要先计算velocityOut,防止vector和vectorOut地址相同时值被覆盖
183 velocityOut = this->matrix_ * (velocity - this->angvel_.cross(vector));
184 vectorOut = this->matrix_ * vector;
185}
186
188{
189 CartState stateOut;
190 this->transformVectorVelocity(state.pos(), state.vel(), stateOut.pos(), stateOut.vel());
191 return stateOut;
192}
193
194A_ALWAYS_INLINE void KinematicRotation::transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
195{
196 vectorOut = vector * this->matrix_;
197 velocityOut = velocity* this->matrix_ + this->angvel_.cross(vectorOut);
198}
199
200AST_NAMESPACE_END
直角坐标
定义 OrbitElement.hpp:46
const Vector3d & pos() const
获取位置
定义 OrbitElement.hpp:59
const Vector3d & vel() const
获取速度
定义 OrbitElement.hpp:64
运动学坐标系旋转
定义 KinematicRotation.hpp:32
void setRotationRate(const Vector3d &angvel)
设置坐标系旋转角速度
定义 KinematicRotation.hpp:62
KinematicRotation composed(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:152
CartState transformCartState(const CartState &state) const
变换状态向量和速度
定义 KinematicRotation.hpp:187
Vector3d angvel_
角速度
定义 KinematicRotation.hpp:125
const Vector3d & getRotationRate() const
获取坐标系旋转角速度
定义 KinematicRotation.hpp:58
void transformVectorVelocityInv(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换位置和速度(逆变换)
定义 KinematicRotation.hpp:194
KinematicRotation()=default
运动学旋转默认构造函数
const Rotation & getRotation() const
获取坐标系旋转
定义 KinematicRotation.hpp:66
void transformVectorVelocity(const Vector3d &vector, const Vector3d &velocity, Vector3d &vectorOut, Vector3d &velocityOut) const
变换向量和速度
定义 KinematicRotation.hpp:180
KinematicRotation & operator*=(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:162
void getInverse(KinematicRotation &inversed) const
获取逆旋转
定义 KinematicRotation.hpp:167
KinematicRotation operator*(const KinematicRotation &next) const
组合下一个旋转
定义 KinematicRotation.hpp:157
KinematicRotation & compose(const KinematicRotation &next)
组合下一个坐标系旋转
定义 KinematicRotation.hpp:145
void setRotation(const Rotation &rot)
设置坐标系旋转
定义 KinematicRotation.hpp:72
KinematicRotation inverse() const
获取逆旋转
定义 KinematicRotation.hpp:173
坐标系旋转类
定义 Rotation.hpp:39
void getInverse(Rotation &inversed) const
获取逆旋转
定义 Rotation.hpp:290