计算机图形学笔记----矩阵

发布于:2024-06-30 ⋅ 阅读:(144) ⋅ 点赞:(0)

矩阵和标量的运算

M = \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix},则kM = k\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}=\begin{bmatrix} km_{11} & km_{12} & km_{13} \\ km_{21} & km_{22} & km_{23} \\ km_{31} & km_{32} & km_{33} \\ \end{bmatrix}

矩阵与矩阵相乘

r\times n的矩阵A,n\times c的矩阵B。两矩阵A\times B,结果为r\times c的矩阵,第一个矩阵的列数必须和第二个矩阵的行数相同,否则不能相乘

C=A\times BC中的每个元素等于A的第i行所对应的矢量和B的第j列所对应的矢量进行矢量点乘的结果

c_{ij}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdot \cdot \cdot +a_{im}b_{nj}

注意:矩阵乘法不满足交换律AB\neq BA

矩阵乘法满足结合律\left ( AB \right )C=A\left ( BC \right )

Shader中常用矩阵

1.方块矩阵(方阵)(square matrix):行数和列数相等的矩阵。

2.对角矩阵:如果一个方阵除了对角元素外的所有元素都为0,那么这个方阵为对角矩阵。

3.单位矩阵:特殊的对角矩阵,用I_n表示,例如3\times 3的单位矩阵为I_3=\begin{bmatrix} 1 & 0 & 0\\ 0&1 &0 \\ 0&0 & 1 \end{bmatrix}。 

4.转置矩阵:原矩阵i\times jM_{ij},它的转置表示为M_{ij}^T,转置矩阵的运算为原矩阵的第i行变成第i列,第j列变成第j行。

M_{ij}^T =M_{ji},示例\begin{bmatrix} 1 & 2 & 3 &4 \\ 5& 6 & 7 & 8 \end{bmatrix}^T=\begin{bmatrix} 1 & 5 \\ 2 & 6 \\ 3 & 7 \\ 4 & 8 \\ \end{bmatrix}

转置矩阵常用性质

性质一:矩阵转置的转置等于原矩阵        (M^T)^T=M

性质二:矩阵串接的转置等于反向串接各个矩阵的转置        (AB)^T=B^TA^T

5.逆矩阵

给定一个矩阵M,它的逆矩阵为M^{-1},把MM^{-1}相乘,结果为一个单位矩阵,即M\times M^{-1}=I

矩阵有逆矩阵的前提为该矩阵为方阵且并非所有元素都为0。

逆矩阵的常用性质

性质一:逆矩阵的逆矩阵是原矩阵本身,即(M^{-1})^{-1}=M

性质二:单位矩阵的逆矩阵是它本身,即I^{-1}=I

性质三:转置矩阵的逆矩阵是逆矩阵的转置,即(M^T)^{-1}=(M^{-1})^T

性质四:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵,即(ABC)^{-1}=C^{-1}B^{-1}A^{-1}

三维变换与投影

现实世界是三维的,要在二维屏幕上绘制出三维场景需要通过投影变换降低维数。

三维变换矩阵

三维变换引入齐次坐标,在四维空间内进行研究。

三维变换可表示为某一变换矩阵与物体顶点集合的齐次坐标矩阵相乘的形式,三维变换矩阵是4\times 4的方阵。

例如:

M=\begin{bmatrix} a &b &c &l \\ d &e &f &m \\ g &h &i &n \\ p &q &r &s \end{bmatrix}

M_1=\begin{bmatrix} a &b &c \\ d &e &f \\ g &h &i \end{bmatrix}3\times3的子矩阵,用于对物体进行比例、旋转、反射、错切变换

M_2=\begin{bmatrix} l \\ m\\ n \end{bmatrix}3\times 1的子矩阵,用于对物体进行平移变换。

M_3=\begin{bmatrix} p &q &r \end{bmatrix}1\times 3子矩阵,用于对物体进行投影变换

M_4=\begin{bmatrix} s \end{bmatrix}1\times 1子矩阵,用于对物体进行整体比例变换

三维变换形式

三维变换的基本方法是把矩阵作为算子,作用到变换前的物体顶点集合的齐次坐标矩阵上,得到变换后新的顶点集合的齐次坐标矩阵,连接新的物体顶点,可绘制出变换后的三维物体模型。

设变换前的物体顶点矩阵

P=\begin{bmatrix} x_0 &x_1 &... &x_{n-1} \\ y_0 &y_1 &... &y_{n-1} \\ z_0 &z_1 &... &z_{n-1} \\ 1 &1 &... &1 \end{bmatrix}

变换后的物体顶点矩阵

P^{'} = \begin{bmatrix} x_0^{'} &x_1^{'} &... &x_{n-1}^{'} \\ y_0^{'} &y_1^{'} &... &y_{n-1}^{'} \\ z_0^{'} &z_1^{'} &... &z_{n-1}^{'} \\ 1 &1 &... &1 \end{bmatrix}

