pele
Python energy landscape explorer
|
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