00001 //============================================================================= 00002 /*! normalize itself */ 00003 inline void quat::normalize() 00004 { 00005 double myabs(abs(*this)); 00006 x /=myabs; 00007 y /=myabs; 00008 z /=myabs; 00009 r /=myabs; 00010 } 00011 00012 /////////////////////////////////////////////////////////////////////////////// 00013 /////////////////////////////////////////////////////////////////////////////// 00014 /////////////////////////////////////////////////////////////////////////////// 00015 00016 //============================================================================= 00017 /*! return abs */ 00018 inline double abs(const quat& q) 00019 { 00020 return std::sqrt(q.x*q.x +q.y*q.y +q.z*q.z +q.r*q.r); 00021 } 00022 00023 //============================================================================= 00024 /*! return norm */ 00025 inline double norm(const quat& q) 00026 { 00027 return q.x*q.x +q.y*q.y +q.z*q.z +q.r*q.r; 00028 } 00029 00030 //============================================================================= 00031 /*! return the normalized quat */ 00032 inline quat normal(const quat& q) 00033 { 00034 double abs_q(abs(q)); 00035 return quat( q.x/abs_q, q.y/abs_q, q.z/abs_q, q.r/abs_q ); 00036 } 00037 00038 /////////////////////////////////////////////////////////////////////////////// 00039 /////////////////////////////////////////////////////////////////////////////// 00040 /////////////////////////////////////////////////////////////////////////////// 00041 00042 //============================================================================= 00043 /*! return the inverse quat */ 00044 inline quat inv(const quat& q) 00045 { 00046 return conj(q)/norm(q); 00047 } 00048 00049 /////////////////////////////////////////////////////////////////////////////// 00050 /////////////////////////////////////////////////////////////////////////////// 00051 /////////////////////////////////////////////////////////////////////////////// 00052 /* 00053 template<typename T>inline quaternion<T>exp(quaternion<T> const & q); 00054 template<typename T>inline quaternion<T>cos(quaternion<T> const & q); 00055 template<typename T>inline quaternion<T>sin(quaternion<T> const & q); 00056 template<typename T>inline quaternion<T>tan(quaternion<T> const & q); 00057 template<typename T>inline quaternion<T>cosh(quaternion<T> const & q); 00058 template<typename T>inline quaternion<T>sinh(quaternion<T> const & q); 00059 template<typename T>inline quaternion<T>tanh(quaternion<T> const & q); 00060 00061 template<typename T>quaternion<T>pow(quaternion<T> const & q, int n); 00062 */