00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _CIvfQuat_h_
00026 #define _CIvfQuat_h_
00027
00028 #include <ivfmath/IvfMathBase.h>
00029 #include <ivfmath/IvfVec3d.h>
00030
00031 IvfSmartPointer(CIvfQuat);
00032
00038 class IVFMATH_API CIvfQuat : public CIvfMathBase {
00039 private:
00040 CIvfVec3d m_q;
00041 double m_qw;
00042 public:
00044 CIvfQuat();
00045
00047 CIvfQuat(CIvfQuat& v);
00048
00050 virtual ~CIvfQuat();
00051
00052 IvfClassInfo("CIvfQuat",CIvfMathBase);
00053
00054 void getComponents(double &qx, double &qy, double &qz, double &qw);
00055 void setComponents(double qx, double qy, double qz, double qw);
00056
00057 CIvfVec3d& getVectorPart();
00058 double getRealPart();
00059
00060 void getAxisAngle(double& vx, double& vy, double &vz, double &angle);
00061 void setFromAxisAngle(double vx, double vy, double vz, double angle);
00062 void setRealPart(double value);
00063 CIvfQuat& inv();
00064 double norm();
00065 void identity();
00066 CIvfQuat& conjugate();
00067
00068 CIvfQuat& operator=(CIvfQuat& a);
00069 CIvfQuat& operator*(CIvfQuat& a);
00070 CIvfQuat& operator*(double b);
00071 CIvfQuat& operator/(double b);
00072 CIvfQuat& operator+(CIvfQuat& a);
00073 CIvfQuat& operator-(CIvfQuat& a);
00074 };
00075
00076 CIvfQuat& ivfGetTempQuat();
00077
00078 #endif