原博文链接:https://www.cnblogs.com/wtyuan/p/12324495.html

本文综合了几个相关的维基百科,加了点自己的理解,从比较基础的向量投影和叉积讲起,推导出罗德里格斯旋转公式。公式比较繁杂,如有错误,欢迎评论区指出。

对于向量的三维旋转问题,给定旋转轴和旋转角度,用罗德里格斯(Rodrigues)旋转公式可以得出旋转后的向量。另外,罗德里格斯旋转公式可以用旋转矩阵表示,即将三维旋转的轴-角(axis-angle)表示转变为旋转矩阵表示。

向量投影(Vector projection)
  向量a在非零向量b上的向量投影指的是a在平行于向量b的直线上的正交投影。结果是一个平行于b的向量,定义为a1=a1b,其中,a1是一个标量,称为a在b上的标量投影,b是与b同向的单位向量。a1=∥a∥cosθ=a⋅b^=a⋅b∥b∥,其中⋅表示点积(又称标量积),∥a∥表示a的长度,θ表示a和b的夹角。标量投影有正负,正负号与夹角θ有关。

有了向量投影a1,向量a可以表示为a=a1+a2,其中a2称为a from b的vector rejection(没找到比较官方的翻译),也即a向正交于b的超平面的正交投影,a2=a−a1=a−(∥a∥cosθ)b^。下图比较清晰地表示出a、a1、a2的关系。
  

Projection of a on b, rejection of a from b

当90∘<θ≤180∘时,向量投影示意图如图2所示:

大于90°时的向量投影示意图

记号
  向量a在b上的向量投影用加粗的a1表示,标量投影用不加粗的a1。有时向量投影和vector rejection分别用a∥b和a⊥b表示。

用a和b表示
  当θ未知时,可通过a和b计算得出,cosθ=a⋅b∥a∥∥b∥,从而标量投影、向量投影和vector rejection可以分别表示如下:

标量投影:

a1=∥a∥cosθ=∥a∥a⋅b∥a∥∥b∥=a⋅b∥b∥ (1)

向量投影:

a1=a1b=a⋅b∥b∥b∥b∥=(a⋅b)b^=a⋅bb⋅bb (2)
vector rejection:
a2=a−a1=a−a⋅bb⋅bb (3)

叉积

定义
  叉积(又称向量积)是三维空间(R3)向量的二元操作,用符号×表示,给定两个线性独立的向量a和b,叉积a×b的结果是一个向量,这个向量与a、b都正交,也就是正交于a、b所在的平面。为什么要强调线性独立呢,因为非线性独立的两个向量(同向或反向)的叉积为0。

叉积定义为:

a×b=∥a∥∥b∥sin(θ)n (4)

其中,θ表示a、b的夹角,0∘≤θ≤180∘,n正交于a、b所在的平面,方向通常由右手法则确定,如下图所示: 

通过右手法则确定叉积方向

性质
  右手法则决定了叉积不符合交换律,而符合反交换律,即a×b=−b×a,如图4所示:

反交换律

由公式也可以看出当a、b的不线性独立时,即夹角为0∘或180∘时,叉积为零向量0。叉积随夹角θ的变化如图5所示。

叉积随夹角变化示意图

另外,叉积符合分配律,即a×(b+c)=a×b+a×c。如图6所示,左图向量b和c都被分解为vector projection和vector rejection两部分,右图则解释了分配律成立的原因,看图时要注意图中的平行四边形和正方形都表示了相等的关系。

图6 叉积分配律示意图

坐标表示
  考虑右手法则定义的标准三维坐标系,三个坐标轴i、j、k如图7所示,并满足以下等式关系:

i×j=k
j×k=i
k×i=j

同样,由叉积的反交换律可得下面三个等式关系:

j×i=−k
k×j=−i
i×k=−j

由平行向量的叉积为零向量可得:i×i=j×j=k×k=0。
  由图7也可得,任意一个三维向量都可以表示为三个基向量的线性组合,例如:

a=a1i+a2j+a3k
b=b1i+b2j+b2k

图7 三维坐标系基向量与向量a的表示

进而,可以用坐标表示叉积运算如下:
a×b=(a1i+a2j+a3k)×(b1i+b2j+b2k)
=(a2b3−a3b2)i+(a3b1−a1b3)j+(a1b2−a2b1)k
=∣i j k ∣ (5)

∣a1 a2 a3∣
∣b1 b2 b3∣

上式中,将括号展开分别进行叉积推导出第二个等号,而第三个等号则可通过行列式计算得出。
  进一步,可将叉积表示为矩阵与向量相乘的形式,由于a×b=(a2b3−a3b2,a3b1−a1b3,a1b2−a2b1),则叉积可表示为:

