Program Listing for File rotations.hpp#

↰ Return to documentation for file (source/pele/rotations.hpp)

#ifndef _pele_rotations_h_
#define _pele_rotations_h_

#include "pele/array.hpp"
#include "pele/vecn.hpp"

namespace pele {

pele::MatrixNM<3, 3> aa_to_rot_mat(pele::VecN<3> const &p);
pele::VecN<4> rot_mat_to_quaternion(pele::MatrixNM<3, 3> const &mx);
pele::VecN<3> quaternion_to_aa(pele::VecN<4> const &q);
pele::VecN<4> aa_to_quaternion(pele::VecN<3> const &p);

inline pele::VecN<3> rot_mat_to_aa(pele::MatrixNM<3, 3> const &mx) {
  return pele::quaternion_to_aa(rot_mat_to_quaternion(mx));
}
pele::VecN<4> quaternion_multiply(pele::VecN<4> const &q1,
                                  pele::VecN<4> const &q2);
inline pele::VecN<3> rotate_aa(pele::VecN<3> const &p1,
                               pele::VecN<3> const &p2) {
  return pele::quaternion_to_aa(pele::quaternion_multiply(
      pele::aa_to_quaternion(p2), pele::aa_to_quaternion(p1)));
}

void rot_mat_derivatives_small_theta(pele::VecN<3> const &p,
                                     pele::MatrixNM<3, 3> &rmat,
                                     pele::MatrixNM<3, 3> &drm1,
                                     pele::MatrixNM<3, 3> &drm2,
                                     pele::MatrixNM<3, 3> &drm3,
                                     bool with_grad);

void rot_mat_derivatives(pele::VecN<3> const &p, pele::MatrixNM<3, 3> &rmat,
                         pele::MatrixNM<3, 3> &drm1, pele::MatrixNM<3, 3> &drm2,
                         pele::MatrixNM<3, 3> &drm3);

}  // namespace pele
#endif