当前位置: 首页 > news >正文

pcl封装11 (快速定义)旋转矩阵

这个封装是为更好更快的进行组合。

分为绕xyz三个轴旋转的矩阵函数,和一个平移函数。

做一个案例进行快速的演示,代码用起来真的是一行搞定

目的:我们做一个矩阵满足点云绕z轴旋转45度,然后再平移(1,1,0)

展示一下我的代码:超级方便

int main ()
{pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);cloud->push_back(pcl::PointXYZ(0, 0, 0));cloud->push_back(pcl::PointXYZ(0, 1, 0));cloud->push_back(pcl::PointXYZ(0, 2, 0));cloud->push_back(pcl::PointXYZ(0, 3, 0));cloud->push_back(pcl::PointXYZ(0, 4, 0));show_pointcloud<pcl::PointXYZ>(cloud, 12, 1);Eigen::Matrix4f trans_pose = Eigen::Matrix4f::Identity();trans_pose = matrix_trans({1, 1, 0}) * rotateZ(3.1415926 * 0.25) * trans_pose;pcl::transformPointCloud(*cloud, *cloud, trans_pose);show_pointcloud<pcl::PointXYZ>(cloud, 12, 1);return 0;
}

下面是矩阵的4个封装函数。它们主要用在了这一行,只用一行实现了旋转矩阵的定义

trans_pose = matrix_trans({1, 1, 0}) * rotateZ(3.1415926 * 0.25) * trans_pose;

//旋转矩阵
Eigen::Matrix4f rotateX(float angle_rad=3.14)
{Eigen::Matrix4f rot = Eigen::Matrix4f::Identity();float cos_a = cos(angle_rad);float sin_a = sin(angle_rad);rot(1, 1) = cos_a;rot(1, 2) = -sin_a;rot(2, 1) = sin_a;rot(2, 2) = cos_a;return rot;
};Eigen::Matrix4f rotateY( float angle_rad = 3.14)
{Eigen::Matrix4f rot = Eigen::Matrix4f::Identity();float cos_a = cos(angle_rad);float sin_a = sin(angle_rad);rot(0, 0) = cos_a;rot(0, 2) = sin_a;rot(2, 0) = -sin_a;rot(2, 2) = cos_a;return rot;
}Eigen::Matrix4f rotateZ( float angle_rad = 3.14)
{Eigen::Matrix4f rot = Eigen::Matrix4f::Identity();float cos_a = cos(angle_rad);float sin_a = sin(angle_rad);rot(0, 0) = cos_a;rot(0, 1) = -sin_a;rot(1, 0) = sin_a;rot(1, 1) = cos_a;return  rot;
}Eigen::Matrix4f matrix_trans(Eigen::Vector3f translation = { 1,1,1 })
{Eigen::Matrix4f rot = Eigen::Matrix4f::Identity();rot.block<3,1>(0,3) = translation;return  rot;
}

http://www.dtcms.com/a/392959.html

相关文章:

  • Windows 系统中如何通过 Docker 调用 CUDA 和 cuDNN 加速大模型推理
  • 从零编写vue3系统--5步教学
  • 嵌入式Linux C语言程序设计三
  • 【记录】初赛复习 Day5 6(2021S第一轮错题,内附深井题目讲解)
  • 【C++】类和对象—(下) 收官之战
  • 人工智能学习:什么是迁移学习
  • 模型进阶与神经网络
  • 微软.NET离线运行库合集 v2025.09.09_Win中文_NET运行库_安装教程
  • Galileo AI-AI驱动的UI界面设计工具
  • 布谷鸟布隆过滤器和计数式布隆过滤器和原始布隆过滤器相比分别解决了什么问题?
  • 大模型介绍
  • 基于Springboot的无人之境智能酒店服务平台
  • ICCV-2025 | 大模型驱动的认知导航框架!CogNav:面向目标导航的大型语言模型驱动的认知过程建模
  • java-异常
  • 网络编程:一个 TCP 服务器的简易实现(epoll 版本)
  • 【MySQL学习】关于MySql语句执行、查询、更新流程原理总结
  • C++语法深度剖析与面试核心详解
  • 【Tomcat】基础总结:类加载机制
  • 127、【OS】【Nuttx】【周边】效果呈现方案解析:比较浮点数(上)
  • 计网协议簇具体协议
  • 电路分析基础笔记
  • 【JVM 常用工具命令大全】
  • 从iload_1 iload_2 iadd字节码角度看jvm字节码执行
  • openssl 启用AES NI加速对AES加密性能影响的测试
  • LeetCode:32.随机链表的复制
  • 基于SpringBoot+Vue的旅游系统【协同过滤推荐算法+可视化统计】
  • 前端实现一个星空特效的效果(实战+讲解)
  • 【嵌入式】【科普】软件模块设计简介
  • 【ROS2】ROS2通讯机制Topic常用命令行
  • 欧姆龙NJ系列PLC编程标准化案例