我是靠谱客的博主 矮小唇膏,最近开发中收集的这篇文章主要介绍C++ 矩阵操作,Eigen::MatrixXf一些见解1 Eigen::MatrixXf矩阵运算加速方法2 Error:cannot call member function without object3 Eigen::MatrixXf矩阵操作问题4 欧拉角和旋转矩阵相互转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 Eigen::MatrixXf矩阵运算加速方法

  • 舍弃不必要的计算:用不着的数据去掉;
  • 尽量引用加const传递变量;
  • 尽量不自己写for计算;
  • 加入O3优化:在CMakeLists中添加
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
message(${CMAKE_CXX_FLAGS})

2 Error:cannot call member function without object

有问题代码:

class Tools {
   public:
   cv::Mat eulerAnglesToRotationMatrix(cv::Vec3f &theta);
}

在类中定义函数时没有把成员函数声明为static函数,否则需要通过对象来调用函数,修改为:

class Tools {
   public:
   static cv::Mat eulerAnglesToRotationMatrix(cv::Vec3f &theta);
}

3 Eigen::MatrixXf矩阵操作问题

Eigen::MatrixXf与matlab矩阵操作对照表

4 欧拉角和旋转矩阵相互转换

改成cv::Vec3d(欧拉角)与Eigen::MatrixXf(旋转矩阵)变换C++代码

/**欧拉角计算对应的旋转矩阵**/
Eigen::MatrixXf Tools::eulerAnglesToRotationMatrix(cv::Vec3d &theta)
{
    // 计算旋转矩阵的X分量
    Eigen::MatrixXf R_x = MatrixXf::Zero(3, 3);
    R_x << 1, 0, 0, 0, cos(theta[0]), -sin(theta[0]),0, sin(theta[0]), cos(theta[0]);
    // 计算旋转矩阵的Y分量
    Eigen::MatrixXf R_y = MatrixXf::Zero(3, 3);
    R_y << cos(theta[1]), 0, sin(theta[1]),0, 1, 0,-sin(theta[1]), 0, cos(theta[1]);
    // 计算旋转矩阵的Z分量
    Eigen::MatrixXf R_z = MatrixXf::Zero(3, 3);
    R_z <<cos(theta[2]),  -sin(theta[2]), 0,sin(theta[2]), cos(theta[2]), 0, 0, 0, 1;
    // 合并
    Eigen::MatrixXf R = R_z * R_y * R_x;
    return R;
}

/*** 功能: 通过给定的旋转矩阵计算对应的欧拉角**/
cv::Vec3d Tools::rotationMatrixToEulerAngles(Eigen::MatrixXf &R)
{
    float sy = sqrt(R(2,1) * R(2,1) + R(2,2) * R(2,2));
    bool singular = sy < 1e-6; // If
    float x, y, z;
    if (!singular) {
        x = atan2(R(2,1) , R(2,2));
        y = atan2(-R(2,0), sy);
        z = atan2(R(1,0), R(0,0));
    } else {
        x = atan2(-R(1,2), R(1,1));
        y = atan2(-R(2,0), sy);
        z = 0;
    }
    return cv::Vec3d(x, y, z);
}

最后

以上就是矮小唇膏为你收集整理的C++ 矩阵操作,Eigen::MatrixXf一些见解1 Eigen::MatrixXf矩阵运算加速方法2 Error:cannot call member function without object3 Eigen::MatrixXf矩阵操作问题4 欧拉角和旋转矩阵相互转换的全部内容,希望文章能够帮你解决C++ 矩阵操作,Eigen::MatrixXf一些见解1 Eigen::MatrixXf矩阵运算加速方法2 Error:cannot call member function without object3 Eigen::MatrixXf矩阵操作问题4 欧拉角和旋转矩阵相互转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部