【愚公系列】2023年08月 3D数学-矩阵运算和变换


前言

1.矩阵的定义

矩阵是由数字或符号排成的矩形阵列。矩阵中的每个数字或符号称为元素。矩阵用于在数学、物理学、工程学和计算机科学等领域中描述和解决线性方程组、向量、转换、空间几何等问题。矩阵通常由方括号表示,如下所示:

A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{bmatrix} A= a11a21am1a12a22am2a1na2namn

其中, a i j a_{ij} aij 表示矩阵 A A A 的第 i i i 行第 j j j 列的元素。 m m m 表示矩阵的行数, n n n 表示矩阵的列数。如果一个矩阵的行数和列数相等,那么它就是一个方阵。

2.矩阵和方程的关系

矩阵和方程有着密切的关系,矩阵可以用来表示方程的系数,从而可以通过矩阵运算来求解方程。

具体来说,对于一个包含 n n n个未知数的线性方程组,可以将其表示为如下形式:

{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n = b_2 \\ \cdots \\ a_{n1}x_1 + a_{n2}x_2 + \cdots + a_{nn}x_n = b_n \\ \end{cases} a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+an2x2++annxn=bn

其中, a i j a_{ij} aij表示第 i i i个方程中第 j j j个未知数的系数, b i b_i bi表示第 i i i个方程的等式右边的常数。

将上述方程组中的系数和常数放在一个 n × ( n + 1 ) n\times(n+1) n×(n+1)的矩阵中,即:

( a 11 a 12 ⋯ a 1 n b 1 a 21 a 22 ⋯ a 2 n b 2 ⋯ ⋯ ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n b n ) \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\ a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} & b_n \\ \end{pmatrix} a11a21an1a12a22an2a1na2nannb1b2bn

可以发现,在这个矩阵中,每个方程的系数和常数都被组织为矩阵的一行,而整个方程组则被组织为矩阵的 n n n行。这个矩阵被称为增广矩阵。

对于这个增广矩阵,可以通过一系列矩阵变换来将其化简为一个简单的形式,从而可以求解这个方程组。

矩阵变换的具体步骤包括交换矩阵中的两行、将矩阵中某一行乘以一个非零常数、将矩阵中某一行加上另一行的某个倍数。通过这些矩阵变换,可以将增广矩阵化为如下形式:

