VR-Vantage 2.3 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 /******************************************************************************
6 ** $RCSfile: $ $Revision: $ $State: $
7 ******************************************************************************/
8 
12 
13 #pragma once
14 #include <vrvUtil/vrvUtil.h>
15 
16 #include <matrix/vlVector.h>
17 
18 namespace makVrv
19 {
22  class DtQuat
23  {
24  public:
25 
26 
27  DtVector xyz;
28  double w;
29 
31  inline DtQuat();
32  inline DtQuat(double x, double y, double z, double w);
33  inline DtQuat(const DtVector& i, double real);
34 
36  inline DtQuat(double theta_z, double theta_y, double theta_x);
37 
39  inline DtQuat(const DtVector& angles);
40 
42  inline void set(double x,double y,double z,double w);
43 
45  inline DtQuat& operator=(const DtQuat& q);
46 
47  inline DtQuat operator+(const DtQuat& q) const;
48  inline DtQuat operator-(const DtQuat& q) const;
49  inline DtQuat operator*(const DtQuat& q) const;
50  inline DtQuat operator/(const DtQuat& q) const;
51  inline DtQuat operator*(double scale) const;
52  inline DtQuat operator/(double scale) const;
53  inline DtQuat operator-() const;
54  inline const DtQuat& operator+=(const DtQuat& q);
55  inline const DtQuat& operator-=(const DtQuat& q);
56  inline const DtQuat& operator*=(const DtQuat& q);
57  inline const DtQuat& operator*= (double scale);
58  inline const DtQuat& operator/=(double scale);
59 
61  inline double length() const;
62 
64  inline double length_squared() const;
65 
67  inline void normalize();
68 
70  inline DtQuat normalized() const;
71 
73  inline void conjugate();
74 
76  inline void invert();
77 
79  inline DtQuat log() const;
80 
82  inline DtQuat exp() const;
83 
85  inline void getMatrix4(double matrix[16]) const;
86 
89  inline void getMatrix3(double matrix[9]) const;
90 
92  static inline double dot(const DtQuat& q1, const DtQuat& q2);
93 
95  static inline DtQuat lerp(const DtQuat& q1, const DtQuat& q2, double t);
96 
98  static inline DtQuat slerp(const DtQuat& q1, const DtQuat& q2, double t);
99 
101  static inline DtQuat slerpNoInvert(const DtQuat& q1, const DtQuat& q2, double t);
102 
104  static inline DtQuat squad(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t);
105 
107  static inline DtQuat bezier(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t);
108 
110  static inline DtQuat spline(const DtQuat& qnm1,const DtQuat& qn,const DtQuat& qnp1);
111 
113  static inline DtQuat from_axis_angle(const DtVector& axis, double angle);
114 
116  inline void to_axis_angle(DtVector& axis, double& angle) const;
117 
119  inline DtVector rotate(const DtVector& v) const;
120 
122  inline DtVector euler_angles() const;
123  };
124 
125 
126 }
127 
128 #define DtQuat_INL_
129 #include <vrvUtil/DtQuat.inl>
130 #undef DtQuat_INL_


Copyright © 2005-2018 VT MAK. All Rights Reserved (www.mak.com)