00001 #ifndef animal_frame_h______________________________
00002 #define animal_frame_h______________________________
00003
00004
00005 namespace animal
00006 {
00007
00014
00018 template<class Vec1, class Basis, class Vec2>
00019 void v_eq_project_vec( Vec1& v, const Basis& b, const Vec2& a );
00020
00024 template<class Basis1, class Basis2>
00025 void b_eq_inverse( Basis1& b, const Basis2& a );
00026
00029 template<class Basis,class Real>
00030 void b_eq_eulerX( Basis& b, Real a );
00031
00034 template<class Basis,class Real>
00035 void b_eq_eulerY( Basis& b, Real a );
00036
00039 template<class Basis,class Real>
00040 void b_eq_eulerZ( Basis& b, Real a );
00041
00042
00046 template<class Basis,class Real>
00047 void b_eq_eulerXYZ( Basis& b, Real a, Real b, Real c );
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 template<class Vec1, class Frame, class Vec2>
00075 void v_eq_project_point( Vec1& v, const Frame& f, const Vec2& a );
00076
00077
00078
00079
00080
00081
00082 template<class Frame>
00083 void f_eq_inverse( Frame& f, const Frame& a );
00084
00085
00086
00087
00088
00091 template<int N=3, class Real=float>
00092 struct Frame
00093 {
00094 typedef Array<N,Real> Vec;
00095 typedef Array< N,Vec > Basis;
00096
00098 Frame();
00099
00101 Frame( const Basis& b, const Vec& t );
00102
00103 Basis basis;
00104 Vec displacement;
00105 };
00106
00108 template<class Basis, class Vec>
00109 const Vec& get_translation( const Frame<Basis,Vec>& f );
00110
00112 template<class Basis, class Vec>
00113 Vec& set_translation( Frame<Basis,Vec>& f );
00114
00116 template<class Basis, class Vec>
00117 const Basis& get_basis( const Frame<Basis,Vec>& f );
00118
00120 template<class Basis, class Vec>
00121 Basis& set_basis( Frame<Basis,Vec>& f );
00122
00126 }
00127
00128
00129
00130
00131 #endif