🛰️航天仿真算法库 SpaceAST 0.3.1
载入中...
搜索中...
未找到
Quaternion.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstMath/MathOperator.hpp"
25#include "AstMath/Matrix.hpp"
26#include "AstMath/AttitudeConvertProto.hpp"
27#include <string>
28
29AST_NAMESPACE_BEGIN
30
31class Quaternion;
32
42Quaternion aQuatProduct(const Quaternion& q1, const Quaternion& q2);
43
44
48{
49public:
51 static Quaternion Identity(){return Quaternion{1,0,0,0};}
52
56 static Quaternion FromRotationMatrix(const Matrix3d& mtx){return aMatrixToQuat(mtx);}
57
60 double norm() const{return _ASTMATH norm(*this); }
62 void normalize(){ _ASTMATH normalize(*this); }
65 Quaternion normalized() const{return _ASTMATH normalized(*this);}
67 void setIdentity(){ *this = {1,0,0,0};}
69 double qs() const{return qs_;}
71 double qx() const{return qx_;}
73 double qy() const{return qy_;}
75 double qz() const{return qz_;}
77 double& qs(){return qs_;}
79 double& qx(){return qx_;}
81 double& qy(){return qy_;}
83 double& qz(){return qz_;}
85 const Vector3d& vec() const {return (const Vector3d&)qx_;}
86
87public:
88 // 兼容Eigen接口
89
91 double x() const{return qx_;}
93 double y() const{return qy_;}
95 double z() const{return qz_;}
97 double w() const{return qs_;}
98
100 double& x(){return qx_;}
102 double& y(){return qy_;}
104 double& z(){return qz_;}
106 double& w(){return qs_;}
107
108 A_DEF_POD_ITERABLE(double)
109public:
112 double squaredNorm() const{return _ASTMATH squaredNorm(*this);}
113
114
117 Quaternion conjugate() const{return {qs(), -qx(), -qy(), -qz()};}
118
121 Quaternion inverse() const{return conjugate() / squaredNorm();}
122
123
127 Quaternion operator*(const Quaternion& q2) const{return aQuatProduct(*this, q2);}
128
132 Quaternion& operator*=(const Quaternion& q2){return *this = aQuatProduct(*this, q2);}
133
134
138 Quaternion operator*(double val) const{ Quaternion v{*this}; v *= val; return v;}
139
143 Quaternion& operator*=(double val){qs() *= val; qx() *= val; qy() *= val; qz() *= val; return *this;}
144
145
149 Quaternion operator/(double val) const{ Quaternion v{*this}; v /= val; return v;}
150
154 Quaternion& operator/=(double val){qs() /= val; qx() /= val; qy() /= val; qz() /= val; return *this;}
155public:
159 Matrix3d mtx;
160 aQuatToMatrix(*this, mtx);
161 return mtx;
162 }
163public:
164 AST_MATH_API
165 std::string toString() const;
166public:
167 // 设置为public仅为实现聚合初始化,不要直接访问成员变量
168 double qs_;
169 double qx_;
170 double qy_;
171 double qz_;
172};
173
174
179inline Quaternion aQuatProduct(const Quaternion& q1, const Quaternion& q2)
180{
181 return {
182 q1.qs() * q2.qs() - q1.qx() * q2.qx() - q1.qy() * q2.qy() - q1.qz() * q2.qz(),
183 q1.qs() * q2.qx() + q1.qx() * q2.qs() + q1.qy() * q2.qz() - q1.qz() * q2.qy(),
184 q1.qs() * q2.qy() - q1.qx() * q2.qz() + q1.qy() * q2.qs() + q1.qz() * q2.qx(),
185 q1.qs() * q2.qz() + q1.qx() * q2.qy() - q1.qy() * q2.qx() + q1.qz() * q2.qs(),
186 };
187}
188
189
190
193AST_NAMESPACE_END
194
196
197
198AST_DECL_TYPE_ALIAS(Quaternion)
四元数
定义 Quaternion.hpp:48
double & x()
四元数的虚部x
定义 Quaternion.hpp:100
double z() const
四元数的虚部z
定义 Quaternion.hpp:95
double & qz()
四元数的虚部z
定义 Quaternion.hpp:83
double & z()
四元数的虚部z
定义 Quaternion.hpp:104
Quaternion & operator/=(double val)
四元数标量除法赋值
定义 Quaternion.hpp:154
double & w()
四元数的实部
定义 Quaternion.hpp:106
Quaternion operator/(double val) const
四元数标量除法
定义 Quaternion.hpp:149
Quaternion & operator*=(double val)
四元数标量乘积赋值
定义 Quaternion.hpp:143
Quaternion conjugate() const
计算四元数的共轭
定义 Quaternion.hpp:117
double & qx()
四元数的虚部x
定义 Quaternion.hpp:79
Quaternion inverse() const
计算四元数的逆
定义 Quaternion.hpp:121
double & qy()
四元数的虚部y
定义 Quaternion.hpp:81
double qz() const
四元数的虚部z
定义 Quaternion.hpp:75
void normalize()
归一化四元数
定义 Quaternion.hpp:62
void setIdentity()
设置四元数为单位四元数
定义 Quaternion.hpp:67
double & qs()
四元数的实部
定义 Quaternion.hpp:77
Matrix3d toRotationMatrix() const
四元数转旋转矩阵
定义 Quaternion.hpp:158
Quaternion operator*(double val) const
四元数标量乘积
定义 Quaternion.hpp:138
Quaternion operator*(const Quaternion &q2) const
四元数乘积
定义 Quaternion.hpp:127
const Vector3d & vec() const
四元数的虚部向量
定义 Quaternion.hpp:85
static Quaternion FromRotationMatrix(const Matrix3d &mtx)
从旋转矩阵创建四元数
定义 Quaternion.hpp:56
double qs() const
四元数的实部
定义 Quaternion.hpp:69
double squaredNorm() const
计算四元数的平方范数
定义 Quaternion.hpp:112
double norm() const
计算四元数的范数
定义 Quaternion.hpp:60
double & y()
四元数的虚部y
定义 Quaternion.hpp:102
double y() const
四元数的虚部y
定义 Quaternion.hpp:93
Quaternion & operator*=(const Quaternion &q2)
四元数乘积赋值
定义 Quaternion.hpp:132
double x() const
四元数的虚部x
定义 Quaternion.hpp:91
static Quaternion Identity()
创建单位四元数
定义 Quaternion.hpp:51
double w() const
四元数的实部
定义 Quaternion.hpp:97
double qy() const
四元数的虚部y
定义 Quaternion.hpp:73
double qx() const
四元数的虚部x
定义 Quaternion.hpp:71
Quaternion normalized() const
归一化四元数
定义 Quaternion.hpp:65
void aQuatToMatrix(const Quaternion &quat, Matrix3d &m)
四元数转矩阵
定义 AttitudeConvert.cpp:90
Quaternion aQuatProduct(const Quaternion &q1, const Quaternion &q2)
四元数乘积
定义 Quaternion.hpp:179
void aMatrixToQuat(const Matrix3d &mtx, Quaternion &quat)
矩阵转四元数
定义 AttitudeConvert.cpp:115
double squaredNorm(const double *vec, size_t N)
squaredNorm
定义 MathOperator.hpp:245