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

mitkVis2Quaternion.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 #ifndef _Quaternion_h
00011 #define _Quaternion_h
00012 
00013 #include "mitkVis2Matrix4x4.h"
00014 
00015 class MITK_VISUALIZATION2_API mitkVis2Quaternion
00016 {
00017 public:
00018 
00019     mitkVis2Quaternion();   
00020     mitkVis2Quaternion(float ax, float ay, float az, float angle);  
00021     mitkVis2Quaternion& operator=(const mitkVis2Quaternion &q)  
00022     {
00023         x = q.x;
00024         y = q.y;
00025         z = q.z;
00026         w = q.w;
00027         return(*this);  
00028     }
00029     mitkVis2Quaternion(const mitkVis2Quaternion &q)                    
00030     {
00031         x = q.x;
00032         y = q.y;
00033         z = q.z;
00034         w = q.w;
00035     }
00036     
00037     void Identity()
00038     {
00039         x   = 0.0f;
00040         y   = 0.0f;
00041         z   = 0.0f;
00042         w   = 1.0f;
00043     }
00044     void Normalize()
00045     {
00046             float normInv = 1.0f/sqrtf(x*x+y*y+z*z+w*w);
00047             x *= normInv;
00048             y *= normInv;
00049             z *= normInv;
00050             w *= normInv;   
00051             return;
00052     }
00053     
00054     mitkVis2Quaternion& operator *= (const mitkVis2Quaternion&);    
00055     mitkVis2Matrix4x4 ToMatrix () const
00056     {
00057         mitkVis2Matrix4x4 mat;
00058         float *m = mat;
00059         m[0]  = 1.0f - 2.0f * (y*y + z*z);
00060         m[1]  = 2.0f * (x*y + z*w);
00061         m[2]  = 2.0f * (z*x - y*w);
00062         m[3]  = 0.0f;
00063     
00064         m[4]  = 2.0f * (x*y - z*w);
00065         m[5]  = 1.0f - 2.0f * (z*z + x*x);
00066         m[6]  = 2.0f * (y*z + x*w);
00067         m[7]  = 0.0f;
00068     
00069         m[8]  = 2.0f * (z*x + y*w);
00070         m[9]  = 2.0f * (y*z - x*w);
00071         m[10] = 1.0f - 2.0f * (x*x + y*y);
00072         m[11] = 0.0f;
00073     
00074         m[12] = 0.0f;
00075         m[13] = 0.0f;
00076         m[14] = 0.0f;
00077         m[15] = 1.0f;   
00078         return mat;
00079     }
00080     
00081     float   x,y,z,w;            
00082 
00083 };
00084 
00085 inline mitkVis2Quaternion operator * (const mitkVis2Quaternion &p, const mitkVis2Quaternion &q)
00086 {
00087     mitkVis2Quaternion res;
00088 
00089     res.w   = p.w*q.w - p.x*q.x - p.y*q.y - p.z*q.z;
00090     res.x   = p.w*q.x + p.x*q.w + p.y*q.z - p.z*q.y;
00091     res.y   = p.w*q.y + p.y*q.w + p.z*q.x - p.x*q.z;
00092     res.z   = p.w*q.z + p.z*q.w + p.x*q.y - p.y*q.x;
00093 
00094     return res;
00095 }
00096 inline mitkVis2Quaternion& mitkVis2Quaternion::operator *= (const mitkVis2Quaternion& q)
00097 {
00098     *this=*this*q;
00099     return (*this); 
00100 }
00101         
00102 
00103 #endif
00104 

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