则三维变换公式为P^{'}=M\cdot P,即

\begin{bmatrix} x_0^{'} &x_1^{'} &... &x_{n-1}^{'} \\ y_0^{'} &y_1^{'} &... &y_{n-1}^{'} \\ z_0^{'} &z_1^{'} &... &z_{n-1}^{'} \\ 1 &1 &... &1 \end{bmatrix}= \begin{bmatrix} a &b &c &l \\ d &e &f &m \\ g &h &i &n \\ p &q &r &s \end{bmatrix} \begin{bmatrix} x_0 &x_1 &... &x_{n-1} \\ y_0 &y_1 &... &y_{n-1} \\ z_0 &z_1 &... &z_{n-1} \\ 1 &1 &... &1 \end{bmatrix}

三维基本变换

三维基本变换是指将P(x,y,z)点从一个坐标位置变换到另一个坐标位置P^{'}(x^{'},y^{'},z^{'})的过程,是相对于坐标系或坐标轴进行的几何变换

平移变换

T_xT_yT_z为平移参数

平移变换的坐标表示为\left\{\begin{matrix} x^{'}=x+T_x\\ y^{'}=y+T_y\\ z^{'}=z+T_z \end{matrix}\right.

三维平移变换矩阵为M=\begin{bmatrix} 1 &0 &0 &T_x \\ 0 &1 &0 &T_y \\ 0 &0 &1 &T_z \\ 0 &0 &0 &1 \end{bmatrix}

比例变换

S_xS_yS_z为比例系数

比例变换的坐标表示为\left\{\begin{matrix} x^{'}=xS_x\\ y^{'}=yS_y\\ z^{'}=zS_z \end{matrix}\right.

三维比例变换矩阵为M=\begin{bmatrix} S_x &0 &0 &0\\ 0 &S_y &0 &0 \\ 0 &0 &S_z &0 \\ 0 &0 &0 &1 \end{bmatrix}

旋转变换

三维旋转变换一般看作二维旋转变换的组合,可分为绕x轴旋转、绕y轴旋转、绕z轴旋转,绕坐标轴旋转角用\beta表示,\beta正向定义符合右手螺旋定则,大拇指指向旋转轴正向,其余四指的转向为转角的正向。

x轴旋转

\beta为正向旋转角

x轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=y\cos\beta -z\sin \beta \\ z^{'}=y\sin\beta+z\cos\beta\end{matrix}\right.

x轴旋转三维变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &\cos\beta &-\sin\beta &0 \\ 0 &\sin\beta &\cos\beta &0 \\ 0 &0 &0 &1 \end{bmatrix}

y轴旋转

\beta为正向旋转角

y轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\cos\beta+z\sin\beta\\ y^{'}=y \\ z^{'}=-x\sin\beta+z\cos\beta\end{matrix}\right.

y轴旋转三维变换矩阵为M=\begin{bmatrix} \cos\beta &0 &\sin\beta &0\\ 0 &1 &0 &0 \\ -\sin\beta &0 &\cos\beta &0 \\ 0 &0 &0 &1 \end{bmatrix}

z轴旋转

\beta为正向旋转角

z轴旋转变换的坐标表示为\left\{\begin{matrix} x^{'}=x\cos\beta-y\sin\beta\\ y^{'}=x\sin\beta+y\cos\beta \\ z^{'}=z \end{matrix}\right.

z轴旋转三维变换矩阵为M=\begin{bmatrix} \cos\beta &-\sin\beta &0 &0\\ \sin\beta &\cos\beta &0 &0 \\ 0 &0 &1&0 \\ 0 &0 &0 &1 \end{bmatrix}

反射变换

三维反射分为关于坐标轴的反射和关于坐标平面的反射两类

关于x轴的反射

关于x轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=-y \\ z^{'}=-z \end{matrix}\right.

关于x轴的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于y轴的反射

关于y轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=y \\ z^{'}=-z \end{matrix}\right.

关于y轴的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于z轴的反射

关于z轴反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=-y \\ z^{'}=z \end{matrix}\right.

关于z轴的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于xOy平面的反射

关于xOy平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=y \\ z^{'}=-z \end{matrix}\right.

关于xOy平面的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &-1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于yOz平面的反射

关于yOz平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=-x\\ y^{'}=y \\ z^{'}=z \end{matrix}\right.

关于yOz平面的三维反射变换矩阵为M=\begin{bmatrix} -1 &0 &0 &0\\ 0 &1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}

关于zOx平面的反射

关于zOx平面反射变换的坐标表示为\left\{\begin{matrix} x^{'}=x\\ y^{'}=-y \\ z^{'}=z \end{matrix}\right.

关于zOx平面的三维反射变换矩阵为M=\begin{bmatrix} 1 &0 &0 &0\\ 0 &-1 &0 &0 \\ 0 &0 &1 &0 \\ 0 &0 &0 &1 \end{bmatrix}


网站公告

今日签到

点亮在社区的每一天
去签到