🛰️航天仿真算法库 SpaceAST 0.0.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
28AST_NAMESPACE_BEGIN
29
30class Quaternion;
31
41Quaternion aQuatProduct(const Quaternion& q1, const Quaternion& q2);
42
43
47{
48public:
50 static Quaternion Identity(){return Quaternion{1,0,0,0};}
51
55 static Quaternion FromRotationMatrix(const Matrix3d& mtx){return aMatrixToQuat(mtx);}
56
59 double norm() const{return _ASTMATH norm(*this); }
61 void normalize(){ _ASTMATH normalize(*this); }
64 Quaternion normalized() const{return _ASTMATH normalized(*this);}
66 void setIdentity(){ *this = {1,0,0,0};}
68 double qs() const{return m_qs;}
70 double qx() const{return m_qx;}
72 double qy() const{return m_qy;}
74 double qz() const{return m_qz;}
76 double& qs(){return m_qs;}
78 double& qx(){return m_qx;}
80 double& qy(){return m_qy;}
82 double& qz(){return m_qz;}
84 const Vector3d& vec() const {return (const Vector3d&)m_qx;}
85
86public:
87 // 兼容Eigen接口
88
90 double x() const{return m_qx;}
92 double y() const{return m_qy;}
94 double z() const{return m_qz;}
96 double w() const{return m_qs;}
97
99 double& x(){return m_qx;}
101 double& y(){return m_qy;}
103 double& z(){return m_qz;}
105 double& w(){return m_qs;}
106
107 A_DEF_POD_ITERABLE(double)
108public:
111 double squaredNorm() const{return _ASTMATH squaredNorm(*this);}
112
113
116 Quaternion conjugate() const{return {qs(), -qx(), -qy(), -qz()};}
117
120 Quaternion inverse() const{return conjugate() / squaredNorm();}
121
122
126 Quaternion operator*(const Quaternion& q2) const{return aQuatProduct(*this, q2);}
127
131 Quaternion& operator*=(const Quaternion& q2){return *this = aQuatProduct(*this, q2);}
132
133
137 Quaternion operator*(double val) const{ Quaternion v{*this}; v *= val; return v;}
138
142 Quaternion& operator*=(double val){qs() *= val; qx() *= val; qy() *= val; qz() *= val; return *this;}
143
144
148 Quaternion operator/(double val) const{ Quaternion v{*this}; v /= val; return v;}
149
153 Quaternion& operator/=(double val){qs() /= val; qx() /= val; qy() /= val; qz() /= val; return *this;}
154public:
158 Matrix3d mtx;
159 aQuatToMatrix(*this, mtx);
160 return mtx;
161 }
162
163public:
164 // 设置为public仅为实现聚合初始化,不要直接访问成员变量
165 double m_qs;
166 double m_qx;
167 double m_qy;
168 double m_qz;
169};
170
171
176inline Quaternion aQuatProduct(const Quaternion& q1, const Quaternion& q2)
177{
178 return {
179 q1.qs() * q2.qs() - q1.qx() * q2.qx() - q1.qy() * q2.qy() - q1.qz() * q2.qz(),
180 q1.qs() * q2.qx() + q1.qx() * q2.qs() + q1.qy() * q2.qz() - q1.qz() * q2.qy(),
181 q1.qs() * q2.qy() - q1.qx() * q2.qz() + q1.qy() * q2.qs() + q1.qz() * q2.qx(),
182 q1.qs() * q2.qz() + q1.qx() * q2.qy() - q1.qy() * q2.qx() + q1.qz() * q2.qs(),
183 };
184}
185
186
187
190AST_NAMESPACE_END
191
193
194
195AST_DECL_TYPE_ALIAS(Quaternion)
四元数
定义 Quaternion.hpp:47
double & x()
四元数的虚部x
定义 Quaternion.hpp:99
double z() const
四元数的虚部z
定义 Quaternion.hpp:94
double & qz()
四元数的虚部z
定义 Quaternion.hpp:82
double & z()
四元数的虚部z
定义 Quaternion.hpp:103
Quaternion & operator/=(double val)
四元数标量除法赋值
定义 Quaternion.hpp:153
double & w()
四元数的实部
定义 Quaternion.hpp:105
Quaternion operator/(double val) const
四元数标量除法
定义 Quaternion.hpp:148
Quaternion & operator*=(double val)
四元数标量乘积赋值
定义 Quaternion.hpp:142
Quaternion conjugate() const
计算四元数的共轭
定义 Quaternion.hpp:116
double & qx()
四元数的虚部x
定义 Quaternion.hpp:78
Quaternion inverse() const
计算四元数的逆
定义 Quaternion.hpp:120
double & qy()
四元数的虚部y
定义 Quaternion.hpp:80
double qz() const
四元数的虚部z
定义 Quaternion.hpp:74
void normalize()
归一化四元数
定义 Quaternion.hpp:61
void setIdentity()
设置四元数为单位四元数
定义 Quaternion.hpp:66
double & qs()
四元数的实部
定义 Quaternion.hpp:76
Matrix3d toRotationMatrix() const
四元数转旋转矩阵
定义 Quaternion.hpp:157
Quaternion operator*(double val) const
四元数标量乘积
定义 Quaternion.hpp:137
Quaternion operator*(const Quaternion &q2) const
四元数乘积
定义 Quaternion.hpp:126
const Vector3d & vec() const
四元数的虚部向量
定义 Quaternion.hpp:84
static Quaternion FromRotationMatrix(const Matrix3d &mtx)
从旋转矩阵创建四元数
定义 Quaternion.hpp:55
double qs() const
四元数的实部
定义 Quaternion.hpp:68
double squaredNorm() const
计算四元数的平方范数
定义 Quaternion.hpp:111
double norm() const
计算四元数的范数
定义 Quaternion.hpp:59
double & y()
四元数的虚部y
定义 Quaternion.hpp:101
double y() const
四元数的虚部y
定义 Quaternion.hpp:92
Quaternion & operator*=(const Quaternion &q2)
四元数乘积赋值
定义 Quaternion.hpp:131
double x() const
四元数的虚部x
定义 Quaternion.hpp:90
static Quaternion Identity()
创建单位四元数
定义 Quaternion.hpp:50
double w() const
四元数的实部
定义 Quaternion.hpp:96
double qy() const
四元数的虚部y
定义 Quaternion.hpp:72
double qx() const
四元数的虚部x
定义 Quaternion.hpp:70
Quaternion normalized() const
归一化四元数
定义 Quaternion.hpp:64
void aQuatToMatrix(const Quaternion &quat, Matrix3d &m)
四元数转矩阵
定义 AttitudeConvert.cpp:90
Quaternion aQuatProduct(const Quaternion &q1, const Quaternion &q2)
四元数乘积
定义 Quaternion.hpp:176
void aMatrixToQuat(const Matrix3d &mtx, Quaternion &quat)
矩阵转四元数
定义 AttitudeConvert.cpp:115
double squaredNorm(const double *vec, size_t N)
squaredNorm
定义 MathOperator.hpp:245