00001
00002
00003 class quat
00004 {
00005 public:
00006
00007 double x;
00008 double y;
00009 double z;
00010 double r;
00011
00012
00013 inline quat();
00014 inline quat(const quat&);
00015 inline quat(const double&, const double&, const double&, const double&);
00016
00017
00018 inline ~quat();
00019
00020
00021 inline double& operator()(const int&);
00022 inline double operator()(const int&) const;
00023 inline friend std::ostream& operator<<(std::ostream&, const quat&);
00024
00025
00026 inline void normalize();
00027 inline friend double abs(const quat&);
00028 inline friend double norm(const quat&);
00029 inline friend quat normal(const quat&);
00030 inline friend quat inv(const quat&);
00031
00032
00033 inline friend vec im(const quat&);
00034 inline friend vec q2vt(const quat&);
00035 inline friend quat conj(const quat&);
00036 inline friend void swap(quat&, quat&);
00037
00038
00039 inline quat operator+(void);
00040 inline quat operator-(void);
00041
00042
00043 inline quat& operator=(const quat&);
00044 inline quat& operator+=(const quat&);
00045 inline quat& operator-=(const quat&);
00046 inline quat& operator*=(const quat&);
00047 inline quat& operator/=(const quat&);
00048 inline friend quat operator+(const quat&, const quat&);
00049 inline friend quat operator-(const quat&, const quat&);
00050 inline friend quat operator*(const quat&, const quat&);
00051 inline friend quat operator/(const quat&, const quat&);
00052
00053
00054 inline quat& operator*=(const double&);
00055 inline quat& operator/=(const double&);
00056 inline friend quat operator*(const quat&, const double&);
00057 inline friend quat operator/(const quat&, const double&);
00058
00059
00060 inline friend quat operator*(const double&, const quat&);
00061 };