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
00026
00027
00028
00029
00030 #ifndef CQUAT_H
00031 #define CQUAT_H
00032
00033 #include <math.h>
00034 #include "GeoGeneric.h"
00035
00036
00037 class CV4D;
00038 class CV3D;
00039 class CMat4D;
00040
00041
00046 class CQuat
00047 {
00048 friend class CMat4D;
00049 double w,x,y,z;
00050 public:
00051
00052 CQuat(CMat4D &mat);
00053 CQuat(double qW,double qX, double qY,double qZ);
00054 CQuat(double qW,CV3D &vec);
00055 CQuat(void);
00056
00057 void setQuat(double qW,double qX, double qY,double qZ) { w=qW; x=qX; y=qY; z=qZ; }
00058
00059
00060 CQuat(const CQuat& );
00061
00062
00063 void operator=(const CQuat& );
00064
00065
00066 CQuat operator+(CQuat&);
00067 CQuat operator-(CQuat&);
00068 CQuat operator-();
00069
00070
00071 CQuat operator*(CQuat&);
00072 CQuat operator*(double&);
00073 friend CQuat operator*(double a,CQuat& q)
00074 { CQuat r; r.w=a*q.w; r.x=a*q.x;r.y=a*q.y;r.z=a*q.z; return r; }
00075
00076
00077 CQuat conj();
00078 CQuat inv();
00079
00080
00081 double operator|(CQuat&);
00082
00083
00084 double norm();
00085 CQuat normalize();
00086
00087
00088 double re();
00089 CV3D im();
00090
00091 double xv() const;
00092 double yv() const;
00093 double zv() const;
00094 double wv() const;
00095
00096
00097 CQuat QVQ(CQuat&);
00098
00099 CV3D rotate(CV3D& vec);
00100
00101
00102
00103 void print();
00104
00105
00106
00107
00108 };
00109
00110 inline
00111 double
00112 CQuat :: xv () const
00113 {
00114 return x;
00115 }
00116
00117 inline
00118 double
00119 CQuat :: yv () const
00120 {
00121 return y;
00122 }
00123
00124 inline
00125 double
00126 CQuat :: zv () const
00127 {
00128 return z;
00129 }
00130
00131 inline
00132 double
00133 CQuat :: wv () const
00134 {
00135 return w;
00136 }
00137
00138 #endif