Java教程

坐标变换中旋转矩阵的前乘和后乘

本文主要是介绍坐标变换中旋转矩阵的前乘和后乘,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、旋转矩阵的两种用法
  • 二、旋转矩阵的后乘(右乘)
  • 三、旋转矩阵的前乘(左乘)

一、旋转矩阵的两种用法

我在旋转矩阵的两种用法一文中提出了关于 R R R的两个基本变换关系: 旧 坐 标 = R ∗ 新 坐 标 ( 坐 标 转 换 公 式 ) 旧坐标=R*新坐标(坐标转换公式) 旧坐标=R∗新坐标(坐标转换公式) 新 向 量 = R ∗ 旧 向 量 ( 向 量 转 移 公 式 ) 新向量=R*旧向量(向量转移公式) 新向量=R∗旧向量(向量转移公式)这两个公式便于记忆,但是不够严谨,严谨地用数学公式表示,我们可以写成: [ 0 x , 0 y , 0 z ] T = R ∗ [ 1 x , 1 y , 1 z ] T [^0x,^0y,^0z]^T = R*[^1x,^1y,^1z]^T [0x,0y,0z]T=R∗[1x,1y,1z]T [ i ^ 1 j ^ 1 k ^ 1 ] = R [ i ^ 0 j ^ 0 k ^ 0 ] \left[ \begin{matrix} \hat i_1&\hat j_1&\hat k_1\end{matrix}\right] = R\left[ \begin{matrix} \hat i_0&\hat j_0&\hat k_0\end{matrix}\right] [i^1​​j^​1​​k^1​​]=R[i^0​​j^​0​​k^0​​]其中:

  • [ 0 x , 0 y , 0 z ] T [^0x,^0y,^0z]^T [0x,0y,0z]T为某个固定点在固定坐标系中的旧坐标, [ 1 x , 1 y , 1 z ] T [^1x,^1y,^1z]^T [1x,1y,1z]T为这个坐标点在旋转后的坐标系中的坐标。
  • [ i ^ 1 j ^ 1 k ^ 1 ] \left[ \begin{matrix} \hat i_1&\hat j_1&\hat k_1\end{matrix}\right] [i^1​​j^​1​​k^1​​]为旋转后动坐标系的三组新的基向量, [ i ^ 0 j ^ 0 k ^ 0 ] \left[ \begin{matrix} \hat i_0&\hat j_0&\hat k_0\end{matrix}\right] [i^0​​j^​0​​k^0​​]为固定坐标系(或者是旋转前与之重合的动坐标系)的三组旧的基向量。

通过以上的旋转矩阵 R R R的基本性质,我们可以推导出关于前乘和后乘的相关作用。

二、旋转矩阵的后乘(右乘)

旋转矩阵的后乘(post-multiply)用于欧拉角系统,欧拉角有多种组合,每个旋转矩阵都以前一个坐标系为基准,我们简单地假设三个旋转矩阵为 R 1 、 R 2 、 R 3 R_1、R_2、R_3 R1​、R2​、R3​。我们假设在物体坐标系中的某点的坐标为 [ b x , b y , b z ] = [ 3 x , 3 y , 3 z ] [^bx,^by,^bz]=[^3x,^3y,^3z] [bx,by,bz]=[3x,3y,3z],该点在固定坐标系中的坐标为 [ 0 x , 0 y , 0 z ] = [ s x , s y , s z ] [^0x,^0y,^0z]=[^sx,^sy,^sz] [0x,0y,0z]=[sx,sy,sz],在n级新坐标系中的坐标为 [ n x , n y , n z ] [^nx,^ny,^nz] [nx,ny,nz],我们可以得到以下坐标准换公式: [ 0 x , 0 y , 0 z ] = R 1 [ 1 x , 1 y , 1 z ] [^0x,^0y,^0z]=R_1[^1x,^1y,^1z] [0x,0y,0z]=R1​[1x,1y,1z] [ 1 x , 1 y , 1 z ] = R 2 [ 2 x , 2 y , 2 z ] [^1x,^1y,^1z]=R_2[^2x,^2y,^2z] [1x,1y,1z]=R2​[2x,2y,2z] [ 2 x , 2 y , 2 z ] = R 3 [ 3 x , 3 y , 3 z ] [^2x,^2y,^2z]=R_3[^3x,^3y,^3z] [2x,2y,2z]=R3​[3x,3y,3z]我们容易得到: [ 0 x , 0 y , 0 z ] = R 1 R 2 R 3 [ 3 x , 3 y , 3 z ] [^0x,^0y,^0z]=R_1R_2R_3[^3x,^3y,^3z] [0x,0y,0z]=R1​R2​R3​[3x,3y,3z]从而得到了 R s b = R 1 R 2 R 3 R_{sb}=R_1R_2R_3 Rsb​=R1​R2​R3​满足: [ s x , s y , s z ] = R [ b x , b y , b z ] [^sx,^sy,^sz]=R[^bx,^by,^bz] [sx,sy,sz]=R[bx,by,bz]

三、旋转矩阵的前乘(左乘)

