source: flair-dev/trunk/include/FlairCore/Quaternion.h@ 28

Last change on this file since 28 was 13, checked in by Bayard Gildas, 9 years ago

formatting script + include reformatted

File size: 3.6 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5/*!
6 * \file Quaternion.h
7 * \brief Class defining a quaternion
8 * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
9 * \date 2016/02/03
10 * \version 4.0
11 */
12#ifndef QUATERNION_H
13#define QUATERNION_H
14
15namespace flair {
16namespace core {
17class Euler;
18class Vector3D;
19class RotationMatrix;
20
21/*! \class Quaternion
22*
23* \brief Class defining a quaternion
24*/
25class Quaternion {
26public:
27 /*!
28 * \brief Constructor
29 *
30 * Construct a quaternion using specified values.
31 *
32 * \param q0, scalar part
33 * \param q1
34 * \param q2
35 * \param q3
36 */
37 Quaternion(float q0 = 1, float q1 = 0, float q2 = 0, float q3 = 0);
38
39 /*!
40 * \brief Destructor
41 *
42 */
43 ~Quaternion();
44
45 /*!
46 * \brief Norm
47 *
48 * \return norm
49 */
50 float GetNorm(void) const;
51
52 /*!
53 * \brief Normalize
54 */
55 void Normalize(void);
56
57 /*!
58 * \brief Logarithm
59 *
60 * This method also Normalize the quaternion.
61 *
62 * \param logarithm output logarithm
63 */
64 void GetLogarithm(Vector3D &logarithm);
65
66 /*!
67 * \brief Logarithm
68 *
69 * This method also Normalize the quaternion.
70 *
71 * \return output logarithm
72 */
73 Vector3D GetLogarithm(void);
74
75 /*!
76 * \brief Conjugate
77 */
78 void Conjugate(void);
79
80 /*!
81 * \brief Conjugate
82 *
83 * \return Conjugate
84 */
85 Quaternion GetConjugate(void);
86
87 /*!
88 * \brief Derivative
89 *
90 * \param w angular speed
91 *
92 * \return derivative
93 */
94 Quaternion GetDerivative(const Vector3D &angularSpeed) const;
95
96 /*!
97 * \brief Derivate
98 *
99 * \param w rotationonal speed
100 */
101 void Derivate(const Vector3D &angularSpeed);
102
103 /*!
104 * \brief Convert to euler angles
105 *
106 * \param euler output euler angles
107 */
108 void ToEuler(Euler &euler) const;
109
110 /*!
111 * \brief Convert to euler angles
112 *
113 * \return euler angles
114 */
115 Euler ToEuler(void) const;
116
117 /*!
118 * \brief Convert to rotation matrix
119 *
120 * \param m output matrix
121 */
122 void ToRotationMatrix(RotationMatrix &matrix) const;
123
124 /*!
125 * \brief q0
126 */
127 float q0;
128
129 /*!
130 * \brief q1
131 */
132 float q1;
133
134 /*!
135 * \brief q2
136 */
137 float q2;
138
139 /*!
140 * \brief q3
141 */
142 float q3;
143
144 Quaternion &operator+=(const Quaternion &quaternion);
145 Quaternion &operator-=(const Quaternion &quaternion);
146 Quaternion &operator=(const Quaternion &quaternion);
147};
148
149/*! Add
150*
151* \brief Add
152*
153* \param quaterniontA quaternion
154* \param quaterniontB quaternion
155*
156* \return quaterniontA+quaterniontB
157*/
158Quaternion operator+(Quaternion const &quaterniontA,
159 Quaternion const &quaterniontB);
160
161/*! Substract
162*
163* \brief Substract
164*
165* \param quaterniontA quaternion
166* \param quaterniontB quaternion
167*
168* \return quaterniontA-quaterniontB
169*/
170Quaternion operator-(Quaternion const &quaternionA,
171 Quaternion const &quaterniontB);
172
173/*! Minus
174*
175* \brief Minus
176*
177* \param quaternion quaternion
178*
179* \return -quaternion
180*/
181Quaternion operator-(const Quaternion &quaternion);
182
183/*! Multiply
184*
185* \brief Multiply
186*
187* \param quaterniontA quaternion
188* \param quaterniontB quaternion
189*
190* \return quaterniontA*quaterniontB
191*/
192Quaternion operator*(Quaternion const &quaternionA,
193 Quaternion const &quaterniontB);
194
195/*! Multiply
196*
197* \brief Multiply
198*
199* \param coeff coefficient
200* \param quat quaternion
201*
202* \return coeff*quat
203*/
204Quaternion operator*(float coeff, Quaternion const &quaternion);
205
206/*! Multiply
207*
208* \brief Multiply
209*
210* \param quat quaternion
211* \param coeff coefficient
212*
213* \return coeff*quat
214*/
215Quaternion operator*(Quaternion const &quaternion, float coeff);
216
217} // end namespace core
218} // end namespace flair
219
220#endif // QUATERNION_H
Note: See TracBrowser for help on using the repository browser.