mi_pose.hh

00001 #ifndef __MI_POSE_H
00002 #define __MI_POSE_H
00003 
00004 #include <boost/shared_ptr.hpp>
00005 #include <boost/numeric/ublas/vector.hpp>
00006 #include <boost/numeric/ublas/matrix.hpp>
00007 #include <mimas/mm_object.h>
00008 #include <mimas/mm_xml_reference.h>
00009 
00024 class mi_pose: public mimas::mm_object
00025 {
00026 public:
00028   typedef boost::numeric::ublas::matrix< double > Matrix;
00030   typedef boost::numeric::ublas::vector< double > Vector;
00034   mi_pose( const mimas::mm_xml_reference< XalanElement > &configuration );
00040   mi_pose( int dim = 3 ):
00041     rotation( boost::numeric::ublas::identity_matrix< double >( dim ) ),
00042     translation( dim ) {}
00053   mi_pose( const double w, const double t1, const double t2 );
00078   mi_pose( double yaw, double pitch, double roll,
00079            double t1, double t2, double t3 );
00083   mi_pose( const Matrix &_rotation, const Vector &_translation );
00086   mi_pose( const mi_pose &_pose ):
00087     rotation( _pose.rotation ), translation( _pose.translation ) {}
00095   mi_pose inv(void) const;
00103   Vector map( const Vector &x ) const
00104     { return prod( rotation, x ) + translation; }
00107   mi_pose operator*( const mi_pose &a ) const;
00110   const Matrix &getRotation(void) const { return rotation; }
00113   const Vector &getTranslation(void) const { return translation; }
00116   Matrix &getRotation(void) { return rotation; }
00119   Vector &getTranslation(void) { return translation; }
00123   static mi_pose scale_2d( double sx, double sy );
00128   static mi_pose scale_3d( double sx, double sy, double sz );
00132   static mi_pose translate_2d( double tx, double ty );
00137   static mi_pose translate_3d( double tx, double ty, double tz );
00140   static mi_pose rotate_2d( double w );
00141 protected:
00147   Matrix rotationBlock( int i1, int i2, int dim, double w );
00149   Matrix rotation;
00151   Vector translation;
00152 };
00153 
00155 typedef boost::shared_ptr< mi_pose > mi_pose_ptr;
00156 
00158 
00159 #endif

doxygen-1.4.5 documentation for micron-vision - Tue Jan 17 15:29:15 2006