00001
00002
00003
00004
00005
00006
00007 #ifndef _AXIS_ANGLE_H
00008 #define _AXIS_ANGLE_H
00009
00010 #include <string>
00011 #include <boost/shared_array.hpp>
00012 #include <Physsim/Base.h>
00013
00014 namespace Physsim {
00015
00016 class Quat;
00017 class Matrix3;
00018 class Matrix4;
00019 class Vector3;
00020 class Vector4;
00021
00023 class AAngle : public Base
00024 {
00025 public:
00026 AAngle();
00027 AAngle(const AAngle& source);
00028 AAngle(boost::shared_array<const Real> array);
00029 AAngle(const Quat* q);
00030 AAngle(Real x, Real y, Real z, Real angle);
00031 AAngle(const Vector3* v, Real angle);
00032 AAngle(const VectorN* v);
00033 AAngle(const Matrix3* m);
00034 AAngle(const Matrix3* m, const Vector3* axis);
00035 AAngle(const Matrix4* m);
00036 bool epsilon_equals(const AAngle& a, Real epsilon) const;
00037 static bool epsilon_equals(const AAngle& a1, const AAngle& a2, Real epsilon);
00038 void set(boost::shared_array<const Real> array);
00039 void set(Real x, Real y, Real z, Real angle);
00040 void set(const VectorN* v);
00041 void set(const Vector3* v, Real angle);
00042 void set(const Matrix3* m);
00043 void set(const Matrix3* m, const Vector3* axis);
00044 void set(const Matrix4* m);
00045 void set(const Quat* q);
00046 void operator=(const AAngle& source);
00047 AAngle operator*(const AAngle& a) const;
00048 void operator*=(const AAngle& a);
00049
00050 Real _angle;
00051 Real _x;
00052 Real _y;
00053 Real _z;
00054 };
00055
00056 std::ostream& operator<<(std::ostream& out, const AAngle& a);
00057
00058 }
00059
00060 #endif
00061