quaternion.hpp
Go to the documentation of this file.
1 /*
2 ** TP CPE Lyon
3 ** Copyright (C) 2014 Damien Rohmer & David Odin
4 **
5 ** This program is free software: you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation, either version 3 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #pragma once
20 
21 #ifndef QUATERNION_HPP
22 #define QUATERNION_HPP
23 
24 #include "vec4.hpp"
25 
26 namespace cpe
27 {
28 class matrix3;
29 
31 class quaternion : public vec4
32 {
33 public:
34  // ********************************************* //
35  // ********************************************* //
36  // CONSTRUCTORS
37  // ********************************************* //
38  // ********************************************* //
39 
41  quaternion();
43  quaternion(const vec3& axis,float angle);
45  quaternion(const vec4& v);
47  quaternion(float x,float y,float z,float w);
48 
49 
50  // ********************************************* //
51  // ********************************************* //
52  // GET
53  // ********************************************* //
54  // ********************************************* //
55 
57  vec3 axis() const;
59  float angle() const;
60 
61  // ********************************************* //
62  // ********************************************* //
63  // Math
64  // ********************************************* //
65  // ********************************************* //
66 
70  matrix3 matrix() const;
71 
73  quaternion conjugated() const;
74 
80  static quaternion slerp(const quaternion& q0,const quaternion& q1,const float alpha);
81 
83  vec3 rotate(const vec3& vec) const;
84 
85 
86  // ********************************************* //
87  // ********************************************* //
88  // Operators
89  // ********************************************* //
90  // ********************************************* //
91 
93  quaternion& operator*=(const quaternion& q);
95  quaternion& operator*=(float s);
97  quaternion& operator+=(const quaternion& q);
99  quaternion& operator-=(const quaternion& q);
101  quaternion& operator/=(float s);
102 
104  quaternion operator*(const quaternion& q) const;
106  quaternion operator*(const vec3& v) const;
108  quaternion operator*(float s) const;
110  quaternion operator+(const quaternion& q) const;
112  quaternion operator-(const quaternion& q) const;
114  quaternion operator/(float s) const;
115 
117  quaternion operator-() const;
118 
119 
120 
121 
122 
123 
124 private:
125 
126 };
127 
129 quaternion operator*(float s,const quaternion& q);
130 
131 
132 
133 
134 
135 }
136 
137 #endif
float w() const
get w coordinate
Definition: vec4.cpp:66
vec3 rotate(const vec3 &vec) const
apply a rotation (encoded by the quaternion) to the vector/point 3D
Definition: quaternion.cpp:123
quaternion operator*(const quaternion &q) const
multiplication by other quaternion
Definition: quaternion.cpp:191
quaternion & operator-=(const quaternion &q)
internal substraction with other quaternion
Definition: quaternion.cpp:170
quaternion & operator/=(float s)
internal division by a scalar
Definition: quaternion.cpp:178
float x() const
get x coordinate
Definition: vec4.cpp:37
float angle() const
get the angle corresponding to the quaternion
Definition: quaternion.cpp:56
quaternion operator-() const
unary negation
Definition: quaternion.cpp:233
Matrix 3x3.
Definition: matrix3.hpp:36
quaternion operator+(const quaternion &q) const
addition with other quaternionn
Definition: quaternion.cpp:214
float y() const
get y coordinate
Definition: vec4.cpp:47
Quaternion class.
Definition: quaternion.hpp:31
quaternion operator/(float s) const
division by a scalar
Definition: quaternion.cpp:226
quaternion & operator+=(const quaternion &q)
internal addition with other quaternion
Definition: quaternion.cpp:162
matrix1x4 operator*(float s, const matrix1x4 &m)
multiply by a scalar operator
Definition: matrix1x4.cpp:93
quaternion conjugated() const
get the conjugate of the current quaterion
Definition: quaternion.cpp:78
Vectors/Points 3D.
Definition: vec3.hpp:36
float z() const
get z coordinate
Definition: vec4.cpp:57
vec3 axis() const
get the unit axis corresponding to the quaternion
Definition: quaternion.cpp:52
quaternion & operator*=(const quaternion &q)
internal multiplication by other quaternion
Definition: quaternion.cpp:141
static quaternion slerp(const quaternion &q0, const quaternion &q1, const float alpha)
Spherical Linear Interpolation SLERP.
Definition: quaternion.cpp:83
matrix3 matrix() const
compute the rotation matrix associated to the current quaternion
Definition: quaternion.cpp:61
Vectors/Points 4D.
Definition: vec4.hpp:36
quaternion()
default constructor
Definition: quaternion.cpp:29