VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtQuat.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2010 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvUtil/vrvUtil.h>
12 
13 #include <matrix/vlVector.h>
14 
15 namespace makVrv
16 {
19  class DtQuat
20  {
21  public:
22 
23 
25  double w;
26 
28  inline DtQuat();
29  inline DtQuat(double x, double y, double z, double w);
30  inline DtQuat(const DtVector& i, double real);
31 
33  inline DtQuat(double theta_z, double theta_y, double theta_x);
34 
36  inline DtQuat(const DtVector& angles);
37 
39  inline void set(double x,double y,double z,double w);
40 
42  inline DtQuat& operator=(const DtQuat& q);
43 
44  inline DtQuat operator+(const DtQuat& q) const;
45  inline DtQuat operator-(const DtQuat& q) const;
46  inline DtQuat operator*(const DtQuat& q) const;
47  inline DtQuat operator/(const DtQuat& q) const;
48  inline DtQuat operator*(double scale) const;
49  inline DtQuat operator/(double scale) const;
50  inline DtQuat operator-() const;
51  inline const DtQuat& operator+=(const DtQuat& q);
52  inline const DtQuat& operator-=(const DtQuat& q);
53  inline const DtQuat& operator*=(const DtQuat& q);
54  inline const DtQuat& operator*= (double scale);
55  inline const DtQuat& operator/=(double scale);
56 
58  inline double length() const;
59 
61  inline double length_squared() const;
62 
64  inline void normalize();
65 
67  inline DtQuat normalized() const;
68 
70  inline void conjugate();
71 
73  inline void invert();
74 
76  inline DtQuat log() const;
77 
79  inline DtQuat exp() const;
80 
82  inline void getMatrix4(double matrix[16]) const;
83 
86  inline void getMatrix3(double matrix[9]) const;
87 
89  static inline double dot(const DtQuat& q1, const DtQuat& q2);
90 
92  static inline DtQuat lerp(const DtQuat& q1, const DtQuat& q2, double t);
93 
95  static inline DtQuat slerp(const DtQuat& q1, const DtQuat& q2, double t);
96 
98  static inline DtQuat slerpNoInvert(const DtQuat& q1, const DtQuat& q2, double t);
99 
101  static inline DtQuat squad(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t);
102 
104  static inline DtQuat bezier(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t);
105 
107  static inline DtQuat spline(const DtQuat& qnm1,const DtQuat& qn,const DtQuat& qnp1);
108 
110  static inline DtQuat from_axis_angle(const DtVector& axis, double angle);
111 
113  inline void to_axis_angle(DtVector& axis, double& angle) const;
114 
116  inline DtVector rotate(const DtVector& v) const;
117 
119  inline DtVector euler_angles() const;
120  };
121 
122 
123 }
124 
125 #define DtQuat_INL_
126 #include <vrvUtil/DtQuat.inl>
127 #undef DtQuat_INL_
const DtQuat & operator*=(const DtQuat &q)
DtQuat operator/(const DtQuat &q) const
void getMatrix4(double matrix[16]) const
casting to a 4x4 isomorphic matrix for right multiplication with vector
static DtQuat bezier(const DtQuat &q1, const DtQuat &q2, const DtQuat &a, const DtQuat &b, double t)
Shoemake-Bezier interpolation using De Castlejau algorithm.
void invert()
inverts this quaternion
const DtQuat & operator/=(double scale)
const DtQuat & operator-=(const DtQuat &q)
void getMatrix3(double matrix[9]) const
Get a 3x3 rotation matrix.
double length_squared() const
gets the squared length of this quaternion
double length() const
gets the length of this quaternion
DtQuat operator+(const DtQuat &q) const
void conjugate()
computes the conjugate of this quaternion
DtQuat operator*(const DtQuat &q) const
static DtQuat from_axis_angle(const DtVector &axis, double angle)
converts from a normalized axis - angle pair rotation to a quaternion
DtVector xyz
the imaginary components
Definition: DtQuat.h:24
Contains DLL export macros.
static double dot(const DtQuat &q1, const DtQuat &q2)
computes the dot product of 2 quaternions
static DtQuat squad(const DtQuat &q1, const DtQuat &q2, const DtQuat &a, const DtQuat &b, double t)
spherical cubic interpolation
DtQuat exp() const
returns e^quaternion = exp(v*a) = [cos(a),vsin(a)]
DT_DLL_vrfutil double angle(double vec1[3], double vec2[3])
static DtQuat lerp(const DtQuat &q1, const DtQuat &q2, double t)
linear quaternion interpolation
void to_axis_angle(DtVector &axis, double &angle) const
returns the axis and angle of this unit quaternion
const DtQuat & operator+=(const DtQuat &q)
DtVector rotate(const DtVector &v) const
rotates v by this quaternion (quaternion must be unit)
static DtQuat spline(const DtQuat &qnm1, const DtQuat &qn, const DtQuat &qnp1)
Given 3 quaternions, qn-1,qn and qn+1, calculate a control point to be used in spline interpolation...
void set(double x, double y, double z, double w)
Set the quat.
static DtQuat slerpNoInvert(const DtQuat &q1, const DtQuat &q2, double t)
This version of slerp, used by squad, does not check for theta &gt; 90.
double w
the real component
Definition: DtQuat.h:25
DtQuat operator-() const
A utility Quaternion class.
Definition: DtQuat.h:19
DtQuat & operator=(const DtQuat &q)
basic operations
DtQuat normalized() const
returns the normalized version of this quaternion
void normalize()
normalizes this quaternion
static DtQuat slerp(const DtQuat &q1, const DtQuat &q2, double t)
spherical linear interpolation
DtQuat()
constructors
DtQuat log() const
returns the logarithm of a quaternion = v*a where q = [cos(a),v*sin(a)]
DtVector euler_angles() const
returns the euler angles from a rotation quaternion

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)