a×b=[a]×b=⎡⎣⎢0a3−a2−a30a1a2−a10⎤⎦⎥⎡⎣⎢b1b2b3⎤⎦⎥=[b]T×a=⎡⎣⎢0−b3b2b30−b1−b2b10⎤⎦⎥⎡⎣⎢a1a2a3⎤⎦⎥(6)
其中,[a]×(slam14讲书上记为a∧)表示由向量a得到的反对称矩阵,定义为:

[a]×=⎡⎣⎢0a3−a2−a30a1a2−a10⎤⎦⎥(7)
通过该反对称矩阵的定义可以将叉积表示为矩阵与向量的乘法。

罗德里格斯旋转公式
  考虑v∈R3的三维旋转问题,旋转轴k是单位向量,旋转角为θ,按照右手法则(即逆时针)旋转。则可通过罗德里格斯旋转公式得出旋转后的向量vrot为:

vrot=cosθv+(1−cosθ)(k⋅v)k+sinθk×v(8)
推导过程
  由上文中向量投影部分的知识我们知道,一个向量v可以分解为平行于k的分量v∥和正交于k的分量v⊥:

v=v∥+v⊥(9)

图8 向量的分解图示

如图8所示,因为k为单位向量,由向量投影部分知识可得

v∥=(v⋅k)k(10)
v⊥=v−v∥=v−(k⋅v)k=−k×(k×v)(11)

式(11)用于后面推导维基百科中罗德里格斯旋转公式的矩阵形式,其中,最后一个等号的推导如下:

回顾叉积的知识,k×v=k×(v∥+v⊥)=0+k×v⊥=k×v⊥,k×v可以看做将v⊥以k为旋转轴逆时针旋转了90∘(可参考图8理解)。正如图9所示,v分解为v∥和v⊥,用右手法则不难确定出k×v的方向,进而不难发现,k×(k×v)可以看做将v⊥以k为旋转轴逆时针旋转了180∘,图9中的(椭)圆正反映了k×(k×v)、k×v、v⊥三者“大小相等”的关系。最终,可知v⊥=−k×(k×v)。
图9 罗德里格斯旋转公式几何图示

从图8还可以看出,v的平行分量v∥不会因为旋转而改变,旋转后的向量vrot的平行分量依然等于v∥,即v∥rot=v∥。
  而v的正交分量v⊥在旋转过程中大小不变,方向会发生变化,即

|v⊥rot|=|v⊥|v⊥rot
=cosθv⊥+sinθk×v⊥
=cosθv⊥+sinθk×v(12)

式(12)中第2个等式通过图9可以得出,将圆看做xOy坐标系平面,v⊥所在的直线看做x轴,k×v所在的直线看做y轴,结合三角函数,很容易用v⊥和k×v表示出v⊥rot。

到这已经得出罗德里格斯公式了:

vrot=v∥rot+v⊥rot
=v∥+cosθv⊥+sinθk×v
=v∥+cosθ(v−v∥)+sinθk×v
=cosθv+(1−cosθ)v∥+sinθk×v
=cosθv+(1−cosθ)(k⋅v)k+sinθk×v(13)

矩阵形式
  在叉积部分提到过叉积可以表示为矩阵乘向量的形式,类似地,罗德里格斯旋转公式可以表示为旋转矩阵乘以向量的形式,vrot=Rv,其中R是旋转矩阵。在slam14讲[4]中的表示如下:

R=cosθI+(1−cosθ)kkT+sinθk∧(14)
其中,I表示单位矩阵,k表示旋转向量(书中用n表示旋转向量),k∧表示由k得到的反对称矩阵。从式(13)不难看出上式,另外,结合式(13)还可以得到下面这个式子:

vrot=v∥rot+v⊥rot=v∥+cosθv⊥+sinθk×v=v−v⊥+cosθv⊥+sinθk×v=v+(sinθ)k×v+(cosθ−1)×v⊥=v+(sinθ)k×v+(1−cosθ)k×(k×v)(15)
上式最后一个等号的推导用到了式(11)。从而,得出这个维基百科上的矩阵表示:

vrot=Rv=v+(sinθ)Kv+(1−cosθ)K2v(16)
其中,R=I+(sinθ)K+(1−cosθ)K2,K表示由旋转向量k生成的反对称矩阵。

参考:
[1] Rodrigues’ rotation formula
[2] Cross product
[3] Vector projection
[4] 视觉SLAM十四讲:从理论到实践

