罗德里格斯旋转公式及其推导

  • 罗德里格斯(Rodrigues)旋转公式及其推导
    • 三维空间旋转矩阵
    • 罗德里格斯旋转方程(Rodrigues)
      • *叉积矩阵*
      • *拉格朗日公式(向量三重积展开)*
      • *罗德里格斯旋转方程推导*

罗德里格斯(Rodrigues)旋转公式及其推导

三维空间旋转矩阵

计算机图形学中,三维空间下绕不同坐标轴的旋转矩阵如下(右手系逆时针):
绕X轴旋转: R x = [ 1 0 0 0 c o s θ − sin ⁡ θ 0 s i n θ cos ⁡ θ ] (1) R_x = \left[ \begin{matrix} \ 1 & 0 & 0 \\ \ 0 &cos \theta & -\sin \theta \\ \ 0 &sin \theta& \cos \theta \end{matrix} \right] \tag{1} Rx​=⎣⎡​ 1 0 0​0cosθsinθ​0−sinθcosθ​⎦⎤​(1)

绕Y轴旋转: R y = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] (2) R_y= \left[ \begin{matrix} \cos \theta & 0 & \sin \theta \\ \ 0 & 1 & 0 \\ -\sin \theta & 0 & \cos \theta \end{matrix} \right] \tag{2} Ry​=⎣⎡​cosθ 0−sinθ​010​sinθ0cosθ​⎦⎤​(2)

绕Z轴旋转: R z = [ c o s θ − sin ⁡ θ 0 s i n θ cos ⁡ θ 0 0 0 1 ] (3) R_z = \left[ \begin{matrix} \ cos \theta & -\sin \theta & 0 \\ \ sin \theta& \cos \theta & 0 \\ 0 & 0 & 1 \end{matrix} \right] \tag{3} Rz​=⎣⎡​ cosθ sinθ0​−sinθcosθ0​001​⎦⎤​(3)

可以看到,这三个旋转矩阵,只有在三维空间下物体围绕某一特定坐标轴旋转的特殊情况下才能使用。从几何角度来讲,三维空间中任意一个旋转(绕任意轴),都可以分解为绕X轴,Y轴,Z轴旋转的复合。即对于任意旋转轴 n ⃗ \vec{n} n ,旋转角 θ \theta θ: R ( n ⃗ , θ ) = R ( x ⃗ , θ x ) ∗ R ( y ⃗ , θ y ) ∗ R ( z ⃗ , θ z ) . (4) R(\vec{n},\theta) = R(\vec{x},\theta x) * R(\vec{y},\theta y) * R(\vec{z},\theta z)\,.\tag{4} R(n ,θ)=R(x ,θx)∗R(y ​,θy)∗R(z ,θz).(4)
然而,这样分解与矩阵运算的计算量显然是十分大的。

罗德里格斯旋转方程(Rodrigues)

罗德里格斯旋转公式,用于表示空间中任一向量 v ⃗ \vec{v} v ,沿任一旋转轴 k ⃗ \vec{k} k , 旋转任一角度 θ \theta θ后,得到的结果: v ⃗ r o t = v ⃗ cos ⁡ θ + ( 1 − cos ⁡ θ ) ( k ⃗ ⋅ v ⃗ ) ⋅ k ⃗ + sin ⁡ θ ∗ k ⃗ × v ⃗ (5) \vec{v}_{rot} = \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \tag{5} v rot​=v cosθ+(1−cosθ)(k ⋅ v )⋅k +sinθ∗k ×v (5)
这个式子还不是很直观,所以需要引入另外两个公式来再推导两步化简:

叉积矩阵

