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