( a 11 ′ a 12 ′ ⋯ a 1 n ′ b 1 ′ 0 a 22 ′ ⋯ a 2 n ′ b 2 ′ ⋯ ⋯ ⋯ ⋯ ⋯ 0 0 ⋯ a n n ′ b n ′ ) \begin{pmatrix} a_{11}^{'} & a_{12}^{'} & \cdots & a_{1n}^{'} & b_1^{'} \\ 0 & a_{22}^{'} & \cdots & a_{2n}^{'} & b_2^{'} \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ 0 & 0 & \cdots & a_{nn}^{'} & b_n^{'} \\ \end{pmatrix} a1100a12a220a1na2nannb1b2bn

其中,矩阵中的斜线上方都是 0 0 0,而斜线上的元素则称为主元。

通过这种化简方式,可以用简单的代数运算来解决方程组问题,矩阵成为了一个重要的工具。

在这里插入图片描述

一、矩阵运算和变换

1.矩阵运算

1.1 矩阵加减

矩阵加减是指两个相同维数的矩阵进行加减运算。

设A和B为两个n行m列的矩阵,则它们的和C = A + B也是一个n行m列的矩阵,其中C的每个元素为A和B对应元素的和,即Cij = Aij + Bij。

同理,它们的差D = A - B也是一个n行m列的矩阵,其中D的每个元素为A和B对应元素的差,即Dij = Aij - Bij。

在这里插入图片描述
在这里插入图片描述

1.2 矩阵乘标量

矩阵乘标量是指将一个标量(通常为实数或复数)乘以一个矩阵的每一个元素。假设 A A A是一个 m × n m \times n m×n的矩阵, k k k是一个标量,则 A A A乘以 k k k的结果为:

k A = [ k a 11 k a 12 ⋯ k a 1 n k a 21 k a 22 ⋯ k a 2 n ⋮ ⋮ ⋱ ⋮ k a m 1 k a m 2 ⋯ k a m n ] kA = \begin{bmatrix} k a_{11} & k a_{12} & \cdots & k a_{1n} \\ k a_{21} & k a_{22} & \cdots & k a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ k a_{m1} & k a_{m2} & \cdots & k a_{mn} \end{bmatrix} kA= ka11ka21kam1ka12ka22kam2ka1nka2nkamn

其中 a i j a_{ij} aij表示矩阵 A A A的第 i i i行第 j j j列的元素。注意,矩阵乘标量仅仅是将矩阵的每个元素乘以标量,而不会改变矩阵的形状。

在这里插入图片描述

1.3 矩阵相乘

矩阵相乘是指将两个矩阵按照一定的规则进行相乘,得到一个新的矩阵。具体的规则是:

设A是一个m × n的矩阵,B是一个n × p的矩阵,那么矩阵C = AB就是一个m × p的矩阵,且它的每个元素cij都是由A的第i行与B的第j列对应元素相乘后求和得到的,即:

cij = Σ(ai * bj),其中i = 1, 2, …, m,j = 1, 2, …, p。

其中,ai表示A矩阵第i行的元素,bj表示B矩阵第j列的元素。

需要注意的是,只有当矩阵A的列数等于矩阵B的行数时,才能进行矩阵相乘操作。否则会出现维度不匹配的错误。

在这里插入图片描述
在这里插入图片描述

2.3*3矩阵旋转

2.1 矩阵X旋转

矩阵绕X轴旋转的公式如下:

[1     0           0       ]
[0     cosθ        -sinθ   ]
[0     sinθ        cosθ    ]

其中,θ表示旋转角度。这个公式的推导可以通过以下步骤进行:

  1. 假设有一个三维向量a = [x, y, z],它绕X轴旋转θ角度后变为b = [x’, y’, z’]。

  2. 我们可以将向量a投影到XOY平面上,得到长度为r = sqrt(y^2 + z^2)的向量c = [0, y/r, z/r],即c的长度为1。

  3. 根据三角函数的定义,可以得到绕X轴旋转θ角度后的向量b的坐标为:

x' = x
y' = c[2] * cosθ - c[3] * sinθ = y * cosθ - z * sinθ
z' = c[2] * sinθ + c[3] * cosθ = y * sinθ + z * cosθ

其中,c[2]表示向量c在Y轴上的投影,c[3]表示向量c在Z轴上的投影。

  1. 将上面的公式写成矩阵形式,可以得到绕X轴旋转θ角度的矩阵为:
[1     0           0       ]
[0     cosθ        -sinθ   ]
[0     sinθ        cosθ    ]

这就是绕X轴旋转θ角度的矩阵公式。

2.2 矩阵Y旋转

矩阵绕Y轴旋转的角度为θ时,可以通过以下推导得出旋转矩阵:

假设需要旋转的点为P=(x, y, z),则旋转后得到的点P’=(x’, y’, z’),其中:

x’ = x * cosθ + z * sinθ
y’ = y
z’ = -x * sinθ + z * cosθ

将上述式子整合成矩阵形式,得到旋转矩阵R:

R = | cosθ 0 sinθ 0 |
| 0 1 0 0 |
| -sinθ 0 cosθ 0 |
| 0 0 0 1 |

其中,第一行和第三行代表了x和z坐标的旋转,第二行代表y坐标不变,最后一行代表不变量。

因此,对于任意一个绕Y轴旋转角度为θ的点P,可以通过R矩阵的变换得到旋转后的点P’。

2.3 矩阵Z旋转

假设旋转矩阵为 R z ( θ ) R_z(\theta) Rz(θ),表示绕Z轴旋转角度 θ \theta θ,则:

R z ( θ ) = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] R_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)= cosθsinθ0sinθcosθ0001