~~~~~~~        关于 a ⃗ × b ⃗ \vec{a} \times \vec{b} a ×b ,有: ( x a y a z a ) × ( x b y b z b ) = ( y a z b − z a y b z a x b − x a z b x a y b − y a x b ) (6) \begin{pmatrix} x_a \\y_a \\ z_a \end{pmatrix} \times \begin{pmatrix} x_b \\y_b \\ z_b \end{pmatrix}= \begin{pmatrix} y_az_b - z_ay_b \\z_ax_b - x_az_b \\ x_ay_b -y_ax_b \end{pmatrix}\tag{6} ⎝⎛​xa​ya​za​​⎠⎞​×⎝⎛​xb​yb​zb​​⎠⎞​=⎝⎛​ya​zb​−za​yb​za​xb​−xa​zb​xa​yb​−ya​xb​​⎠⎞​(6)
~~~~~~~        可以写成矩阵形式: ( y a z b − z a y b z a x b − x a z b x a y b − y a x b ) = ( 0 − z a y a z a 0 − x a − y a x a 0 ) ⋅ ( x b y b z b ) (7) \begin{pmatrix} y_az_b - z_ay_b \\z_ax_b - x_az_b \\ x_ay_b -y_ax_b \end{pmatrix} = \begin{pmatrix} 0&-z_a & y_a \\z_a &0&-x_a \\ -y_a &x_a &0 \end{pmatrix} \cdot \begin{pmatrix} x_b \\y_b \\ z_b \end{pmatrix}\tag{7} ⎝⎛​ya​zb​−za​yb​za​xb​−xa​zb​xa​yb​−ya​xb​​⎠⎞​=⎝⎛​0za​−ya​​−za​0xa​​ya​−xa​0​⎠⎞​⋅⎝⎛​xb​yb​zb​​⎠⎞​(7)
~~~~~~~        则可记 a ⃗ \vec{a} a 的 " 叉积矩阵 " 为:
R a ⃗ = ( 0 − z a y a z a 0 − x a − y a x a 0 ) (8) R_{\vec{a}} = \begin{pmatrix} 0&-z_a & y_a \\z_a &0&-x_a \\ -y_a &x_a &0 \end{pmatrix} \tag{8} Ra ​=⎝⎛​0za​−ya​​−za​0xa​​ya​−xa​0​⎠⎞​(8)
~~~~~~~        对于任意向量 b ⃗ \vec{b} b , 有 :
a ⃗ × b ⃗ = R a ⃗ ⋅ b ⃗ (9) \vec{a} \times \vec{b} = R_{\vec{a}} \cdot \vec{b}\tag{9} a ×b =Ra ​⋅b (9)

拉格朗日公式(向量三重积展开)

~~~~~~~        对于三个向量 a ⃗ b ⃗ c ⃗ \vec{a} ~\vec{b} ~\vec{c} a  b  c ,向量的三重积定义为:
a ⃗ × ( b ⃗ × c ⃗ ) \vec{a} \times (\vec{b} \times \vec{c}) a ×(b ×c )
~~~~~~~        值得注意的是,一般来说 :
a ⃗ × ( b ⃗ × c ⃗ ) ≠ ( a ⃗ × b ⃗ ) × c ⃗ \vec{a} \times (\vec{b} \times \vec{c}) \neq(\vec{a} \times \vec{b}) \times \vec{c} a ×(b ×c )​=(a ×b )×c
~~~~~~~        以下恒等式,称作三重积展开或拉格朗日公式,对于任意向量 a ⃗ 、 b ⃗ 、 c ⃗ \vec{a}、\vec{b}、\vec{c} a 、b 、c 均成立 :

a ⃗ × ( b ⃗ × c ⃗ ) = ( a ⃗ ⋅ c ⃗ ) b ⃗ − ( a ⃗ ⋅ b ⃗ ) c ⃗ (10) \vec{a} \times (\vec{b} \times \vec{c}) = (\vec{a} \cdot \vec{c}) ~\vec{b} -(\vec{a} \cdot \vec{b}) ~\vec{c}\tag{10} a ×(b ×c )=(a ⋅c ) b −(a ⋅b ) c (10)

罗德里格斯旋转方程推导


