VR-Vantage 1.4.1 API Class Documentation
DtQuat.h
Go to the documentation of this file.
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_


Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)