在推导过程中,我们可以使用以下两条性质:

  1. 矩阵乘法结合律: ( A B ) C = A ( B C ) (AB)C = A(BC) (AB)C=A(BC)

  2. 对于任意向量 v = ( x , y , z ) T \mathbf{v} = (x,y,z)^T v=(x,y,z)T,绕Z轴旋转角度 θ \theta θ的公式为:

    R z ( θ ) v = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ x y z ] = [ cos ⁡ θ x − sin ⁡ θ y sin ⁡ θ x + cos ⁡ θ y z ] \begin{aligned} R_z(\theta)\mathbf{v} &= \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ z \end{bmatrix} \\ &= \begin{bmatrix} \cos\theta x - \sin\theta y \\ \sin\theta x + \cos\theta y \\ z \end{bmatrix} \end{aligned} Rz(θ)v= cosθsinθ0sinθcosθ0001 xyz = cosθxsinθysinθx+cosθyz

现在考虑将矩阵 R z ( θ ) R_z(\theta) Rz(θ)表示成两个矩阵的乘积的形式。我们需要将其矩阵元分解成两个矩阵的矩阵元的乘积。

设有矩阵 A A A B B B,满足:

A B = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ b 11 b 12 b 13 b 21 b 22 b 23 b 31 b 32 b 33 ] = [ c 11 c 12 c 13 c 21 c 22 c 23 c 31 c 32 c 33 ] AB = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix}\begin{bmatrix} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \\ b_{31} & b_{32} & b_{33} \end{bmatrix} = \begin{bmatrix} c_{11} & c_{12} & c_{13} \\ c_{21} & c_{22} & c_{23} \\ c_{31} & c_{32} & c_{33} \end{bmatrix} AB= a11a21a31a12a22a32a13a23a33 b11b21b31b12b22b32b13b23b33 = c11c21c31c12c22c32c13c23c33

则有:

c 11 = a 11 b 11 + a 12 b 21 + a 13 b 31 c 12 = a 11 b 12 + a 12 b 22 + a 13 b 32 c 13 = a 11 b 13 + a 12 b 23 + a 13 b 33 c 21 = a 21 b 11 + a 22 b 21 + a 23 b 31 c 22 = a 21 b 12 + a 22 b 22 + a 23 b 32 c 23 = a 21 b 13 + a 22 b 23 + a 23 b 33 c 31 = a 31 b 11 + a 32 b 21 + a 33 b 31 c 32 = a 31 b 12 + a 32 b 22 + a 33 b 32 c 33 = a 31 b 13 + a 32 b 23 + a 33 b 33 \begin{aligned} c_{11} &= a_{11}b_{11} + a_{12}b_{21} + a_{13}b_{31} \\ c_{12} &= a_{11}b_{12} + a_{12}b_{22} + a_{13}b_{32} \\ c_{13} &= a_{11}b_{13} + a_{12}b_{23} + a_{13}b_{33} \\ c_{21} &= a_{21}b_{11} + a_{22}b_{21} + a_{23}b_{31} \\ c_{22} &= a_{21}b_{12} + a_{22}b_{22} + a_{23}b_{32} \\ c_{23} &= a_{21}b_{13} + a_{22}b_{23} + a_{23}b_{33} \\ c_{31} &= a_{31}b_{11} + a_{32}b_{21} + a_{33}b_{31} \\ c_{32} &= a_{31}b_{12} + a_{32}b_{22} + a_{33}b_{32} \\ c_{33} &= a_{31}b_{13} + a_{32}b_{23} + a_{33}b_{33} \end{aligned} c11c12c13c21c22c23c31c32c33=a11b11+a12b21+a13b31=a11b12+a12b22+a13b32=a11b13+a12b23+a13b33=a21b11+a22b21+a23b31=a21b12+a22b22+a23b32=a21b13+a22b23+a23b33=a31b11+a32b21+a33b31=a31b12+a32b22+a33b32=a31b13+a32b23+a33b33

现在我们考虑将 R z ( θ ) R_z(\theta) Rz(θ)分解成两个矩阵 A A A B B B的乘积形式。注意到对于 θ = 0 \theta=0 θ=0时, R z ( θ ) R_z(\theta) Rz(θ)就是单位矩阵,因此我们可以选择 A A A B B B满足 A = I A=\mathbf{I} A=I(单位矩阵)和 B = R z ( θ ) B=R_z(\theta) B=Rz(θ)