~~~~~~~        如上图所示,描述了一个空间中的向量 v ⃗ \vec{v} v ,沿旋转轴 k ⃗ \vec{k} k (单位向量), 逆时针旋转了 θ \theta θ角度到 v ⃗ r o t \vec{v}_{rot} v rot​的几何关系。
~~~~~~~        在 v ⃗ 与 k ⃗ \vec{v} 与 \vec{k} v 与k 组成的平面上, v ⃗ \vec{v} v 可以分解为:与 k ⃗ \vec{k} k 垂直的分量 v ⊥ ⃗ \vec{v_{\perp}} v⊥​ ​和与 k ⃗ \vec{k} k 平行的分量 v ∥ ⃗ \vec{v_{\parallel}} v∥​ ​,有:
v ⃗ = v ∥ ⃗ + v ⊥ ⃗ v ⃗ r o t = v ⃗ r o t ∥ + v ⃗ r o t ⊥ (11) \vec{v} = \vec{v_{\parallel}} + \vec{v_{\perp}} \tag{11} ~~ \vec{v}_{rot} = \vec{v}_{rot\parallel} + \vec{v}_{rot\perp} v =v∥​ ​+v⊥​ ​  v rot​=v rot∥​+v rot⊥​(11)
~~~~~~~        其中,易得:
v ∥ ⃗ = ( v ⃗ ⋅ k ⃗ ) ∗ k ⃗ (12) \vec{v_{\parallel}} = (\vec{v} \cdot \vec{k}) * \vec{k}\tag{12} v∥​ ​=(v ⋅k )∗k (12)
~~~~~~~        则,由(11)式:
v ⊥ ⃗ = v ⃗ − v ∥ ⃗ = v ⃗ − ( v ⃗ ⋅ k ⃗ ) ∗ k ⃗ (13) \vec{v_{\perp}} = \vec{v} - \vec{v_{\parallel}} = \vec{v} - (\vec{v} \cdot \vec{k}) * \vec{k}\tag{13} v⊥​ ​=v −v∥​ ​=v −(v ⋅k )∗k (13)
~~~~~~~        由 (10)式拉格朗日公式:
v ⃗ − ( v ⃗ ⋅ k ⃗ ) ∗ k ⃗ = ( k ⃗ ⋅ k ⃗ ) ∗ v ⃗ − ( k ⃗ ⋅ v ⃗ ) ∗ k ⃗ = k ⃗ × ( v ⃗ × k ) ⃗ (14) \vec{v} - (\vec{v} \cdot \vec{k}) * \vec{k} = (\vec{k} \cdot \vec{k}) *\vec{v} - (\vec{k} \cdot \vec{v}) * \vec{k} = \vec{k} \times(\vec{v}\times \vec{k)}\tag{14} v −(v ⋅k )∗k =(k ⋅k )∗v −(k ⋅v )∗k =k ×(v ×k) ​(14)
~~~~~~~        则:
v ⊥ ⃗ = k ⃗ × ( v ⃗ × k ) ⃗ = − k ⃗ × ( k ⃗ × v ) ⃗ (15) \vec{v_{\perp}} = \vec{k} \times(\vec{v}\times \vec{k)} = -\vec{k} \times(\vec{k}\times \vec{v)}\tag{15} v⊥​ ​=k ×(v ×k) ​=−k ×(k ×v) ​(15)
~~~~~~~        根据几何关系,平行于旋转轴的分量在旋转时不会改变其幅度和方向,因此有:
v ⃗ r o t ∥ = v ⃗ ∥ (16) \vec{v}_{rot\parallel} = \vec{v}_{\parallel} \tag{16} v rot∥​=v ∥​(16)
~~~~~~~        解旋转后的垂直分量,由图中的几何关系可得 v ⃗ r o t ⊥ \vec{v}_{rot\perp} v rot⊥​可以分解为 k ⃗ × v ⃗ \vec{k} \times \vec{v} k ×v 和 v ⃗ ⊥ \vec{v}_{\perp} v ⊥​方向上两个分量相加,即

v ⃗ r o t ⊥ = v ⃗ r o t ⊥ ⋅ k ⃗ × v ⃗ ∣ k ⃗ × v ⃗ ∣ + v ⃗ r o t ⊥ ⋅ v ⃗ ⊥ ∣ v ⃗ ⊥ ∣ = sin ⁡ θ ∗ ( k ⃗ × v ⃗ ) + cos ⁡ θ ∗ v ⃗ ⊥ (17) \begin{aligned} \vec{v}_{rot\perp} = \vec{v}_{rot\perp} \cdot \frac{\vec{k} \times \vec{v}}{ \vert \vec{k} \times \vec{v} \vert}+ \vec{v}_{rot\perp} \cdot \frac{\vec{v}_{\perp}}{\vert\vec{v}_{\perp\vert}} = \sin\theta * (\vec{k} \times \vec{v}) + \cos\theta * \vec{v}_{\perp} \tag{17} \end{aligned} v rot⊥​=v rot⊥​⋅∣k ×v ∣k ×v ​+v rot⊥​⋅∣v ⊥∣​v ⊥​​=sinθ∗(k ×v )+cosθ∗v ⊥​​(17)
~~~~~~~        将(12)(16)(17)式代入,有:
v ⃗ r o t = v ⃗ ∥ + cos ⁡ θ ∗ ( v ⃗ − v ⃗ ∥ ) + sin ⁡ θ ∗ ( k ⃗ × v ⃗ ) = cos ⁡ θ v ⃗ + ( 1 − cos ⁡ θ ) v ⃗ ∥ + sin ⁡ θ ( k ⃗ × v ⃗ ) = v ⃗ cos ⁡ θ + ( 1 − cos ⁡ θ ) ( k ⃗ ⋅ v ⃗ ) ⋅ k ⃗ + sin ⁡ θ ∗ k ⃗ × v ⃗ = 式 5 \begin{aligned} \vec{v}_{rot}&= \vec{v}_{\parallel} + \cos\theta * (\vec{v} - \vec{v}_{\parallel}) + \sin\theta * (\vec{k} \times \vec{v})\\&=\cos\theta\vec{v} + (1 - \cos\theta)\vec{v}_\parallel + \sin\theta(\vec{k} \times \vec{v})\\&=\vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v}&=式5 \end{aligned} v rot​​=v ∥​+cosθ∗(v −v ∥​)+sinθ∗(k ×v )=cosθv +(1−cosθ)v ∥​+sinθ(k ×v )=v cosθ+(1−cosθ)(k ⋅ v )⋅k +sinθ∗k ×v ​=式5​
~~~~~~~        此式还可继续化简,变成矩阵形式:

