深入理解空间坐标系的矩阵变换
深入理解空间坐标系的矩阵变换
空间中三维坐标变换一般由三种方式实现,第一种是旋转矩阵和旋转向量;第二种是欧拉角;第三种是四元数。这里先介绍旋转矩阵(旋转向量)与欧拉角实现三维空间坐标变换的方法以及两者之间的关系。
空间变换分析:
这里以常见的世界坐标系与相机坐标系间的变换为例。
从相机坐标系转换到世界坐标系,也就是比较通用的body到世界坐标系间的转换。
那么旋转的欧拉角按从世界坐标系转换到相机坐标系的过程,先按z轴旋转、之后y轴旋转、之后x轴旋转,最终得到相机坐标系,得到的角度分别是yaw、pitch、roll,那么从相机坐标系到世界坐标系的旋转矩阵按如下方式定义:
那么得到的相机(body)坐标系到世界坐标系间的旋转矩阵为:
对应四元数变换矩阵:
Opencv实现代码:
cv::Mat IMUReader::angleToRotation(COORDINATES& carrier)
{
// R
cv::Mat R = cv::Mat::eye(3, 3, CV_32F);
R.at(0, 0) = cos(carrier.yaw)*cos(carrier.pitch);
R.at(0, 1) = cos(carrier.yaw)*sin(carrier.roll)*sin(carrier.pitch) - cos(carrier.roll)*sin(carrier.yaw);
R.at(0, 2) = sin(carrier.yaw)*sin(carrier.roll) + cos(carrier.yaw)*cos(carrier.roll)*sin(carrier.pitch);
R.at(1, 0) = cos(carrier.pitch)*sin(carrier.yaw);
R.at(1, 1) = cos(carrier.yaw)*cos(carrier.roll) + sin(carrier.yaw)*sin(carrier.roll)*sin(carrier.pitch);
R.at(1, 2) = cos(carrier.roll)*sin(carrier.yaw)*sin(carrier.pitch) - cos(carrier.yaw)*sin(carrier.roll);
R.at(2, 0) = - sin(carrier.pitch);
R.at(2, 1) = cos(carrier.pitch)*sin(carrier.roll);
R.at(2, 2) = cos(carrier.roll)*cos(carrier.pitch);
return R;
}
对于平移矩阵为相机坐标系原点在世界坐标系下的坐标T,最终得到的坐标变换方程如下:
其理解过程为从世界坐标系经过z,y,x的旋转以及平移T后得到相机坐标系,那么从相机坐标转换的世界坐标实际上是反变换过程,最后一步是x旋转,那么通过定义Rx为反旋转将相机坐标反旋转过来,之后依次是y,z,旋转后得到的值为与世界坐标系同方向,但是有一个平移的T的坐标系下的坐标,之后再加一个T坐标就得到了在世界坐标系下的坐标。
齐次坐标变换矩阵:
深入理解空间坐标系的矩阵变换相关推荐
- 深度学习——你应该掌握的数学知识
深度学习--你应该掌握的数学知识 声明: 1)为什么要讲数学 ?数学作为一个基础的工具,对于大多数理工学科,是必不可少的一部分,尤其深度学习是和数学联系比较紧密的一个学科,对于数学概念的扎实理解,会帮 ...
- Extjs 4.2 MVC+ThreeJs学习笔记(二)一个简单的ThreeJS场景
ThreeJS基本要素 在我们用ThreeJS创建的3D世界里,会有很多的元素,然而以下四个是最基本的元素,也就是说只要包含了这些元素,就可以渲染出一个场景. 一个Scene(场景) 一个render ...
- 计算机三维实体建模与应用教学要求,三维建模教学大纲.doc
三维建模课程教学大纲 课程名称:三维建模 课程代码:21 适用专业:计算机专业 总学时:60 一.本课程的性质.目的和任务 (一)课程性质:本课程是计算机应用技术(网页与广告制作)的专业基础课程,是该 ...
- 卐 4-3D图形的数学
目录 Vectors(向量) Common Vector Operators(常用的向量操作) Dot Product(点积) Cross Product(叉积) Length of a Vector ...
- Shader入门精要-4-高级篇
屏幕后效,深度和法线纹理,风格化,噪声,渲染优化 屏幕后效 一些后效介绍 雾效 雾效系数: 景深 高斯模糊 运动模糊 Bloom 边缘检测 基于像素的边缘检测 基于深度和法线的边缘检测 对单个物体检测 ...
- 从零开始学习3D可视化之坐标系
1. 世界坐标系 2. 父物体坐标系 3.自身坐标系 要想控制一个3D可视化对象的空间位置,首先需要理解空间坐标系.在 ThingJS 开发平台中,使用右手坐标系,横轴为 X 轴和 Z 轴,竖轴为 Y ...
- “黑掉卫星Hack-A-Sat”太空信息安全挑战赛的基本情况
DEFCON极客大会是全球顶级的安全会议,诞生于1993年,被称为极客界的"奥斯卡",每年7月在美国的拉斯维加斯举行,近万名参会者除来自世界各地的极客.安全领域研究者.爱好者,还有 ...
- Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)
Android的Matrix利用数学原理实现图片平移.旋转等操作详解 很庆幸自己的线性代数学的还可以,理解Matrix的矩阵变换完全没有问题.Matrix矩阵实现图片的平移旋转等操作涉及到线性代数问题 ...
- python三维建模需要用到哪些知识_三维建模教学大纲
三维建模课程教学大纲 课程名称:三维建模 课程代码: 21 适用专业:计算机专业 总学时: 60 一.本课程的性质.目的和任务 (一) 课程性质: 本课程是计算机应用技术 (网页与广告制作) 的专业基 ...
最新文章
- vscode使用教程python-使用VS Code开发Python
- 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比
- 基础-栈队列简单测试
- Upgrade Hole puncher Mathematical Modeling
- 计算机考研310分什么水平,知乎工学考研310是什么水平
- C++之父:比特币是用C++开发的,我为此感到遗憾。
- data 谷歌浏览器更改user 路径_chrome修改默认用户目录
- Oracle物理的体系结构
- Java入门学习路线目录索引(持续更新中)
- 文字处理:标点符号有哪些,场景,参考GB-T 15834-2011《标点符号用法》
- 基于springboot的在线考试系统
- 在学校报名了计算机一级考试时间,2020年山东计算机一级报名及考试时间
- java操作SFTP工具类
- AlphaBlend失败,错误码87
- 谷歌小恐龙PHP代码,Chrome小恐龙前端修改代码代码总结
- 高绩效团队-VUCA时代的五个管理策略《三》—创新管理
- java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
- alpine安装及使用
- Google“窃取”内容渠道控制权?
- trafficserver 服务搭建