旋转矩阵的前乘(pre-multiply)用于坐标系相对于固定坐标系进行旋转。我们不妨讨论RPY角系统(注意RPY角不是欧拉角,这点菜鸟容易混淆),也就是先绕固定坐标系 x ^ s \hat x_s x^s​轴旋转 γ \gamma γ角,再绕固定坐标系 y ^ s \hat y_s y^​s​轴旋转 β \beta β角,最后绕固定坐标系 z ^ s \hat z_s z^s​轴旋转 α \alpha α角。我们可以得到三个旋转矩阵 R 1 = R ( x ^ s , γ ) R_1 = R(\hat x_s,\gamma) R1​=R(x^s​,γ) R 2 = R ( y ^ s , β ) R_2 = R(\hat y_s,\beta) R2​=R(y^​s​,β) R 3 = R ( z ^ s , α ) R_3 = R(\hat z_s,\alpha) R3​=R(z^s​,α)
我们假设固定坐标系的三个基向量为 x ^ 0 = x ^ \hat x_0 = \hat x x^0​=x^, y ^ 0 = y ^ \hat y_0 = \hat y y^​0​=y^​, z ^ 0 = z ^ \hat z_0 = \hat z z^0​=z^,经过第一次旋转之后的一级新坐标系的三个基向量为 x ^ 1 \hat x_1 x^1​, y ^ 1 \hat y_1 y^​1​, z ^ 1 \hat z_1 z^1​,经过第二次旋转之后的二级新坐标系的三个基向量为 x ^ 2 \hat x_2 x^2​, y ^ 2 \hat y_2 y^​2​, z ^ 2 \hat z_2 z^2​,经过第三次旋转之后的三级新坐标系的三个基向量为 x ^ 3 = x ^ b \hat x_3=\hat x_b x^3​=x^b​, y ^ 3 = y ^ b \hat y_3=\hat y_b y^​3​=y^​b​, z ^ 3 = z ^ b \hat z_3=\hat z_b z^3​=z^b​。根据向量转移公式,我们可以得到: x ^ n + 1 = R n + 1 x ^ n \hat x_{n+1} = R_{n+1} \hat x_n x^n+1​=Rn+1​x^n​ y ^ n + 1 = R n + 1 y ^ n \hat y_{n+1} = R_{n+1} \hat y_n y^​n+1​=Rn+1​y^​n​ z ^ n + 1 = R n + 1 z ^ n \hat z_{n+1} = R_{n+1} \hat z_n z^n+1​=Rn+1​z^n​也就是 [ x ^ n + 1 y ^ n + 1 z ^ n + 1 ] = R n + 1 [ x ^ n y ^ n z ^ n ] \left[ \begin{matrix} \hat x_{n+1}&\hat y_{n+1}&\hat z_{n+1}\end{matrix}\right] = R_{n+1}\left[ \begin{matrix}\hat x_{n}&\hat y_{n}&\hat z_{n}\end{matrix}\right] [x^n+1​​y^​n+1​​z^n+1​​]=Rn+1​[x^n​​y^​n​​z^n​​]分别把1/2/3代入到公式中,我们能够得到: [ x ^ 1 y ^ 1 z ^ 1 ] = R 1 [ x ^ 0 y ^ 0 z ^ 0 ] \left[ \begin{matrix} \hat x_{1}&\hat y_{1}&\hat z_{1}\end{matrix}\right] = R_{1}\left[ \begin{matrix}\hat x_{0}&\hat y_{0}&\hat z_{0}\end{matrix}\right] [x^1​​y^​1​​z^1​​]=R1​[x^0​​y^​0​​z^0​​] [ x ^ 2 y ^ 2 z ^ 2 ] = R 2 [ x ^ 1 y ^ 1 z ^ 1 ] \left[ \begin{matrix} \hat x_{2}&\hat y_{2}&\hat z_{2}\end{matrix}\right] = R_{2}\left[ \begin{matrix}\hat x_{1}&\hat y_{1}&\hat z_{1}\end{matrix}\right] [x^2​​y^​2​​z^2​​]=R2​[x^1​​y^​1​​z^1​​] [ x ^ 3 y ^ 3 z ^ 3 ] = R 3 [ x ^ 2 y ^ 2 z ^ 2 ] \left[ \begin{matrix} \hat x_{3}&\hat y_{3}&\hat z_{3}\end{matrix}\right] = R_{3}\left[ \begin{matrix}\hat x_{2}&\hat y_{2}&\hat z_{2}\end{matrix}\right] [x^3​​y^​3​​z^3​​]=R3​[x^2​​y^​2​​z^2​​]这样可以简单地推导得到: [ x ^ 3 y ^ 3 z ^ 3 ] = R 3 R 2 R 1 [ x ^ 0 y ^ 0 z ^ 0 ] \left[ \begin{matrix} \hat x_{3}&\hat y_{3}&\hat z_{3}\end{matrix}\right] = R_{3}R_{2}R_{1}\left[ \begin{matrix}\hat x_{0}&\hat y_{0}&\hat z_{0}\end{matrix}\right] [x^3​​y^​3​​z^3​​]=R3​R2​R1​[x^0​​y^​0​​z^0​​]我们可以写出物体坐标系相对于固定坐标系的一次性等效旋转矩阵 R = R 3 R 2 R 1 R=R_3R_2R_1 R=R3​R2​R1​,从而满足 [ x ^ b y ^ b z ^ b ] = R [ x ^ s y ^ s z ^ s ] \left[ \begin{matrix} \hat x_{b}&\hat y_{b}&\hat z_{b}\end{matrix}\right] = R\left[ \begin{matrix}\hat x_{s}&\hat y_{s}&\hat z_{s}\end{matrix}\right] [x^b​​y^​b​​z^b​​]=R[x^s​​y^​s​​z^s​​]即 R b = R R s R_b=RR_s Rb​=RRs​注意到这里 R 1 R 2 R 3 R_1R_2R_3 R1​R2​R3​的顺序满足左乘关系。

这篇关于坐标变换中旋转矩阵的前乘和后乘的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!