v ⃗ r o t = v ⃗ cos ⁡ θ + ( 1 − cos ⁡ θ ) ( k ⃗ ⋅ v ⃗ ) ⋅ k ⃗ + sin ⁡ θ ∗ k ⃗ × v ⃗ = v ⃗ − v ⃗ + v ⃗ cos ⁡ θ + ( 1 − cos ⁡ θ ) ( k ⃗ ⋅ v ⃗ ) ⋅ k ⃗ + sin ⁡ θ ∗ k ⃗ × v ⃗ = v ⃗ − ( 1 − cos ⁡ θ ) v ⃗ + ( 1 − cos ⁡ θ ) ( k ⃗ ⋅ v ⃗ ) ⋅ k ⃗ + sin ⁡ θ ∗ k ⃗ × v ⃗ = v ⃗ + ( 1 − cos ⁡ θ ) ( ( k ⃗ ⋅ v ⃗ ) k ⃗ − ( k ⃗ ⋅ k ⃗ ) v ⃗ ) + sin ⁡ θ ∗ k ⃗ × v ⃗ = v ⃗ + sin ⁡ θ k ⃗ × v ⃗ + ( 1 − cos ⁡ θ ) k ⃗ × ( k ⃗ × v ⃗ ) \begin{aligned} \vec{v}_{rot} &= \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \\&= \vec{v} - \vec{v} + \vec{v} \cos\theta + (1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v} \\&= \vec{v} - (1-\cos\theta)\vec{v} +(1-\cos\theta)(\vec{k} \cdot\ \vec{v})\cdot \vec{k} + \sin\theta *\vec{k} \times \vec{v}\\&=\vec{v} + (1-\cos\theta)((\vec{k}\cdot\vec{v})\vec{k} - (\vec{k}\cdot\vec{k})\vec{v}) + \sin\theta *\vec{k} \times \vec{v} \\&=\vec{v}+\sin\theta\vec{k}\times\vec{v}+ (1-\cos\theta)\vec{k}\times(\vec{k}\times\vec{v}) \end{aligned} v rot​​=v cosθ+(1−cosθ)(k ⋅ v )⋅k +sinθ∗k ×v =v −v +v cosθ+(1−cosθ)(k ⋅ v )⋅k +sinθ∗k ×v =v −(1−cosθ)v +(1−cosθ)(k ⋅ v )⋅k +sinθ∗k ×v =v +(1−cosθ)((k ⋅v )k −(k ⋅k )v )+sinθ∗k ×v =v +sinθk ×v +(1−cosθ)k ×(k ×v )​
~~~~~~~        设 k ⃗ \vec{k} k 的叉积矩阵为 R k ⃗ R_{\vec{k}} Rk ​,有:
v ⃗ r o t = v ⃗ + sin ⁡ θ R k ⃗ ∗ v ⃗ + ( 1 − cos ⁡ θ ) R k ⃗ ∗ R k ⃗ ∗ v ⃗ = ( I + sin ⁡ θ R k ⃗ + ( 1 − cos ⁡ θ ) R k ⃗ 2 ) ∗ v ⃗ = M v ⃗ \begin{aligned} \vec{v}_{rot} &= \vec{v} + \sin\theta R_{\vec{k}} * \vec{v} + (1-\cos\theta) R_{\vec{k}} *R_{\vec{k}} * \vec{v} \\&=(I + \sin\theta R_{\vec{k}} + (1-\cos\theta) R_{\vec{k}}^2) * \vec{v}\\&=M\vec{v} \end{aligned} v rot​​=v +sinθRk ​∗v +(1−cosθ)Rk ​∗Rk ​∗v =(I+sinθRk ​+(1−cosθ)Rk 2​)∗v =Mv ​
~~~~~~~        其中:
M = I + sin ⁡ θ R k ⃗ + ( 1 − cos ⁡ θ ) R k ⃗ 2 M = I + \sin\theta R_{\vec{k}} + (1-\cos\theta) R_{\vec{k}}^2 M=I+sinθRk ​+(1−cosθ)Rk 2​
~~~~~~~        为三维空间中任意向量绕轴 k ⃗ \vec{k} k 逆时针旋转 θ \theta θ角度的旋转矩阵。

