深入理解空间坐标系的矩阵变换

空间中三维坐标变换一般由三种方式实现,第一种是旋转矩阵和旋转向量;第二种是欧拉角;第三种是四元数。这里先介绍旋转矩阵(旋转向量)与欧拉角实现三维空间坐标变换的方法以及两者之间的关系。
空间变换分析:
这里以常见的世界坐标系与相机坐标系间的变换为例。

从相机坐标系转换到世界坐标系,也就是比较通用的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. 深度学习——你应该掌握的数学知识

    深度学习--你应该掌握的数学知识 声明: 1)为什么要讲数学 ?数学作为一个基础的工具,对于大多数理工学科,是必不可少的一部分,尤其深度学习是和数学联系比较紧密的一个学科,对于数学概念的扎实理解,会帮 ...

  2. Extjs 4.2 MVC+ThreeJs学习笔记(二)一个简单的ThreeJS场景

    ThreeJS基本要素 在我们用ThreeJS创建的3D世界里,会有很多的元素,然而以下四个是最基本的元素,也就是说只要包含了这些元素,就可以渲染出一个场景. 一个Scene(场景) 一个render ...

  3. 计算机三维实体建模与应用教学要求,三维建模教学大纲.doc

    三维建模课程教学大纲 课程名称:三维建模 课程代码:21 适用专业:计算机专业 总学时:60 一.本课程的性质.目的和任务 (一)课程性质:本课程是计算机应用技术(网页与广告制作)的专业基础课程,是该 ...

  4. 卐 4-3D图形的数学

    目录 Vectors(向量) Common Vector Operators(常用的向量操作) Dot Product(点积) Cross Product(叉积) Length of a Vector ...

  5. Shader入门精要-4-高级篇

    屏幕后效,深度和法线纹理,风格化,噪声,渲染优化 屏幕后效 一些后效介绍 雾效 雾效系数: 景深 高斯模糊 运动模糊 Bloom 边缘检测 基于像素的边缘检测 基于深度和法线的边缘检测 对单个物体检测 ...

  6. 从零开始学习3D可视化之坐标系

    1. 世界坐标系 2. 父物体坐标系 3.自身坐标系 要想控制一个3D可视化对象的空间位置,首先需要理解空间坐标系.在 ThingJS 开发平台中,使用右手坐标系,横轴为 X 轴和 Z 轴,竖轴为 Y ...

  7. “黑掉卫星Hack-A-Sat”太空信息安全挑战赛的基本情况

    DEFCON极客大会是全球顶级的安全会议,诞生于1993年,被称为极客界的"奥斯卡",每年7月在美国的拉斯维加斯举行,近万名参会者除来自世界各地的极客.安全领域研究者.爱好者,还有 ...

  8. Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)

    Android的Matrix利用数学原理实现图片平移.旋转等操作详解 很庆幸自己的线性代数学的还可以,理解Matrix的矩阵变换完全没有问题.Matrix矩阵实现图片的平移旋转等操作涉及到线性代数问题 ...

  9. python三维建模需要用到哪些知识_三维建模教学大纲

    三维建模课程教学大纲 课程名称:三维建模 课程代码: 21 适用专业:计算机专业 总学时: 60 一.本课程的性质.目的和任务 (一) 课程性质: 本课程是计算机应用技术 (网页与广告制作) 的专业基 ...

最新文章

  1. vscode使用教程python-使用VS Code开发Python
  2. 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比
  3. 基础-栈队列简单测试
  4. Upgrade Hole puncher Mathematical Modeling
  5. 计算机考研310分什么水平,知乎工学考研310是什么水平
  6. C++之父:比特币是用C++开发的,我为此感到遗憾。
  7. data 谷歌浏览器更改user 路径_chrome修改默认用户目录
  8. Oracle物理的体系结构
  9. Java入门学习路线目录索引(持续更新中)
  10. 文字处理:标点符号有哪些,场景,参考GB-T 15834-2011《标点符号用法》
  11. 基于springboot的在线考试系统
  12. 在学校报名了计算机一级考试时间,2020年山东计算机一级报名及考试时间
  13. java操作SFTP工具类
  14. AlphaBlend失败,错误码87
  15. 谷歌小恐龙PHP代码,Chrome小恐龙前端修改代码代码总结
  16. 高绩效团队-VUCA时代的五个管理策略《三》—创新管理
  17. java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
  18. alpine安装及使用
  19. Google“窃取”内容渠道控制权?
  20. trafficserver 服务搭建

热门文章

  1. Vue 成中国普通高等院校核心课程
  2. python计算机二级含金量-计算机二级证书含金量到底有多高?你真的知道吗?
  3. CSS解决高度塌缩问题和外边距重叠问题
  4. 基于Nodejs的电影购票微信小程序的设计和实现
  5. 阿里云发布ET医疗大脑,它的野心将不只是医生助手 | 云栖2017深圳
  6. vue token过期后的处理和网关白名单
  7. 华为鸿蒙开发板-Hi3516DV300硬件设计原理图PCB硬件
  8. 2021年中国同城配送行业发展势头良好,越来越受资本家的青睐[图]
  9. C语言 计算sinx的近似值
  10. C语言——用多项式来近似表示正弦函数sinx