📅  最后修改于: 2021-01-13 09:38:23             🧑  作者: Mango
3D旋转与2D旋转不同。在3D旋转中,我们必须指定旋转角度以及旋转轴。我们可以绕X,Y和Z轴执行3D旋转。它们以如下矩阵形式表示-
$$ R_ {x}(\ theta)= \ begin {bmatrix} 1&0&0&0 \\ 0 cos \ theta&-sin \ theta&0 \\ 0&sin \ theta&cos \ theta&0 \\ 0&0 0&1 \ \ \ end {bmatrix} R_ {y}(\ theta)= \ begin {bmatrix} cos \ theta&0&sin \ theta&0 \\ 0-1&0 0 \\ -sin \ theta&0&cos \ theta&0 \\ 0&0&0 0& 1 \\ \ end {bmatrix} R_ {z}(\ theta)= \ begin {bmatrix} cos \ theta&-sin \ theta&0&0 \\ sin \ theta&cos \ theta&0&0 \\ 0&0&1& 0 \\ 0&0&0&0&1 \ end {bmatrix} $$
下图说明了围绕各个轴的旋转-
您可以使用缩放转换来更改对象的大小。在缩放过程中,您可以扩展或压缩对象的尺寸。缩放可以通过将对象的原始坐标与缩放因子相乘以获得所需的结果来实现。下图显示了3D缩放的效果-
在3D缩放操作中,使用了三个坐标。让我们假设原始坐标为(X,Y,Z),缩放比例分别为$(S_ {X,} S_ {Y,} S_ {z})$,生成的坐标为(X’,Y’ ,Z’)。可以用数学表示,如下所示-
$ S = \ begin {bmatrix} S_ {x}&0&0&0 0 \\ 0&S_ {y}&0&0 \\ 0&0&S_ {z}&0 \\ 0&0&0&0&1 \ end {bmatrix} $
P’= P∙S
$ [{X}’\:\:\:{Y}’\:\:\:{Z}’\:\:\:1] = [X \:\:\:Y \:\:\: Z \:\:\:1] \:\:\ begin {bmatrix} S_ {x}&0&0 0 \\ 0&S_ {y}&0&0 \\ 0&0&0&S_ {z}&0 \\ 0&0&0 0&1 \ end {bmatrix} $
$ = [X.S_ {x} \:\:\:Y.S_ {y} \:\:\:Z.S_ {z} \:\:\:1] $
倾斜对象形状的变换称为剪切变换。像在2D剪切中一样,我们可以在3D中沿X轴,Y轴或Z轴剪切对象。
如上图所示,有一个坐标P。您可以对其进行剪切以获得一个新的坐标P’,该坐标可以以3D矩阵形式表示,如下所示-
$ Sh = \ begin {bmatrix} 1&sh_ {x} ^ {y}&sh_ {x} ^ {z}&0 \\ sh_ {y} ^ {x}&1&sh_ {y} ^ {z} &0 \\ sh_ {z} ^ {x}&sh_ {z} ^ {y}&1&0 \\ 0&0&0&1 \ end {bmatrix} $
P’= P∙Sh
$ X’= X + Sh_ {x} ^ {y} Y + Sh_ {x} ^ {z} Z $
$ Y’= Sh_ {y} ^ {x} X + Y + sh_ {y} ^ {z} Z $
$ Z’= Sh_ {z} ^ {x} X + Sh_ {z} ^ {y} Y + Z $
转换矩阵是进行转换的基本工具。尺寸为nxm的矩阵与对象的坐标相乘。通常使用3 x 3或4 x 4矩阵进行转换。例如,考虑以下矩阵进行各种运算。
$T = \begin{bmatrix} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\ t_{x}& t_{y}& t_{z}& 1\\ \end{bmatrix}$ |
$S = \begin{bmatrix} S_{x}& 0& 0& 0\\ 0& S_{y}& 0& 0\\ 0& 0& S_{z}& 0\\ 0& 0& 0& 1 \end{bmatrix}$ |
$Sh = \begin{bmatrix} 1& sh_{x}^{y}& sh_{x}^{z}& 0\\ sh_{y}^{x}& 1 & sh_{y}^{z}& 0\\ sh_{z}^{x}& sh_{z}^{y}& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}$ |
Translation Matrix | Scaling Matrix | Shear Matrix |
$R_{x}(\theta) = \begin{bmatrix} 1& 0& 0& 0\\ 0& cos\theta & -sin\theta& 0\\ 0& sin\theta & cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix}$ |
$R_{y}(\theta) = \begin{bmatrix} cos\theta& 0& sin\theta& 0\\ 0& 1& 0& 0\\ -sin\theta& 0& cos\theta& 0\\ 0& 0& 0& 1\\ \end{bmatrix}$ |
$R_{z}(\theta) = \begin{bmatrix} cos\theta & -sin\theta & 0& 0\\ sin\theta & cos\theta & 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}$ |
Rotation Matrix |