• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

EulerAngle.h

Go to the documentation of this file.
00001 // GMTL is (C) Copyright 2001-2010 by Allen Bierbaum
00002 // Distributed under the GNU Lesser General Public License 2.1 with an
00003 // addendum covering inlined code. (See accompanying files LICENSE and
00004 // LICENSE.addendum or http://www.gnu.org/copyleft/lesser.txt)
00005 
00006 #ifndef _GMTL_EULERANGLE_H_
00007 #define _GMTL_EULERANGLE_H_
00008 
00009 #include <gmtl/Math.h>     // for rotation order
00010  
00011 namespace gmtl
00012 {
00013 
00037 template <typename DATA_TYPE, typename ROTATION_ORDER>
00038 class EulerAngle
00039 {
00040 public:
00042    typedef DATA_TYPE DataType;
00043 
00044    enum Params { Size = 3, Order = ROTATION_ORDER::ID };
00045 
00047    EulerAngle()
00048    {
00049       gmtlASSERT( ROTATION_ORDER::IS_ROTORDER == 1 && 
00050             "you must specify a RotationOrder derived type for the rotationorder in euler angle." );
00051       mData[0] = DATA_TYPE( 0 );
00052       mData[1] = DATA_TYPE( 0 );
00053       mData[2] = DATA_TYPE( 0 );
00054    }
00055 
00057    EulerAngle( const EulerAngle& e )
00058    {
00059       mData[0] = e.mData[0];
00060       mData[1] = e.mData[1];
00061       mData[2] = e.mData[2];
00062    }
00063 
00065    EulerAngle( DATA_TYPE p0, DATA_TYPE p1, DATA_TYPE p2 )
00066    {
00067       mData[0] = p0;
00068       mData[1] = p1;
00069       mData[2] = p2;
00070    }
00071    
00073    void set( const DATA_TYPE& p0, const DATA_TYPE& p1, 
00074              const DATA_TYPE& p2 )
00075    {
00076       mData[0] = p0;
00077       mData[1] = p1;
00078       mData[2] = p2;
00079    }
00080    
00082 
00087    inline DATA_TYPE& operator[]( const unsigned i )
00088    {
00089       gmtlASSERT( i < Size );
00090       return mData[i];
00091    }
00092    inline const DATA_TYPE&  operator[]( const unsigned i ) const
00093    {
00094       gmtlASSERT( i < Size );
00095       return mData[i];
00096    }
00098    
00100 
00103    DATA_TYPE* getData() { return mData; }
00104    
00108    const DATA_TYPE* getData() const { return mData; }
00110    
00111 private:
00112    DATA_TYPE mData[Size];
00113 };
00114 
00115 const EulerAngle<float, XYZ> EULERANGLE_IDENTITY_XYZF( 0.0f, 0.0f, 0.0f );
00116 const EulerAngle<double, XYZ> EULERANGLE_IDENTITY_XYZD( 0.0, 0.0, 0.0 );
00117 const EulerAngle<float, ZYX> EULERANGLE_IDENTITY_ZYXF( 0.0f, 0.0f, 0.0f );
00118 const EulerAngle<double, ZYX> EULERANGLE_IDENTITY_ZYXD( 0.0, 0.0, 0.0 );
00119 const EulerAngle<float, ZXY> EULERANGLE_IDENTITY_ZXYF( 0.0f, 0.0f, 0.0f );
00120 const EulerAngle<double, ZXY> EULERANGLE_IDENTITY_ZXYD( 0.0, 0.0, 0.0 );
00121 
00122 typedef EulerAngle<float, XYZ> EulerAngleXYZf;
00123 typedef EulerAngle<double, XYZ> EulerAngleXYZd;
00124 typedef EulerAngle<float, ZYX> EulerAngleZYXf;
00125 typedef EulerAngle<double, ZYX> EulerAngleZYXd;
00126 typedef EulerAngle<float, ZXY> EulerAngleZXYf;
00127 typedef EulerAngle<double, ZXY> EulerAngleZXYd;
00128 
00129 } // end of namespace gmtl
00130 
00131 #endif

Generated on Sun Sep 19 2010 14:35:14 for GenericMathTemplateLibrary by  doxygen 1.7.1