00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GEOM_QUAT_HH
00020 #define GEOM_QUAT_HH
00021
00022 #include <iostream>
00023 #include <boost/operators.hpp>
00024
00025 #include <ost/geom/module_config.hh>
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 namespace geom {
00043
00044 class Mat3;
00045 class Vec3;
00046
00048
00054 class DLLEXPORT_OST_GEOM Quat:
00055 private boost::additive<Quat>,
00056 private boost::multiplicative<Quat, Real>,
00057 private boost::multiplicative<Quat,Quat>
00058 {
00059 public:
00060 Quat();
00061
00062 Quat(Real w, Real x, Real y, Real z);
00063
00064
00065 Quat(Real angle, const geom::Vec3& axis);
00066
00067
00068 Quat(const Mat3& rotmat);
00069
00070
00071 Mat3 ToRotationMatrix() const;
00072
00073 Vec3 GetAxis() const;
00074
00075
00076 Real GetAngle() const;
00077
00078
00079
00080
00081 Quat operator-();
00082
00083 Quat& operator+=(const Quat& q);
00084
00085 Quat& operator-=(const Quat& q);
00086
00087 Quat& operator*=(Real s);
00088
00089 Quat& operator*=(const Quat& q);
00090
00091 Quat& operator/=(Real s);
00092
00093 Quat& operator/=(const Quat& q);
00094
00095 bool operator==(const Quat& q) const;
00096 bool operator!=(const Quat& q) const { return !this->operator==(q); }
00097
00098
00099 Vec3 Rotate(const Vec3& vec) const;
00100
00101
00102
00103 Real w,x,y,z;
00104 };
00105
00106
00107 Quat DLLEXPORT_OST_GEOM Conjugate(const Quat& q);
00108
00109
00110 Real DLLEXPORT_OST_GEOM Dot(const Quat& q0, const Quat& q1);
00111
00112
00113 Quat DLLEXPORT_OST_GEOM Slerp(const Quat& q0, const Quat& q1, Real t);
00114
00115 Quat DLLEXPORT_OST_GEOM Inv(const Quat& q);
00116 Quat DLLEXPORT_OST_GEOM Exp(const Quat& q);
00117 Quat DLLEXPORT_OST_GEOM Log(const Quat& q);
00118
00119
00120 Quat DLLEXPORT_OST_GEOM Normalize(const Quat& q);
00121
00122 DLLEXPORT_OST_GEOM std::ostream& operator<<(std::ostream& str, const Quat& q);
00123
00124 }
00125
00126 #endif