现在我们要找到矩阵 A A A B B B的矩阵元分解形式,使得 A B = R z ( θ ) AB=R_z(\theta) AB=Rz(θ)。根据矩阵乘法结合律,我们可以先假设 A A A B B B的某些矩阵元的乘积等于 R z ( θ ) R_z(\theta) Rz(θ)的对应矩阵元,然后求解这些矩阵元的值。

具体来说,我们假设:

a 11 b 11 + a 12 b 21 + a 13 b 31 = cos ⁡ θ a 11 b 12 + a 12 b 22 + a 13 b 32 = − sin ⁡ θ a 21 b 11 + a 22 b 21 + a 23 b 31 = sin ⁡ θ a 21 b 12 + a 22 b 22 + a 23 b 32 = cos ⁡ θ a 31 b 11 + a 32 b 21 + a 33 b 31 = 0 a 31 b 12 + a 32 b 22 + a 33 b 32 = 0 \begin{aligned} a_{11}b_{11} + a_{12}b_{21} + a_{13}b_{31} &= \cos\theta & &\qquad a_{11}b_{12} + a_{12}b_{22} + a_{13}b_{32} &= -\sin\theta \\ a_{21}b_{11} + a_{22}b_{21} + a_{23}b_{31} &= \sin\theta & &\qquad a_{21}b_{12} + a_{22}b_{22} + a_{23}b_{32} &= \cos\theta \\ a_{31}b_{11} + a_{32}b_{21} + a_{33}b_{31} &= 0 & &\qquad a_{31}b_{12} + a_{32}b_{22} + a_{33}b_{32} &= 0 \\ \end{aligned} a11b11+a12b21+a13b31a21b11+a22b21+a23b31a31b11+a32b21+a33b31=cosθ=sinθ=0a11b12+a12b22+a13b32a21b12+a22b22+a23b32a31b12+a32b22+a33b32=sinθ=cosθ=0

由此可以得到:

A = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] ,   B = [ 1 0 0 0 1 0 0 0 1 ] A = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix},\ B = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} A= cosθsinθ0sinθcosθ0001 , B= 100010001

因此,我们可以将 R z ( θ ) R_z(\theta) Rz(θ)表示成两个矩阵的乘积形式:

R z ( θ ) = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ 1 0 0 0 1 0 0 0 1 ] R_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)= cosθsinθ0sinθcosθ0001 100010001

这就是 R z ( θ ) R_z(\theta) Rz(θ)的矩阵分解形式,其中第一个矩阵表示绕Z轴旋转 θ \theta θ角度的变换,第二个矩阵表示单位变换。

3.4*4矩阵旋转

3.1 矩阵X旋转

首先,我们需要知道绕X轴旋转的矩阵表达式:

[ 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta & 0 \\ 0 & \sin \theta & \cos \theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} 10000cosθsinθ00sinθcosθ00001

其中, θ \theta θ表示绕X轴旋转的角度。

接下来,我们来推导4*4矩阵绕X旋转矩阵。

假设我们有一个4*4矩阵A:

[ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ] \begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{bmatrix} a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44

为了让矩阵A绕X轴旋转,我们可以如下操作:

  1. 将矩阵A进行平移,使其中心点处于原点。

这一步操作可以通过平移矩阵来实现:

