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

Eigen矩阵的平移,旋转,缩放

#include <Eigen/Core>
#include <Eigen/Dense>

平移

x轴

	// 原始点或对象的坐标Eigen::Vector3d original_point(1.0, 2.0, 3.0);std::cout << "original_point: " << std::endl << original_point << std::endl;// x 轴上的平移量double tx = 2.0;// 构造平移矩阵Eigen::Matrix4d translation_matrix = Eigen::Matrix4d::Identity();translation_matrix(0, 3) = tx;std::cout << "translation_matrix: " << std::endl << translation_matrix << std::endl;// 1 0 0 2// 0 1 0 0// 0 0 1 0// 0 0 0 1// 应用平移变换Eigen::Vector4d homogenous_point(original_point.x(), original_point.y(), original_point.z(), 1.0);Eigen::Vector4d transformed_point = translation_matrix * homogenous_point;std::cout << "Transformed point after translation along x-axis: " << transformed_point.transpose().block<1, 3>(0, 0) << std::endl;

在这里插入图片描述

y轴

	// 原始点或对象的坐标Eigen::Vector3d original_point(1.0, 2.0, 3.0);// y 轴上的平移量double ty = -1.0;// 构造平移矩阵Eigen::Matrix4d translation_matrix = Eigen::Matrix4d::Identity();translation_matrix(1, 3) = ty;std::cout << "translation_matrix: " << std::endl << translation_matrix << std::endl;// 1  0  0   0// 0  1  0  -1// 0  0  1   0// 0  0  0   1// 应用平移变换Eigen::Vector4d homogenous_point(original_point.x(), original_point.y(), original_point.z(), 1.0);Eigen::Vector4d transformed_point = translation_matrix * homogenous_point;// 输出结果std::cout << "Original point: " << original_point.transpose() << std::endl;std::cout << "Transformed point after translation along y-axis: " << transformed_point.transpose().block<1, 3>(0, 0) << std::endl;

在这里插入图片描述

z轴

	// 原始点或对象的坐标Eigen::Vector3d original_point(1.0, 2.0, 3.0);// z 轴上的平移量double tz = 0.5;// 构造平移矩阵Eigen::Matrix4d translation_matrix = Eigen::Matrix4d::Identity();translation_matrix(2, 3) = tz;std::cout << "translation_matrix: " << std::endl << translation_matrix << std::endl;// 1   0   0   0// 0   1   0   0// 0   0   1  0.5// 0   0   0   1// 应用平移变换Eigen::Vector4d homogenous_point(original_point.x(), original_point.y(), original_point.z(), 1.0);Eigen::Vector4d transformed_point = translation_matrix * homogenous_point;// 输出结果std::cout << "Original point: " << original_point.transpose() << std::endl;std::cout << "Transformed point after translation along y-axis: " << transformed_point.transpose().block<1, 3>(0, 0) << std::endl;

在这里插入图片描述

旋转

x轴

	#define M_PI 3.14159265358979323846// 原始点或对象的坐标Eigen::Vector3d original_point(0.0, 1.0, 0.0);// 绕 x 轴顺时针旋转角度(弧度)double angle = M_PI / 4.0; // 45 度 绕 x 轴逆时针旋转角度(弧度)//double angle = -M_PI / 4.0; // -45 度// 构造旋转矩阵Eigen::Matrix3d rotation_matrix;rotation_matrix = Eigen::AngleAxisd(angle, Eigen::Vector3d::UnitX());// 应用旋转变换Eigen::Vector3d rotated_point = rotation_matrix * original_point;// 输出结果std::cout << "Original point: " << original_point.transpose() << std::endl;std::cout << "Rotated point after clockwise rotation around x-axis: " << rotated_point.transpose() << std::endl;

y轴

	#define M_PI 3.14159265358979323846// 原始点或对象的坐标Eigen::Vector3d original_point(0.0, 1.0, 0.0); 绕 y 轴顺时针旋转角度(弧度)//double angle = M_PI / 3.0; // 60 度// 绕 y 轴逆时针旋转角度(弧度)double angle = -M_PI / 3.0; // -60 度// 构造旋转矩阵Eigen::Matrix3d rotation_matrix;rotation_matrix = Eigen::AngleAxisd(angle, Eigen::Vector3d::UnitY());// 应用旋转变换Eigen::Vector3d rotated_point = rotation_matrix * original_point;// 输出结果std::cout << "Original point: " << original_point.transpose() << std::endl;std::cout << "Rotated point after clockwise rotation around y-axis: " << rotated_point.transpose() << std::endl;

z轴

	#define M_PI 3.14159265358979323846// 原始点或对象的坐标Eigen::Vector3d original_point(0.0, 1.0, 0.0); 绕 z 轴顺时针旋转角度(弧度)//double angle = M_PI / 6.0; // 30 度// 绕 z 轴逆时针旋转角度(弧度)double angle = -M_PI / 6.0; // -30 度// 构造旋转矩阵Eigen::Matrix3d rotation_matrix;rotation_matrix = Eigen::AngleAxisd(angle, Eigen::Vector3d::UnitZ());// 应用旋转变换Eigen::Vector3d rotated_point = rotation_matrix * original_point;// 输出结果std::cout << "Original point: " << original_point.transpose() << std::endl;std::cout << "Rotated point after clockwise rotation around z-axis: " << rotated_point.transpose() << std::endl;

缩放

相关文章:

  • 【SpringBoot教程】SpringBoot自定义注解与AOP实现切面日志
  • 深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比
  • C语言 指针(7)
  • 【工具变量】数字人民币试点城市DID(2007-2024年)
  • 【心海资源】0U攻击工具|一键模仿地址生成+余额归集+靓号生成系统
  • 神经网络:节点、隐藏层与非线性学习
  • Ubuntu 系统详解
  • Unable to determine the device handle for GPU0000:82:00.0: Unknown Error
  • 知乎前端面试题及参考答案
  • 用于备份的git版本管理指令
  • DC-DC降压型开关电源(Buck Converter)设计中,开关频率(f sw​ )、滤波电感(L)和滤波电容(C out​ )的关系和取舍
  • JDBC实现--保姆级教程~
  • 【东枫科技】代理英伟达产品:智能网卡
  • 【东枫科技】代理英伟达产品:交换机系统
  • Mysql group by 用法
  • 安装篇--CentOS 7 虚拟机安装
  • C++学习之路,从0到精通的征途:stack_queue的模拟实现及deque原理介绍
  • 安卓基础(拖拽)
  • 信奥赛CSP-J复赛集训(DP专题)(37):P4170 [CQOI2007] 涂色
  • RabbitMQ ①-MQ | Linux安装RabbitMQ | 快速上手
  • 甘怀真:天下是神域,不是全世界
  • 金融监管总局将推出8项增量政策:涉房地产金融、险资入市、稳外贸等
  • 机关食堂向游客开放的重庆荣昌区,“消费市场迎来历史性突破”
  • 躺着玩手机真有意思,我“瞎”之前最喜欢了
  • 为什么有的人闻到烟味,会咳嗽、胸闷?别再伤害身边的人
  • 最会说亚军感言的鲁德,站上了马德里公开赛的冠军领奖台