pele
Python energy landscape explorer
/home/js850/projects/pele/source/pele/rotations.h
00001 #ifndef _pele_rotations_h_
00002 #define _pele_rotations_h_
00003 
00004 #include "pele/array.h"
00005 #include "pele/vecn.h"
00006 
00007 namespace pele{
00008 
00009 
00013 pele::MatrixNM<3,3> aa_to_rot_mat(pele::VecN<3> const & p);
00014 pele::VecN<4> rot_mat_to_quaternion(pele::MatrixNM<3,3> const & mx);
00015 pele::VecN<3> quaternion_to_aa(pele::VecN<4> const & q);
00016 pele::VecN<4> aa_to_quaternion(pele::VecN<3> const & p);
00017 
00018 inline pele::VecN<3> rot_mat_to_aa(pele::MatrixNM<3,3> const & mx)
00019 {
00020     return pele::quaternion_to_aa(rot_mat_to_quaternion(mx));
00021 }
00022 pele::VecN<4> quaternion_multiply(pele::VecN<4> const & q1, pele::VecN<4> const & q2);
00026 inline pele::VecN<3> rotate_aa(pele::VecN<3> const & p1, pele::VecN<3> const & p2)
00027 {
00028     return pele::quaternion_to_aa(
00029             pele::quaternion_multiply(
00030                 pele::aa_to_quaternion(p2),
00031                 pele::aa_to_quaternion(p1)
00032             )
00033     );
00034 }
00035 
00039 void rot_mat_derivatives_small_theta(
00040         pele::VecN<3> const & p,
00041         pele::MatrixNM<3,3> & rmat,
00042         pele::MatrixNM<3,3> & drm1,
00043         pele::MatrixNM<3,3> & drm2,
00044         pele::MatrixNM<3,3> & drm3,
00045         bool with_grad);
00046 
00050 void rot_mat_derivatives(
00051         pele::VecN<3> const & p,
00052         pele::MatrixNM<3,3> & rmat,
00053         pele::MatrixNM<3,3> & drm1,
00054         pele::MatrixNM<3,3> & drm2,
00055         pele::MatrixNM<3,3> & drm3);
00056 
00057 } // close namespace pele
00058 #endif
 All Classes Namespaces Functions Variables Typedefs