[ 1 0 0 0 0 1 0 0 0 0 1 0 − a 11 + a 21 + a 31 + a 41 4 − a 12 + a 22 + a 32 + a 42 4 − a 13 + a 23 + a 33 + a 43 4 1 ] [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ] = [ a 11 ′ a 12 ′ a 13 ′ a 14 ′ a 21 ′ a 22 ′ a 23 ′ a 24 ′ a 31 ′ a 32 ′ a 33 ′ a 34 ′ a 41 ′ a 42 ′ a 43 ′ a 44 ′ ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -\frac{a_{11}+a_{21}+a_{31}+a_{41}}{4} & -\frac{a_{12}+a_{22}+a_{32}+a_{42}}{4} & -\frac{a_{13}+a_{23}+a_{33}+a_{43}}{4} & 1 \end{bmatrix}\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{bmatrix}=\begin{bmatrix} a'_{11} & a'_{12} & a'_{13} & a'_{14} \\ a'_{21} & a'_{22} & a'_{23} & a'_{24} \\ a'_{31} & a'_{32} & a'_{33} & a'_{34} \\ a'_{41} & a'_{42} & a'_{43} & a'_{44} \end{bmatrix} 1004a11+a21+a31+a410104a12+a22+a32+a420014a13+a23+a33+a430001 a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44 = a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44

  1. 绕X轴旋转角度为 θ \theta θ

这一步操作可以通过绕X轴旋转矩阵来实现:

[ 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ] [ a 11 ′ a 12 ′ a 13 ′ a 14 ′ a 21 ′ a 22 ′ a 23 ′ a 24 ′ a 31 ′ a 32 ′ a 33 ′ a 34 ′ a 41 ′ a 42 ′ a 43 ′ a 44 ′ ] = [ a 11 ′ ′ a 12 ′ ′ a 13 ′ ′ a 14 ′ ′ a 21 ′ ′ a 22 ′ ′ a 23 ′ ′ a 24 ′ ′ a 31 ′ ′ a 32 ′ ′ a 33 ′ ′ a 34 ′ ′ a 41 ′ ′ a 42 ′ ′ a 43 ′ ′ a 44 ′ ′ ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta & 0 \\ 0 & \sin \theta & \cos \theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} a'_{11} & a'_{12} & a'_{13} & a'_{14} \\ a'_{21} & a'_{22} & a'_{23} & a'_{24} \\ a'_{31} & a'_{32} & a'_{33} & a'_{34} \\ a'_{41} & a'_{42} & a'_{43} & a'_{44} \end{bmatrix}=\begin{bmatrix} a''_{11} & a''_{12} & a''_{13} & a''_{14} \\ a''_{21} & a''_{22} & a''_{23} & a''_{24} \\ a''_{31} & a''_{32} & a''_{33} & a''_{34} \\ a''_{41} & a''_{42} & a''_{43} & a''_{44} \end{bmatrix} 10000cosθsinθ00sinθcosθ00001 a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44 = a11′′a21′′a31′′a41′′a12′′a22′′a32′′a42′′a13′′a23′′a33′′a43′′a14′′a24′′a34′′a44′′

  1. 将矩阵A进行平移,使其回到原来的位置。

这一步操作可以通过平移矩阵来实现:

[ 1 0 0 0 0 1 0 0 0 0 1 0 a 11 + a 21 + a 31 + a 41 4 a 12 + a 22 + a 32 + a 42 4 a 13 + a 23 + a 33 + a 43 4 1 ] [ a 11 ′ ′ a 12 ′ ′ a 13 ′ ′ a 14 ′ ′ a 21 ′ ′ a 22 ′ ′ a 23 ′ ′ a 24 ′ ′ a 31 ′ ′ a 32 ′ ′ a 33 ′ ′ a 34 ′ ′ a 41 ′ ′ a 42 ′ ′ a 43 ′ ′ a 44 ′ ′ ] = [ b 11 b 12 b 13 b 14 b 21 b 22 b 23 b 24 b 31 b 32 b 33 b 34 b 41 b 42 b 43 b 44 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \frac{a_{11}+a_{21}+a_{31}+a_{41}}{4} & \frac{a_{12}+a_{22}+a_{32}+a_{42}}{4} & \frac{a_{13}+a_{23}+a_{33}+a_{43}}{4} & 1 \end{bmatrix}\begin{bmatrix} a''_{11} & a''_{12} & a''_{13} & a''_{14} \\ a''_{21} & a''_{22} & a''_{23} & a''_{24} \\ a''_{31} & a''_{32} & a''_{33} & a''_{34} \\ a''_{41} & a''_{42} & a''_{43} & a''_{44} \end{bmatrix}=\begin{bmatrix} b_{11} & b_{12} & b_{13} & b_{14} \\ b_{21} & b_{22} & b_{23} & b_{24} \\ b_{31} & b_{32} & b_{33} & b_{34} \\ b_{41} & b_{42} & b_{43} & b_{44} \end{bmatrix} 1004a11+a21+a31+a410104a12+a22+a32+a420014a13+a23+a33+a430001 a11′′a21′′a31′′a41′′a12′′a22′′a32′′a42′′a13′′a23′′a33′′a43′′a14′′a24′′a34′′a44′′ = b11b21b31b41b12b22b32b42b13b23b33b43b14b24b34b44

于是,我们得到了4*4矩阵绕X旋转矩阵:

[ 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 − a 11 + a 21 + a 31 + a 41 4 − a 12 + a 22 + a 32 + a 42 4 − a 13 + a 23 + a 33 + a 43 4 1 ] [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ] [ 1 0 0 0 0 1 0 0 0 0 1 0 a 11 + a 21 + a 31 + a 41 4 a 12 + a 22 + a 32 + a 42 4 a 13 + a 23 + a 33 + a 43 4 1 ] = [ b 11 b 12 b 13 b 14 b 21 b 22 b 23 b 24 b 31 b 32 b 33 b 34 b 41 b 42 b 43 b 44 ] \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta & 0 \\ 0 & \sin \theta & \cos \theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -\frac{a_{11}+a_{21}+a_{31}+a_{41}}{4} & -\frac{a_{12}+a_{22}+a_{32}+a_{42}}{4} & -\frac{a_{13}+a_{23}+a_{33}+a_{43}}{4} & 1 \end{bmatrix}\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ \frac{a_{11}+a_{21}+a_{31}+a_{41}}{4} & \frac{a_{12}+a_{22}+a_{32}+a_{42}}{4} & \frac{a_{13}+a_{23}+a_{33}+a_{43}}{4} & 1 \end{bmatrix}=\begin{bmatrix} b_{11} & b_{12} & b_{13} & b_{14} \\ b_{21} & b_{22} & b_{23} & b_{24} \\ b_{31} & b_{32} & b_{33} & b_{34} \\ b_{41} & b_{42} & b_{43} & b_{44} \end{bmatrix} 10000cosθsinθ00sinθcosθ00001 1004a11+a21+a31+a410104a12+a22+a32+a420014a13+a23+a33+a430001 a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44 1004a11+a21+a31+a410104a12+a22+a32+a420014a13+a23+a33+a430001 = b11b21b31b41b12b22b32b42b13b23b33b43b14b24b34b44

其中, b i j b_{ij} bij表示旋转后的矩阵元素。

3.2 矩阵Y旋转

假设我们要将一个点 ( x , y , z ) (x, y, z) (x,y,z) 绕 Y 轴旋转 θ \theta θ 角度,那么旋转后的新点坐标为 ( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z)

我们可以先将坐标系绕 Y 轴逆时针旋转 θ \theta θ 角度,这样点 ( x , y , z ) (x, y, z) (x,y,z) 就落在了新的坐标系中。此时,点 ( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z) 的坐标就是它在新坐标系中的坐标。然后再将坐标系逆时针旋转 − θ -\theta θ 角度,这样点 ( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z) 就回到了原来的坐标系中。

根据三维坐标系中的旋转矩阵推导公式可知:

[ x ′ y ′ z ′ 1 ] = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix}x'\\y'\\z'\\1\end{bmatrix} = \begin{bmatrix}\cos\theta & 0 & \sin\theta & 0\\0 & 1 & 0 & 0\\-\sin\theta & 0 & \cos\theta & 0\\0 & 0 & 0 & 1\end{bmatrix} \begin{bmatrix}x\\y\\z\\1\end{bmatrix} xyz1 = cosθ0sinθ00100sinθ0cosθ00001 xyz1

因此,绕 Y 轴旋转 θ \theta θ 角度的矩阵为:

[ cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ] \begin{bmatrix}\cos\theta & 0 & \sin\theta & 0\\0 & 1 & 0 & 0\\-\sin\theta & 0 & \cos\theta & 0\\0 & 0 & 0 & 1\end{bmatrix} cosθ0sinθ00100sinθ0cosθ00001

3.3 矩阵Z旋转

假设我们有一个4x4的矩阵 M M M,它的每个元素为 m i j m_{ij} mij,我们想要将它绕着Z轴旋转一个角度 θ \theta θ。为了完成这个任务,我们可以使用下面的矩阵 R R R

R = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 0 sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 0 1 0 0 0 0 1 ] R=\begin{bmatrix} \cos(\theta) & -\sin(\theta) & 0 & 0 \\ \sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} R= cos(θ)sin(θ)00sin(θ)cos(θ)0000100001