罗德里格斯旋转公式(Rodrigues‘ rotation formula)推导相关推荐

  1. 罗德里格斯公式(Rodrigues‘ rotation formula)推导

    罗德里格斯公式(Rodrigues' rotation formula)推导 向量形式 如图所示,三维空间中的一个矢量 v \bold v v绕轴 k \bold k k旋转 θ \theta θ角度 ...

  2. 罗德里格斯公式Rodrigues‘Rotation Formula推导

    原文链接 :https://zhuanlan.zhihu.com/p/113299607 罗德里格斯公式是计算三维空间中,一个向量绕旋转轴旋转一定角度后得到一个新的向量的计算公式,而且可以改写为矩阵的 ...

  3. 罗德里格斯公式Rodrigues' rotation formula推导

    参考本处博客

  4. 【有限位移旋量理论】罗德里格旋转公式(Rodrigues Rotation Formula)

    [有限位移旋量理论]罗德里格旋转公式(Rodrigues Rotation Formula) 有限位移旋量理论也称位移旋量,是李群se(3)的元素,有限位移可以描述绕轴的旋转和平移,有限位移的研究可以 ...

  5. 罗德里格旋转公式 (Rodrigues’ Rotation Formula)

    关于三维空间中的旋转,我们以前提到过基于欧拉角的旋转表达矩阵,它们分别描述了围绕 x 轴.y 轴.z 轴旋转后坐标应当如何变化.事实上,我们可以更进一步,推导出一个通用的.围绕过原点的任意轴旋转的公式 ...

  6. 视觉SLAM十四讲--罗德里格斯公式(Rodrigues’s Formula)推导

    前言 之前看了高博的<视觉SLAM十四讲>,里面有一段关于罗德里格斯公式,但是高博没有给出具体推导.然后我查了很多博主,都没有给出怎么推到 R = cos ⁡ θ I + ( 1 − co ...

  7. Rodrigues’ Rotation Formula罗德里格旋转公式详解(坐标轴旋转)

    在计算机图形学中,会遇见旋转轴标定之类的问题,因此会涉及到三维空间中的旋转,也就是数学上的罗德里格旋转公式(Rodrigues' Rotation Formula). 首先直接先把公式整上: 接下来进 ...

  8. opencv基础:罗德里格斯旋转公式(Rodrigues' rotation formula)推导 rodrigues()函数原理

    参考:1-https://openhome.cc/Gossip/WebGL/Rodrigues.html(比较好的理解流程) 2-https://www.cnblogs.com/wtyuan/p/12 ...

  9. 关于罗德里格斯公式(Rodrigues‘sFormula)的详细推导过程

    关于罗德里格斯公式[Rodrigues'sFormula]的详细推导过程 1 旋转向量 2 罗德里格斯公式 2.1 罗德里格斯公式定义 2.2 罗德里格斯公式推导 3 旋转矩阵到旋转向量的转换 1 旋 ...

最新文章

  1. 身体器官工作表一览,别熬夜
  2. lisp直线连接圆象限电_圆并不难,为什么很多考生就是学不会?
  3. EEPROM的操作---SPI接口和I2C接口
  4. Linux 释放cpugpu内存、显存和硬盘
  5. calender获取日期前几月_java获取当前时间和前一天日期(实现代码)
  6. python argparse_Python 命令行之旅:argparse、docopt、click 和 fire 总结篇
  7. commix 命令注入获取信息 (好东西)
  8. [脚本编程] 过云盾、D盾各种盾shell
  9. Flash知识点总结
  10. 解决Eclipse开发工具Debug调试JDK源码无法查看变量值
  11. Android 透明度alpha换算表
  12. Windows系统连接蓝牙音箱,已连接,没有声音
  13. Dev-C++下的char字符数组strlen()诡异事件
  14. IFD-x 微型红外成像仪(模块)的温度测量和成像精度
  15. 百度架构师手把手教深度学习之心得
  16. 初中计算机表格处理教案,中学信息技术教案《制作excel表格》
  17. 剑指spring源码(三)
  18. 20180316 三对角矩阵
  19. LoadRunner下如何监控Windows系统资源
  20. 2020年第十一届C/C++ A组第二场蓝桥杯省赛真题

热门文章

  1. 32个Python爬虫项目让你一次吃到撑
  2. 音视频入门H264AAC
  3. 致批驳哥德尔不完全性定理者
  4. 2021中青杯B题港珠澳大桥桥梁设计与安全策略思路代码
  5. 谷歌浏览器出现应用程序无法启动,提示应用程序的并行配置不正确
  6. Mac使用Aria2下载百度网盘,突破下载限速的方法教程
  7. 微信支付API3 APP【统一下单 APIV3】
  8. [-Flutter趣玩篇-] 出神入化的Align+动画
  9. 如何把两张图片拼在一起?
  10. 京东关于区块链的发展历程