罗德里格斯(Rodrigues)旋转公式及其推导相关推荐

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

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

  2. 罗德里格斯公式 理解、推导

      罗德里格斯公式(Rodriguez formula)是计算机视觉中的一大经典公式,在描述相机位姿的过程中很常用.公式: R = I + s i n ( θ ) K + ( 1 − c o s ( ...

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

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

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

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

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

    参考本处博客

  6. 二维图形旋转公式的推导

    关于二维图形旋转可能在很多计算机图形学相关的书籍上都会介绍,然而真正理解公式推导过程的却讲得不多.那么如何推导出二维图形绕某一点旋转的公式呢?我在这里就将其推导过程简要的说明一下. 其实推导过程比较简 ...

  7. 坐标旋转公式(推导)

    公式: x1=cos(angle)*x-sin(angle)*y; y1=cos(angle)*y+sin(angle)*x; 其中x,y表示物体相对于旋转点旋转angle的角度之前的坐标,x1,y1 ...

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

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

  9. 第十五届东北四省大学生程序设计大赛J. Transform(计算几何,罗德里格斯旋转公式)

    题目链接:Problem - J - Codeforces 题意: 给出两个点求第二个点绕从原点到第一个点这条轴旋转 r或 − r 得到两个点,输出 z  坐标更大的那个点: 首先普及一下罗德里格斯旋 ...

最新文章

  1. python opencv 中bmp转raw格式图片并展示
  2. macOS配置Apache服务器
  3. 推荐系统CTR预估学习路线:引入注意力机制
  4. char添加一个字符_LINUX字符设备驱动模型分析(起始篇)
  5. 十七条黄金定律!(心态是命运的控制塔)
  6. 从零开始写项目第八篇【将未完成的项目发布在Tomcat上】
  7. gff3转mysql_GBrowse的安装和使用
  8. 面试必会 HashMap抄底不再怕
  9. OOB模式下Exit事件的处理
  10. 显示器显示颜色差,导致BUG一例
  11. 连接游戏服务器网络延迟高,玩游戏网络延迟高怎么办 网络卡Ping值很高的解决方法...
  12. Android中浏览PDF文件
  13. 阿里云打造离线下载服务器
  14. 一位宝石爱好者的零起点建站攻略
  15. 面试题:十瓶牛奶每天至少喝一瓶,直到喝完到底有多少种喝法
  16. Windows10系统安装与初始化设置
  17. flutter - 强制横屏/竖屏
  18. Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
  19. java 过期数据_TTL过期的数据包丢失
  20. 计算机思维典型方法有抽象,传说中的四大编程思维 一篇彻底搞清楚

热门文章

  1. 离散数学 --- 谓词逻辑 --- 谓词合式公式推理
  2. SPSS软件使用教程(2),SPSS统计分析软件 27中文版下载安装
  3. css div 画对角线
  4. 用短视频作色情APP的外衣?这伙人被江苏泰州警方抓了!
  5. 前端基础总结:HTML基础知识
  6. 【计几】闵可夫斯基和 二分判断点是否在凸包内
  7. c语言如何打印矩形图形的程序 五行七列,C语言程序计 第二讲.printf打印图形.转义字符.格式声明符.doc...
  8. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System
  9. Android蓝牙开发(一)
  10. 刷PHOENIX的BIOS超详细教程