我们将 M M M R R R相乘,得到一个新的矩阵 M ′ M' M,它是旋转后的矩阵:

M ′ = M × R M' = M\times R M=M×R

这里是具体的推导过程:

  1. 我们先考虑矩阵 R R R如何作用于矩阵 M M M上。为了方便,我们假设 M M M的每列分别为 M 1 , M 2 , M 3 , M 4 M_1, M_2, M_3, M_4 M1,M2,M3,M4。那么矩阵 R R R作用于 M M M上,就相当于将每列旋转一个角度 θ \theta θ,得到新的列向量 M 1 ′ , M 2 ′ , M 3 ′ , M 4 ′ M'_1, M'_2, M'_3, M'_4 M1,M2,M3,M4。因此,我们可以将矩阵 R R R表示为一个函数 f f f,它将列向量 M i M_i Mi映射到新的列向量 M i ′ M'_i Mi

M i ′ = f ( M i ) = R × M i M'_i = f(M_i) = R\times M_i Mi=f(Mi)=R×Mi

  1. 现在我们需要将 f f f应用于整个矩阵 M M M上。考虑到矩阵乘法的性质,我们可以将 f f f应用于 M M M的每一列,然后将结果拼起来组成新的矩阵 M ′ M' M

M ′ = [ f ( M 1 ) , f ( M 2 ) , f ( M 3 ) , f ( M 4 ) ] M' = [f(M_1), f(M_2), f(M_3), f(M_4)] M=[f(M1),f(M2),f(M3),f(M4)]

  1. f f f代入上式,得到:

