当前位置: 首页 > 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;

缩放

http://www.xdnf.cn/news/301213.html

相关文章:

  • 制造企业PLM系统成本基准:2025年预算分配与资源成本率的5种优化模型
  • AI智能体|扣子(Coze)实战【天气查询插件开发教程】
  • IAA-Net:一种实孔径扫描雷达迭代自适应角超分辨成像方法——论文阅读
  • centos的根目录占了大量空间怎么办
  • nut-list和nut-swipe搭配:nut-cell侧滑定义无法冒泡打开及bug(含代码、案例、截图)
  • 高并发PHP部署演进:从虚拟机到K8S的DevOps实践优化
  • 1. 视频基础知识
  • Java高频面试之并发编程-12
  • 详细教程:如何在vs code里面给普通的HTML搭建局域网服务器给其他设备访问
  • react-14defaultValue(仅在首次渲染时生效)和value(受 React 状态控制)
  • vue项目中渲染markdown并处理报错
  • Electrolink信息泄露(CVE-2025-28228)
  • 图像处理软件imgPro—调参救星!
  • RabbitMq(尚硅谷)
  • 常识补充(NVIDIA NVLink技术:打破GPU通信瓶颈的革命性互联技术)
  • 【quantity】1 SI Prefixes 实现解析(prefix.rs)
  • 当手机开始预判你的下一步:一场正在颠覆生活的AI静默革命
  • 帕累托最优提示 是什么
  • Java 中的数据结构--简单汇总
  • 状态模式 VS 策略模式
  • Ubuntu开放端口
  • WebSoket的简单使用
  • AI内容检测的技术优势与应用场景
  • 代码随想录图论part03
  • TestStand API 简介
  • Python+Scrapy跨境电商爬虫实战:从亚马逊/沃尔玛数据采集到反爬攻克(附Pangolin API高效方案)
  • 抖音热门视频评论数追踪爬虫获取
  • Windows 下 MongoDB 安装指南
  • 关于loadstartcode使用
  • 【Elastsearch】如何获取已创建的api keys