三维旋转详细解读(Rodrigues‘ Roatation Formula 罗德里格旋转公式)

简介: 三维旋转详细解读(Rodrigues‘ Roatation Formula 罗德里格旋转公式)

引言

前面我们了解了 复数在二维旋转中的作用与联系

而四元数与三维旋转之间的关系与复数对二维旋转有很多类似的地方,下面我们就先来详细了解一下三维旋转的过程。

三维旋转

首先讨论一下三维旋转,我们了解到常用的三维旋转有两种方式:

1)欧拉角

即按照一定的顺序,分别对X, Y, Z三个轴进行旋转 θ 角。绕各旋转轴的旋转矩阵为:

然后任意的三维旋转可以分解成上述三种旋转方式的组合。(注意:三个旋转的顺序是非常重要的,因为3D旋转矩阵的相乘一般是不可交换的,即

),而一般情况下,我们只会选择其中的一个固定的旋转顺序来进行处理,但是这种方式就会导致万向锁的问题。

2)轴角式

即按照一个固定方向为旋转轴,绕着此轴旋转 θ 角,如下图中所示,向量V绕着旋转轴u旋转了 θ 度变换到V’

在轴角式变换方法中,一个旋转的定义需要四个变量,旋转轴的u的(x,y,z)方向,以及一个旋转角θ,也就是说有四个自由度。但是三维旋转本质上只有三个自由度,如欧拉角的方式。(多出来的自由度是因为我们在定义旋转轴u时,不仅定义了他的方向,还定义了他的长度,例如测绘/地理中我们使用经纬度两个量就可以找到地球上的任一方位,而再定义海拔则能够找到其具体的空间位置)为了减少长度这个自由度,可以转化一个单位向量:

旋转分解

对于要旋转的向量V,我们可以分解为平行于旋转轴u和垂直于旋转轴u的两个分量,如下所示:

写成下式所示:

而我们分别旋转上述两个分解向量,再进行组合,则得到旋转后的向量V’

可以从上述的示意图中看出,V‘||其实是V在u上的投影,根据正交投影公式:

而且已知:

所以:

下面分别对V||与V⊥两个分量进行处理。

1)V||的旋转

首先,由于V||本身就是和旋转轴u是平行的,所以这种情况很简单,即旋转前后的变量没有发生改变,仍然与之前的旋转轴u重合。

2)V⊥的旋转

正交于旋转轴u的分量V⊥旋转示意图如下所示:

现在,我们就把三维上的旋转转换到了二维平面上,此外,我们再定义一个向量w同时正交于向量u和V⊥,这个w可以通过向量叉乘获得。

因为旋转轴u的模长为1,||u|| = 1,所以w的模长为:

这就表明w与V⊥的模长是相同的,位于同一个圆上。利用一些三角公式,我们可以把上图右侧中的V’⊥投影到v⊥和w两个方向上:

3)V的整体旋转

将上述1)V⊥2)V||的两个分量组合在一起就可以获得V的旋转V’。

因为叉乘符合乘法分配律:

将V|| = (uv)u与V⊥ = v - (uv)u代入得:

这样,我们就得到了一般形式的旋转公式:

目录
相关文章
|
PHP 计算机视觉
罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
1335 0
|
算法 机器人 Python
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
本文深入讲解机器人逆运动学中旋转计算的核心数学工具,包括矩阵指数与对数、SO(3)李群与李代数、流形和切空间等概念,帮助理解三维旋转误差计算原理,并提供基于矩阵指数的精确旋转更新方法及代码实现。
732 1
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
|
网络协议 网络安全
sudo mount -t nfs server_ip:/path/to/shared_directory /mnt/local_directory命令的作用是什么?
sudo mount -t nfs server_ip:/path/to/shared_directory /mnt/local_directory命令的作用是什么?
561 1
|
机器学习/深度学习 传感器 安全
2025年华为杯E题|高速列车轴承智能故障诊断问题|思路、代码、论文|持续更新中....
2025年华为杯E题|高速列车轴承智能故障诊断问题|思路、代码、论文|持续更新中....
1584 0
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
1041 1
|
人工智能 自然语言处理 API
Cline:29.7K Star!一文详解VSCode最强开源AI编程搭子:一键生成代码+自动跑终端+操控浏览器...
Cline 是一款集成于 VSCode 的 AI 编程助手,支持多语言模型,实时检查语法错误,帮助开发者提高编程效率。通过智能化手段,Cline 可以生成代码、执行终端命令、调试 Web 应用,并扩展更多功能。
7717 74
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
机器学习/深度学习 资源调度 数据可视化
YOLOv11改进策略【损失函数篇】| 将激活函数替换为带有注意力机制的激活函数 ARelu
YOLOv11改进策略【损失函数篇】| 将激活函数替换为带有注意力机制的激活函数 ARelu
743 6
YOLOv11改进策略【损失函数篇】| 将激活函数替换为带有注意力机制的激活函数 ARelu
|
数据挖掘
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
1697 0