Lecture 02 Review of Linear Algebra
图形学的依赖
基础数学
- 线性代数
- 微积分
- 统计学
基础物理
- 光学
- 力学
杂项
- 信号处理
- 数值分析
一点美学
向量
(数学上称为向量,物理上称为矢量)
\(\vec{AB}\) = B - A
向量表示方向和长度
向量的大小\(\Vert\vec{a}\rVert\)
单位向量 \(\widehat{a} = \vec{a}/\Vert\vec{a}\rVert\),用于表示方向
向量求和
几何上
平行四边形法则、三角形法则
代数上
Cartesian Coordinates(笛卡尔坐标系)
坐标相加
在图形学中,默认向量为列向量
\[A =\begin{pmatrix} x\\ y\\ \end{pmatrix}\\ A^T=\begin{pmatrix} x,y\\ \end{pmatrix}\\ ||A|| = \sqrt{x^2+y^2} \]点乘
在图形学中
-
可以用向量算出这两个向量的夹角余弦,进而得到夹角
-
将一个向量任意地进行垂直于平行的分解
-
两个向量点乘结果可以得知它们的方向有多么接近
结果越接近1方向越接近,越接近0越垂直,越接近-1越反向
-
向量点乘的正负可以获知两个向量前与后的信息
结果大于0同向
结果等于0垂直
结果小于0反向
向量的点乘最终结果是一个数
\[\vec{a}\cdot \vec{b} = \lVert\vec{a}\rVert \ \lVert\vec{b}\rVert \cos{\theta}\\ \cos{\theta} = {{\vec{a}\cdot \vec{b}}\over {\lVert\vec{a}\rVert \ \lVert\vec{b}\rVert}} \]对于单位向量
\(cos\theta = \widehat{a}\cdot\widehat{b}\)
性质
\[\vec{a}\cdot\vec{b} = \vec{b}\cdot\vec{a}\\ \vec{a}\cdot(\vec{b}+\vec{c}) = \vec{a}\cdot\vec{b}+\vec{a}\cdot\vec{c}\\ (k\vec{a})\cdot\vec{b} = \vec{a}\cdot({k\vec{b}}) = k(\vec{a}\cdot\vec{b}) \]在2D中
\[\vec{a}\cdot\vec{b} = \begin{pmatrix} x_a\\ y_a \end{pmatrix} \cdot \begin{pmatrix} x_b\\ y_b \end{pmatrix} = x_ax_b + y_ay_b \]在3D中
\[\vec{a}\cdot\vec{b} = \begin{pmatrix} x_a\\ y_a\\ z_a \end{pmatrix} \cdot \begin{pmatrix} x_b\\ y_b\\ z_b \end{pmatrix} = x_a x_b + y_a y_b + z_a z_b \]叉乘
-
可用于建立三维空间的直角坐标系
-
判定左和右 (如\(\vec{a}\times\vec{b}\))
叉乘结果大于0,则b在a左侧,反之在右侧(左手坐标系)
-
判断内和外(三角形光栅化的基础)
假设有A、B、C三个点逆时针排列,
\(若\vec{AB}\times\vec{AP}、\vec{BC}\times\vec{BP}和\vec{CA}\times\vec{CP}\\均判断出P在三边的同一侧(结果同号),\\说明P点在三角形内侧\\若结果为0,则自己觉得在内侧或外侧\)
向量叉乘的结果为向量,与两个原向量垂直,方向可应用右手螺旋定则,四指方向从a旋转到b,拇指方向为叉乘结果向量方向
\[a\times b = -b \times a\\ \lVert a\times b\rVert = \lVert a\rVert \lVert b\rVert sin\phi \]性质
\[\vec{x}\times\vec{y}=+\vec{z}\\ \vec{y}\times\vec{x}=-\vec{z}\\ \vec{y}\times\vec{z}=+\vec{x}\\ \vec{z}\times\vec{y}=-\vec{x}\\ \vec{z}\times\vec{x}=+\vec{y}\\ \vec{x}\times\vec{z}=-\vec{y}\\ \\ \vec{a}\times\vec{b} = -\vec{b}\times\vec{a}\\ \vec{a}\times\vec{a} = 0\\ \vec{a}\times(\vec{b}+\vec{c})=\vec{a}\times\vec{b}+\vec{a}\times\vec{c}\\ \vec{a}\times(k\vec{b})=k(\vec{a}\times\vec{b})\\ \]*若一个向量叉乘自己,得到的是长度为0的向量,而不是0
*若xy叉乘为z,则为右手坐标系,反之为左手坐标系
- OpenGL为右手坐标系(Z轴向外)
- DirextX为左手坐标系(Z轴向内)
- Vulkan为右手坐标系(Y轴向下)
- Metal为左手坐标系(Z轴向内)
- Unity和Unreal为左手坐标系(同DX)
以矩阵的形式
\[\vec{a}\times\vec{b} = \begin{pmatrix} y_a z_b - y_b z_a\\ z_a x_b - x_a z_b\\ x_a y_b - y_a x_b \end{pmatrix}\\ \vec{a}\times\vec{b} = A*b = \begin{pmatrix} 0 & -z_a & y_a\\ z_a & 0 & -x_a\\ -y_a & x_a & 0\\ \end{pmatrix} \begin{pmatrix} x_b\\ y_b\\ z_b \end{pmatrix}\\ \]矩阵
矩阵乘矩阵
\[(M\times N)(N\times P) = (M\times P)\\ 左矩阵列数需等于右矩阵行数才可相乘\\ 计算为前行乘后列\\ 例: \begin{pmatrix} 1 & 3\\ 5 & 2\\ 0 & 4 \end{pmatrix} \begin{pmatrix} 3 & 6 & 9 & 4\\ 2 & 7 & 8 & 3 \end{pmatrix} = \begin{pmatrix} 9 & 29& 33 & 13\\ 19 & 44 & 61 & 26\\ 8 & 28 & 32 & 12 \end{pmatrix} \]性质
-
无交换律,\(AB != BA\)
-
结合律和分配律
(AB)C = A(BC)
A(B+C) = Ab + AC
(A+B)C = AC + BC
矩阵乘向量
将向量视为列矩阵\((m\times 1)\)
\[这里将(x,y)关于y轴对称\\ \begin{pmatrix} -1 & 0\\ 0 & 1 \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix} = \begin{pmatrix} -x\\ y \end{pmatrix} \]别的操作
转置
转换行和列(ij->ji)
\[\begin{pmatrix} 1 & 2\\ 3 & 4\\ 5 & 6 \end{pmatrix}^T = \begin{pmatrix} 1 & 3 & 5\\ 2 & 4 & 6 \end{pmatrix} \]性质
\((AB)^T = B^T A^T\)
单位矩阵
对角阵只有对角线上有非0的元素,单位矩阵为对角线上全是1的对角阵
\[I_{3\times 3} = \begin{pmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{pmatrix} \\ AA^{-1} = A^{-1}A = I\\ (AB)^{-1} = B^{-1}A^{-1} \]向量的点乘与叉乘的矩阵形式
-
点乘
\[\vec{a}\cdot\vec{b} = \vec{a^T}\vec{b}\\ = \begin{pmatrix} x_a & y_a & z_a\end{pmatrix} \begin{pmatrix} x_b\\ y_b\\ z_b \end{pmatrix} =(x_a x_b+y_a y_b + z_a z_b) \] -
叉乘
\[\vec{a}\times\vec{b} = A^*b = \begin{pmatrix} 0 & -z_a & y_a\\ z_a & 0 & -x_a\\ -y_a & x_a & 0 \end{pmatrix} \begin{pmatrix} x_b\\ y_b\\ z_b \end{pmatrix}\\ A^*为a的伴随矩阵\\ A^* = \begin{pmatrix} A_{11} & A_{21} & ... & A_{n1}\\ A_{12} & A_{22} & ... & A_{n2}\\ ... & ... & ... & ... \\ A_{1n} & A_{2n} & ... & A_{nn}\\ \end{pmatrix} =(A_{ij})^T \]