SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
TaoDeQuaternion.h
1 /* Copyright (c) 2005 Arachi, Inc. and Stanford University. All rights reserved.
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining
4  * a copy of this software and associated documentation files (the
5  * "Software"), to deal in the Software without restriction, including
6  * without limitation the rights to use, copy, modify, merge, publish,
7  * distribute, sublicense, and/or sell copies of the Software, and to
8  * permit persons to whom the Software is furnished to do so, subject
9  * to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included
12  * in all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22 
23 #ifndef _deQuaternion_h
24 #define _deQuaternion_h
25 
36 {
37 public:
39  inline deQuaternion() { identity(); }
40 
42  inline deQuaternion(deFloat qx, deFloat qy, deFloat qz, deFloat qw) { set(qx, qy, qz, qw); }
43 
44  inline deQuaternion(deQuaternion const & orig) {
45  for (size_t ii(0); ii < DE_QUATERNION_SIZE; ++ii)
46  _data[ii] = orig._data[ii];
47  }
48 
50  operator deFloat*() { return _data; }
52  operator const deFloat*() const { return _data; }
54  deFloat& operator[](const deInt i) { return _data[i]; }
56  const deFloat& operator[](const deInt i) const { return _data[i]; }
58  DE_MATH_API void operator=(const deQuaternion& q);
60  DE_MATH_API deInt operator==(const deQuaternion& q);
62  DE_MATH_API void operator+=(const deQuaternion& q);
64  DE_MATH_API void operator-=(const deQuaternion& q);
66  DE_MATH_API void operator*=(const deFloat s);
68  DE_MATH_API void identity();
70  DE_MATH_API void zero();
72  DE_MATH_API deFloat dot(const deQuaternion& q);
74  DE_MATH_API void normalize();
76  DE_MATH_API void get(deVector3& axis, deFloat &angle) const;
78  DE_MATH_API void set(const deMatrix3& m);
80  DE_MATH_API void set(const deInt axis, const deFloat angle);
82  DE_MATH_API void set(const deVector3& axis, const deFloat angle);
84  DE_MATH_API void set(const deFloat x, const deFloat y, const deFloat z, const deFloat w);
86  DE_MATH_API void set(const deFloat* q);
88  DE_MATH_API void eulerZYX(const deVector3& v);
90  DE_MATH_API void negate(const deQuaternion& q);
92  DE_MATH_API void inverse(const deQuaternion& q);
94  DE_MATH_API void add(const deQuaternion& q1, const deQuaternion& q2);
96  DE_MATH_API void subtract(const deQuaternion& q1, const deQuaternion& q2);
98  DE_MATH_API void multiply(const deQuaternion& q1, const deQuaternion& q2);
100  DE_MATH_API void inversedMultiply(const deQuaternion& q1, const deQuaternion& q2);
102  DE_MATH_API void multiplyInversed(const deQuaternion& q1, const deQuaternion& q2);
104  // dq = E omega
105  // dq = 0.5 q_tilde omega
106  DE_MATH_API void velocity(const deQuaternion& q, const deVector3& omega);
108 
112  DE_MATH_API void consistentSign(const deQuaternion& q, const deQuaternion& qg);
114  DE_MATH_API void slerp(const deQuaternion& q, const deQuaternion& qg, const deFloat t, const deFloat addedSpins);
116 
118  DE_MATH_API void lerp(const deQuaternion& q, const deQuaternion& qg, const deFloat t);
119 
120 private:
121  deFloat _data[DE_QUATERNION_SIZE];
122 };
123 
124 #endif // _deQuaternion_h
DE_MATH_API void zero()
this = (0, 0, 0, 0)
Definition: TaoDeQuaternionInl.h:34
3x1 vector classThis is a C++ wrapper class of deVector3f.
Definition: TaoDeVector3.h:32
DE_MATH_API void eulerZYX(const deVector3 &v)
this = [x, y, z] = ZYX Euler angles
Definition: TaoDeQuaternionInl.h:42
deFloat & operator[](const deInt i)
Definition: TaoDeQuaternion.h:54
DE_MATH_API void operator-=(const deQuaternion &q)
this[i] -= q[i]
Definition: TaoDeQuaternionInl.h:31
DE_MATH_API deFloat dot(const deQuaternion &q)
return this^T * q
Definition: TaoDeQuaternionInl.h:27
DE_MATH_API void operator*=(const deFloat s)
this[i] *= s
Definition: TaoDeQuaternionInl.h:32
deQuaternion()
Definition: TaoDeQuaternion.h:39
DE_MATH_API void operator=(const deQuaternion &q)
this = q
Definition: TaoDeQuaternionInl.h:29
DE_MATH_API void inversedMultiply(const deQuaternion &q1, const deQuaternion &q2)
this = q1^-1 * q2
Definition: TaoDeQuaternionInl.h:48
const deFloat & operator[](const deInt i) const
Definition: TaoDeQuaternion.h:56
DE_MATH_API void slerp(const deQuaternion &q, const deQuaternion &qg, const deFloat t, const deFloat addedSpins)
this = SLERP (spherical linear interpolation with extra spins)
Definition: TaoDeQuaternionInl.h:52
DE_MATH_API void lerp(const deQuaternion &q, const deQuaternion &qg, const deFloat t)
this = q + t * (qg - q)
Definition: TaoDeQuaternionInl.h:53
DE_MATH_API void negate(const deQuaternion &q)
this = -q
Definition: TaoDeQuaternionInl.h:43
deQuaternion(deFloat qx, deFloat qy, deFloat qz, deFloat qw)
Definition: TaoDeQuaternion.h:42
Quaternion classThis is a C++ wrapper class of deQuaternionf.
Definition: TaoDeQuaternion.h:35
DE_MATH_API void identity()
this = (0, 0, 0, 1)
Definition: TaoDeQuaternionInl.h:33
DE_MATH_API void normalize()
this[i] *= (1 / sqrt(this^T * this))
Definition: TaoDeQuaternionInl.h:35
DE_MATH_API void multiply(const deQuaternion &q1, const deQuaternion &q2)
this = q1 * q2
Definition: TaoDeQuaternionInl.h:47
DE_MATH_API void subtract(const deQuaternion &q1, const deQuaternion &q2)
this = q1 - q2
Definition: TaoDeQuaternionInl.h:46
3x3 matrix classThis is a C++ wrapper class of deMatrix3f.
Definition: TaoDeMatrix3.h:33
DE_MATH_API void consistentSign(const deQuaternion &q, const deQuaternion &qg)
this = converted qg sign consitent to q
Definition: TaoDeQuaternionInl.h:51
DE_MATH_API deInt operator==(const deQuaternion &q)
Definition: TaoDeQuaternionInl.h:26
DE_MATH_API void add(const deQuaternion &q1, const deQuaternion &q2)
this = q1 + q2
Definition: TaoDeQuaternionInl.h:45
DE_MATH_API void operator+=(const deQuaternion &q)
this[i] += q[i]
Definition: TaoDeQuaternionInl.h:30
DE_MATH_API void multiplyInversed(const deQuaternion &q1, const deQuaternion &q2)
this = q1 * q2^-1
Definition: TaoDeQuaternionInl.h:49
DE_MATH_API void inverse(const deQuaternion &q)
this = q^-1
Definition: TaoDeQuaternionInl.h:44
DE_MATH_API void velocity(const deQuaternion &q, const deVector3 &omega)
this = dq
Definition: TaoDeQuaternionInl.h:50
DE_MATH_API void set(const deMatrix3 &m)
this = m
Definition: TaoDeQuaternionInl.h:37