【愚公系列】2023年08月 3D数学

阅读: 评论:0

【愚公系列】2023年08月 3D数学

【愚公系列】2023年08月 3D数学

文章目录

  • 前言
    • 1.矩阵的定义
    • 2.矩阵和方程的关系
  • 一、矩阵运算和变换
    • 1.矩阵运算
      • 1.1 矩阵加减
      • 1.2 矩阵乘标量
      • 1.3 矩阵相乘
    • 2.3*3矩阵旋转
      • 2.1 矩阵X旋转
      • 2.2 矩阵Y旋转
      • 2.3 矩阵Z旋转
    • 3.4*4矩阵旋转
      • 3.1 矩阵X旋转
      • 3.2 矩阵Y旋转
      • 3.3 矩阵Z旋转


前言

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= ​a11​a21​⋮am1​​a12​a22​⋮am2​​⋯⋯⋱⋯​a1n​a2n​⋮amn​​

其中, 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} ⎩ ⎧​a11​x1​+a12​x2​+⋯+a1n​xn​=b1​a21​x1​+a22​x2​+⋯+a2n​xn​=b2​⋯an1​x1​+an2​x2​+⋯+ann​xn​=bn​​

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

将上述方程组中的系数和常数放在一个 n × ( n + 1 ) ntimes(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} ​a11​a21​⋯an1​​a12​a22​⋯an2​​⋯⋯⋯⋯​a1n​a2n​⋯ann​​b1​b2​⋯bn​​

可以发现,在这个矩阵中,每个方程的系数和常数都被组织为矩阵的一行,而整个方程组则被组织为矩阵的 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} ​a11′​0⋯0​a12′​a22′​⋯0​⋯⋯⋯⋯​a1n′​a2n′​⋯ann′​​b1′​b2′​⋯bn′​​

其中,矩阵中的斜线上方都是 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= ​ka11​ka21​⋮kam1​​ka12​ka22​⋮kam2​​⋯⋯⋱⋯​ka1n​ka2n​⋮kamn​​

其中 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} costheta & -sintheta & 0 \ sintheta & costheta & 0 \ 0 & 0 & 1 end{bmatrix} Rz​(θ)= ​cosθsinθ0​−sinθcosθ0​001​

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

  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} costheta & -sintheta & 0 \ sintheta & costheta & 0 \ 0 & 0 & 1 end{bmatrix}begin{bmatrix} x \ y \ z end{bmatrix} \ &= begin{bmatrix} costheta x - sintheta y \ sintheta x + costheta y \ z end{bmatrix} end{aligned} Rz​(θ)v​= ​cosθsinθ0​−sinθcosθ0​001​ ​xyz​ ​= ​cosθx−sinθ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= ​a11​a21​a31​​a12​a22​a32​​a13​a23​a33​​ ​b11​b21​b31​​b12​b22​b32​​b13​b23​b33​​ ​= ​c11​c21​c31​​c12​c22​c32​​c13​c23​c33​​

则有:

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} c11​c12​c13​c21​c22​c23​c31​c32​c33​​=a11​b11​+a12​b21​+a13​b31​=a11​b12​+a12​b22​+a13​b32​=a11​b13​+a12​b23​+a13​b33​=a21​b11​+a22​b21​+a23​b31​=a21​b12​+a22​b22​+a23​b32​=a21​b13​+a22​b23​+a23​b33​=a31​b11​+a32​b21​+a33​b31​=a31​b12​+a32​b22​+a33​b32​=a31​b13​+a32​b23​+a33​b33​​

现在我们考虑将 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} &= costheta & &qquad a_{11}b_{12} + a_{12}b_{22} + a_{13}b_{32} &= -sintheta \ a_{21}b_{11} + a_{22}b_{21} + a_{23}b_{31} &= sintheta & &qquad a_{21}b_{12} + a_{22}b_{22} + a_{23}b_{32} &= costheta \ 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} a11​b11​+a12​b21​+a13​b31​a21​b11​+a22​b21​+a23​b31​a31​b11​+a32​b21​+a33​b31​​=cosθ=sinθ=0​​a11​b12​+a12​b22​+a13​b32​a21​b12​+a22​b22​+a23​b32​a31​b12​+a32​b22​+a33​b32​​=−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} costheta & -sintheta & 0 \ sintheta & costheta & 0 \ 0 & 0 & 1 end{bmatrix}, B = begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 end{bmatrix} A= ​cosθsinθ0​−sinθcosθ0​001​ ​, B= ​100​010​001​

