From 2f26867286fa62987e004433d4d0c97ab1200cfe Mon Sep 17 00:00:00 2001 From: Simon Ottenhaus <simon.ottenhaus@kit.edu> Date: Fri, 17 May 2019 17:47:47 +0200 Subject: [PATCH] added helper functions --- VirtualRobot/math/Helpers.cpp | 21 +++++++++++++++++++++ VirtualRobot/math/Helpers.h | 8 ++++++++ 2 files changed, 29 insertions(+) diff --git a/VirtualRobot/math/Helpers.cpp b/VirtualRobot/math/Helpers.cpp index 6ee4ca922..59a264a17 100644 --- a/VirtualRobot/math/Helpers.cpp +++ b/VirtualRobot/math/Helpers.cpp @@ -346,6 +346,27 @@ Eigen::VectorXf Helpers::LimitVectorLength(const Eigen::VectorXf& vec, const Eig return vec / scale; } +Eigen::AngleAxisf Helpers::GetAngleAxisFromTo(const Eigen::Matrix3f& start, const Eigen::Matrix3f& target) +{ + return Eigen::AngleAxisf(target * start.inverse()); +} + +Eigen::Vector3f Helpers::GetRotationVector(const Eigen::Matrix3f& start, const Eigen::Matrix3f& target) +{ + Eigen::AngleAxisf aa = GetAngleAxisFromTo(start, target); + return aa.axis() * aa.angle(); +} + +Eigen::Matrix3f Helpers::RotationVectorToOrientation(const Eigen::Vector3f& rotation) +{ + if(rotation.squaredNorm() == 0) + { + return Eigen::Matrix3f::Identity(); + } + Eigen::AngleAxisf aa(rotation.norm(), rotation.normalized()); + return aa.toRotationMatrix(); +} + float Helpers::rad2deg(float rad) { return rad * (180.0f / M_PI_F); diff --git a/VirtualRobot/math/Helpers.h b/VirtualRobot/math/Helpers.h index 7bf8bb5a0..e02bfc091 100644 --- a/VirtualRobot/math/Helpers.h +++ b/VirtualRobot/math/Helpers.h @@ -157,6 +157,14 @@ namespace math static float Distance(const Eigen::Matrix4f& a, const Eigen::Matrix4f& b, float rad2mmFactor); static Eigen::VectorXf LimitVectorLength(const Eigen::VectorXf& vec, const Eigen::VectorXf& maxLen); + + + // Rotation vectors: + + static Eigen::AngleAxisf GetAngleAxisFromTo(const Eigen::Matrix3f& start, const Eigen::Matrix3f& target); + static Eigen::Vector3f GetRotationVector(const Eigen::Matrix3f& start, const Eigen::Matrix3f& target); + static Eigen::Matrix3f RotationVectorToOrientation(const Eigen::Vector3f& rotation); + /// Convert a value from radian to degree. -- GitLab