23 #include <eigen3/Eigen/Dense>
24 #include <eigen3/Eigen/Geometry>
26 #ifndef QUATERNION_HELPER_H
27 #define QUATERNION_HELPER_H
34 Eigen::Matrix<num,3,1> v(vec.x,vec.y,vec.z);
41 Eigen::Matrix<num,3,3> mat;
42 mat = quat.toRotationMatrix();
63 Eigen::Matrix<num,3,3> mat;
64 mat = quat.toRotationMatrix();
83 template <
class num> Eigen::Quaternion<num> quat_construct(
const GVector::vector3d<num> &axis,
const num angle)
85 Eigen::Matrix<num,3,1> axisVector(axis.x,axis.y,axis.z);
86 Eigen::AngleAxis<num> angleAxisForm(angle,axisVector);
87 return Eigen::Quaternion<num>(angleAxisForm);
91 template <
class num> Eigen::Quaternion<num> randRot(
const num max_angle,
const Eigen::Quaternion<num> &angle)
94 num randAngle = frand<num>(0.0,max_angle);
95 if(randAngle>0.0 && randAxis.sqlength()>0.0){
97 return quat_construct<num>(randAxis,randAngle)*angle;
103 template <
class num> Eigen::Quaternion<num> randRot(
const num &max_angle)
106 num angle = frand<num>(0.0,max_angle);
107 if(angle>0.0 && axis.sqlength()>0.0){
109 return quat_construct<num>(axis,angle)*angle;
111 return Eigen::Quaternion<num>(1.0,0.0,0.0,0.0);
115 #endif //QUATERNION_HELPER_H