间图形旋转变换矩阵推导及matlab验证,坐标系之间的旋转平移变换与对应变换矩阵的关系...

本文主要是介绍间图形旋转变换矩阵推导及matlab验证,坐标系之间的旋转平移变换与对应变换矩阵的关系...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

坐标系之间的旋转平移变换与对应变换矩阵的关系

2016年06月21日 10:06:38 Peng___Peng

阅读数:46648更多

在摄影测量和计算机视觉中,经常会遇到空间坐标系之间的坐标转换问题,而两个坐标系之间的变换关系一般可以通过一个旋转矩阵R和一个平移向量T(或C)描述。因此,理解清楚坐标系之间旋转平移的转换过程与对应变换矩阵之间的关系十分重要。这个变换过程虽然简单,但是其间涉及到的参数的表述存在多种形式,常常失之毫厘谬以千里,给我们的理解和使用带来诸多不便,例如,旋转角正方向的定义,不同坐标轴的旋转顺序对应的旋转矩阵的计算方法等等细节问题。本文将从基本的公式推导以及参数的准确描述出发,演算出我们常见的公式和结论。

一 仅存在旋转关系

为了便于表述和分析,我们从平面直角坐标系出发,坐标系O-XY和坐标系O'-X'Y'的关系如下图所示:

a4c26d1e5885305701be709a3d33442f.png

对于以上坐标关系,我们可以作如下描述:坐标系O-XY逆时针旋转theta(或顺时针旋转-theta)后与坐标系O'-X'Y'重合,或者坐标系O‘-X’Y‘顺时针旋转theta(或逆时针旋转-theta)后与坐标系O-XY重合。利用简单的之间三角形的余弦定理和正玄定理就可以得到以下公式(格式编辑不太熟,故以图像代替):

a4c26d1e5885305701be709a3d33442f.png

至此,我们可以将2D平面的旋转问题提升到3D空间的旋转问题,即分别绕三个轴作类似2D的旋转变换。需要额外注意的两个的问题是:1)当绕某根轴旋转时,其他两轴建立的2D坐标系应该保证旋转轴的正方向垂直纸面向外(与旋转角正方向定义相关);2)空间坐标系的旋转关系与各坐标轴的旋转顺序相关;假设两个空间坐标系O-XYZ与O'-X'Y'Z'之间只存在一个坐标轴的旋转,若坐标系O-XYZ绕自身的X轴逆时针转theta之后与坐标系O’-X'Y'Z'重合,空间中某点M在坐标系O-XYZ和O'-X'Y'Z'中的坐标描述存在以下关系:

a4c26d1e5885305701be709a3d33442f.png

同理,若坐标系O-XYZ绕自身的Y轴或Z轴逆时针转theta之后与坐标系O’-X'Y'Z'重合,则对应的坐标关系如下:

a4c26d1e5885305701be709a3d33442f.png

我们注意到,与X和Z轴不同,当绕Y轴逆时针旋转theta角时,对应的旋转矩阵中带负号元素变成了右上角的”sin“元素。原因在于根据上文提到的注意点1)建立的2D坐标系纵轴是X轴,横轴是Z轴,而坐标向量的坐标分量顺序是X,Y,Z,所以得到的X和Z的坐标关系需要调整一下顺序,即可得到上面显示的结果。

可以证明(具体证明过程可以查文献):对于存在任意旋转变换的两个空间坐标系O-XYZ和O'-X'Y'Z',可以通过依次绕三个坐标轴旋转一定角度实现两个坐标系对应坐标轴的重合。这里,我们假设坐标系O-XYZ依次绕自身X轴、Y轴、Z轴分别逆时针转theta1,theta2,theta3后可以与坐标系O'-X'Y'Z'重合,则空间中某点M在这两个坐标系中的描述关系如下:

a4c26d1e5885305701be709a3d33442f.png

类似地,三个坐标轴之间的其他旋转顺序组合可以进行类似的推导。

角度 无论正负,大小都能用。

这篇关于间图形旋转变换矩阵推导及matlab验证,坐标系之间的旋转平移变换与对应变换矩阵的关系...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399474

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs