![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: $ $Revision: $ $State: $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvUtil/vrvUtil.h> 00015 00016 namespace makVrv 00017 { 00020 class DtQuat 00021 { 00022 public: 00023 00024 00025 DtVector xyz; 00026 double w; 00027 00029 inline DtQuat(); 00030 inline DtQuat(double x, double y, double z, double w); 00031 inline DtQuat(const DtVector& i, double real); 00032 00034 inline DtQuat(double theta_z, double theta_y, double theta_x); 00035 00037 inline DtQuat(const DtVector& angles); 00038 00040 inline void set(double x,double y,double z,double w); 00041 00043 inline DtQuat& operator=(const DtQuat& q); 00044 00045 inline DtQuat operator+(const DtQuat& q) const; 00046 inline DtQuat operator-(const DtQuat& q) const; 00047 inline DtQuat operator*(const DtQuat& q) const; 00048 inline DtQuat operator/(const DtQuat& q) const; 00049 inline DtQuat operator*(double scale) const; 00050 inline DtQuat operator/(double scale) const; 00051 inline DtQuat operator-() const; 00052 inline const DtQuat& operator+=(const DtQuat& q); 00053 inline const DtQuat& operator-=(const DtQuat& q); 00054 inline const DtQuat& operator*=(const DtQuat& q); 00055 inline const DtQuat& operator*= (double scale); 00056 inline const DtQuat& operator/=(double scale); 00057 00059 inline double length() const; 00060 00062 inline double length_squared() const; 00063 00065 inline void normalize(); 00066 00068 inline DtQuat normalized() const; 00069 00071 inline void conjugate(); 00072 00074 inline void invert(); 00075 00077 inline DtQuat log() const; 00078 00080 inline DtQuat exp() const; 00081 00083 inline void getMatrix4(double matrix[16]) const; 00084 00087 inline void getMatrix3(double matrix[9]) const; 00088 00090 static inline double dot(const DtQuat& q1, const DtQuat& q2); 00091 00093 static inline DtQuat lerp(const DtQuat& q1, const DtQuat& q2, double t); 00094 00096 static inline DtQuat slerp(const DtQuat& q1, const DtQuat& q2, double t); 00097 00099 static inline DtQuat slerpNoInvert(const DtQuat& q1, const DtQuat& q2, double t); 00100 00102 static inline DtQuat squad(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t); 00103 00105 static inline DtQuat bezier(const DtQuat& q1,const DtQuat& q2,const DtQuat& a,const DtQuat& b,double t); 00106 00108 static inline DtQuat spline(const DtQuat& qnm1,const DtQuat& qn,const DtQuat& qnp1); 00109 00111 static inline DtQuat from_axis_angle(const DtVector& axis, double angle); 00112 00114 inline void to_axis_angle(DtVector& axis, double& angle) const; 00115 00117 inline DtVector rotate(const DtVector& v) const; 00118 00120 inline DtVector euler_angles() const; 00121 }; 00122 00123 00124 } 00125 00126 #define DtQuat_INL_ 00127 #include <vrvUtil/DtQuat.inl> 00128 #undef DtQuat_INL_