Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

mitkQuaternion.h

00001 /*=========================================================================
00002 
00003   Program:   3DMed
00004   Date:      $Date: 2014-02-25 18:30:00 +0800 $
00005   Version:   $Version: 4.6.0 $
00006   Copyright: MIPG, Institute of Automation, Chinese Academy of Sciences
00007 
00008 =========================================================================*/
00009 
00010 
00011 #ifndef __mitkQuaternion_h
00012 #define __mitkQuaternion_h
00013 
00014 #include "mitkMatrix.h"
00015 
00019 class MITK_COMMON_API mitkQuaternion
00020 {
00021 public:
00022 
00026     mitkQuaternion();
00027 
00032     mitkQuaternion(const float x, const float y, const float z, const float w);
00033 
00040     mitkQuaternion(const float x, const float y, const float z);
00041 
00045     mitkQuaternion& operator=(const mitkQuaternion &q)  
00046     {
00047         x = q.x;
00048         y = q.y;
00049         z = q.z;
00050         w = q.w;
00051         return(*this);  
00052     }
00053 
00057     mitkQuaternion(const mitkQuaternion &q)                    
00058     {
00059         x = q.x;
00060         y = q.y;
00061         z = q.z;
00062         w = q.w;
00063     }
00064     
00068     void Identity(void);
00069 
00073     void Normalize(void);
00074 
00078     void GetValues(float &x, float &y, float &z, float &w) const;
00079 
00087     void AxisRadToQuat(const float ax, const float ay, const float az, const float angle);
00088 
00096     void AxisDegToQuat(const float ax, const float ay, const float az, const float angle);
00097 
00098 
00106     void GetAxisRad(float &ax, float &ay, float &az, float &angle) const;
00107 
00115     void GetAxisDeg(float &ax, float &ay, float &az, float &angle) const;
00116 
00123     void EulerRadToQuat(const float xr, const float yr, const float zr);
00124 
00131     void EulerDegToQuat(const float xd, const float yd, const float zd);
00132 
00139     void GetEulerRad(float &xr, float &yr, float &zr) const;
00140 
00147     void GetEulerDeg(float &xd, float &yd, float &zd) const;
00148 
00153     void BuildMatrix(mitkMatrix &mat) const;    // get the 4x4 rotation matrix representation of this quaternion
00154 
00158     friend mitkQuaternion operator * (const mitkQuaternion &p, const mitkQuaternion &q); // multiplication
00159 
00160 private:
00161     // get the norm N^2
00162     inline double _norm(void); 
00163 
00164     // quaternion representation (w, xi, yj, zk)
00165     float   x,y,z,w;            
00166 
00167 
00168 
00169 };
00170 
00171 inline mitkQuaternion operator * (const mitkQuaternion &p, const mitkQuaternion &q)
00172 {
00173     mitkQuaternion res;
00174 
00175     res.w   = p.w*q.w - p.x*q.x - p.y*q.y - p.z*q.z;
00176 
00177     res.x   = p.w*q.x + p.x*q.w + p.y*q.z - p.z*q.y;
00178     res.y   = p.w*q.y + p.y*q.w + p.z*q.x - p.x*q.z;
00179     res.z   = p.w*q.z + p.z*q.w + p.x*q.y - p.y*q.x;
00180 
00181     return res;
00182 }
00183 
00184 
00185 #endif
00186 
00187 

Generated on Tue Feb 25 15:00:37 2014 for MITK (Medical Imaging ToolKit) by  doxygen 1.4.3