M ′ = [ R × M 1 , R × M 2 , R × M 3 , R × M 4 ] = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 0 sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 0 1 0 0 0 0 1 ] [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 m 41 m 42 m 43 m 44 ] = [ cos ⁡ ( θ ) m 11 − sin ⁡ ( θ ) m 21 cos ⁡ ( θ ) m 12 − sin ⁡ ( θ ) m 22 cos ⁡ ( θ ) m 13 − sin ⁡ ( θ ) m 23 cos ⁡ ( θ ) m 14 − sin ⁡ ( θ ) m 24 sin ⁡ ( θ ) m 11 + cos ⁡ ( θ ) m 21 sin ⁡ ( θ ) m 12 + cos ⁡ ( θ ) m 22 sin ⁡ ( θ ) m 13 + cos ⁡ ( θ ) m 23 sin ⁡ ( θ ) m 14 + cos ⁡ ( θ ) m 24 m 31 m 32 m 33 m 34 m 41 m 42 m 43 m 44 ] \begin{aligned} M' &= [R\times M_1, R\times M_2, R\times M_3, R\times M_4] \\ &=\begin{bmatrix} \cos(\theta) & -\sin(\theta) & 0 & 0 \\ \sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \\ \end{bmatrix} \\ &=\begin{bmatrix} \cos(\theta)m_{11}-\sin(\theta)m_{21} & \cos(\theta)m_{12}-\sin(\theta)m_{22} & \cos(\theta)m_{13}-\sin(\theta)m_{23} & \cos(\theta)m_{14}-\sin(\theta)m_{24} \\ \sin(\theta)m_{11}+\cos(\theta)m_{21} & \sin(\theta)m_{12}+\cos(\theta)m_{22} & \sin(\theta)m_{13}+\cos(\theta)m_{23} & \sin(\theta)m_{14}+\cos(\theta)m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \\ \end{bmatrix} \end{aligned} M=[R×M1,R×M2,R×M3,R×M4]= cos(θ)sin(θ)00sin(θ)cos(θ)0000100001 m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44 = cos(θ)m11sin(θ)m21sin(θ)m11+cos(θ)m21m31m41cos(θ)m12sin(θ)m22sin(θ)m12+cos(θ)m22m32m42cos(θ)m13sin(θ)m23sin(θ)m13+cos(θ)m23m33m43cos(θ)m14sin(θ)m24sin(θ)m14+cos(θ)m24m34m44

因此,将一个4x4的矩阵绕着Z轴旋转一个角度 θ \theta θ,就可以使用上面的矩阵 R R R,并将它与原矩阵 M M M相乘得到旋转后的矩阵 M ′ M' M

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/132463002