间图形旋转变换矩阵推导及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

相关文章

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

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

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

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

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