因此,我们可以将 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} costheta & -sintheta & 0 \ sintheta & costheta & 0 \ 0 & 0 & 1 end{bmatrix}begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 end{bmatrix} Rz​(θ)= ​cosθsinθ0​−sinθcosθ0​001​ ​100​010​001​

这就是 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} ​1000​0cosθsinθ0​0−sinθcosθ0​0001​

其中, θ 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} ​a11​a21​a31​a41​​a12​a22​a32​a42​​a13​a23​a33​a43​​a14​a24​a34​a44​​

为了让矩阵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} ​100−4a11​+a21​+a31​+a41​​​010−4a12​+a22​+a32​+a42​​​001−4a13​+a23​+a33​+a43​​​0001​ ​a11​a21​a31​a41​​a12​a22​a32​a42​​a13​a23​a33​a43​​a14​a24​a34​a44​​ ​= ​a11′​a21′​a31′​a41′​​a12′​a22′​a32′​a42′​​a13′​a23′​a33′​a43′​​a14′​a24′​a34′​a44′​​

  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} ​1000​0cosθsinθ0​0−sinθcosθ0​0001​ ​a11′​a21′​a31′​a41′​​a12′​a22′​a32′​a42′​​a13′​a23′​a33′​a43′​​a14′​a24′​a34′​a44′​​ ​= ​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​+a41​​​0104a12​+a22​+a32​+a42​​​0014a13​+a23​+a33​+a43​​​0001​ ​a11′′​a21′′​a31′′​a41′′​​a12′′​a22′′​a32′′​a42′′​​a13′′​a23′′​a33′′​a43′′​​a14′′​a24′′​a34′′​a44′′​​ ​= ​b11​b21​b31​b41​​b12​b22​b32​b42​​b13​b23​b33​b43​​b14​b24​b34​b44​​

于是,我们得到了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} ​1000​0cosθsinθ0​0−sinθcosθ0​0001​ ​100−4a11​+a21​+a31​+a41​​​010−4a12​+a22​+a32​+a42​​​001−4a13​+a23​+a33​+a43​​​0001​ ​a11​a21​a31​a41​​a12​a22​a32​a42​​a13​a23​a33​a43​​a14​a24​a34​a44​​ ​1004a11​+a21​+a31​+a41​​​0104a12​+a22​+a32​+a42​​​0014a13​+a23​+a33​+a43​​​0001​ ​= ​b11​b21​b31​b41​​b12​b22​b32​b42​​b13​b23​b33​b43​​b14​b24​b34​b44​​

其中, 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'\1end{bmatrix} = begin{bmatrix}costheta & 0 & sintheta & 0\0 & 1 & 0 & 0\-sintheta & 0 & costheta & 0\0 & 0 & 0 & 1end{bmatrix} begin{bmatrix}x\y\z\1end{bmatrix} ​x′y′z′1​ ​= ​cosθ0−sinθ0​0100​sinθ0cosθ0​0001​ ​xyz1​

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

[ cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ] begin{bmatrix}costheta & 0 & sintheta & 0\0 & 1 & 0 & 0\-sintheta & 0 & costheta & 0\0 & 0 & 0 & 1end{bmatrix} ​cosθ0−sinθ0​0100​sinθ0cosθ0​0001​

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(θ)00​−sin(θ)cos(θ)00​0010​0001​

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

M ′ = M × R M' = Mtimes 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) = Rtimes 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' &= [Rtimes M_1, Rtimes M_2, Rtimes M_3, Rtimes 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(θ)00​−sin(θ)cos(θ)00​0010​0001​ ​m11​m21​m31​m41​​m12​m22​m32​m42​​m13​m23​m33​m43​​m14​m24​m34​m44​​ ​= ​cos(θ)m11​−sin(θ)m21​sin(θ)m11​+cos(θ)m21​m31​m41​​cos(θ)m12​−sin(θ)m22​sin(θ)m12​+cos(θ)m22​m32​m42​​cos(θ)m13​−sin(θ)m23​sin(θ)m13​+cos(θ)m23​m33​m43​​cos(θ)m14​−sin(θ)m24​sin(θ)m14​+cos(θ)m24​m34​m44​​ ​​

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

本文发布于:2024-02-02 00:29:13,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170681042540203.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:愚公   数学   系列
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23