Games101:Lecture 02 Review of Linear Algebra

Games101 Lecture 01 是一些图形学的基本介绍,我就不记录了,从 Lecture 02 开始

重点归纳:

  1. 向量点乘可以用于计算向量间的余弦夹角,从而得知向量互相的接近程度
  2. 向量点乘可以用于计算向量的投影,可以用于向量的分解,将向量分解成两个垂直的向量
  3. 向量点乘可以用于计算向量的方向性,判断两个向量是同向还是异向,以及它们的接近程度
  4. 向量叉乘的结果是一个向量,由右手螺旋定则决定方向
  5. 向量叉乘可以用于判断向量的左右关系,判断点在三角形的内部还是外部
  6. 矩阵在图形学中的应用:变换

阅读材料:Fundamentals of Computer Graphics(3rd or 4th), 第二章(Miscellaneous Math)、第五章(Linear Algebra)

A Swift and Brutal Introduction to Linear Algebra!

一、向量 (Vectors)

1. 向量的构成与特点

largea→=AB→=B−A{\\large \overrightarrow{a}=\overrightarrow{A B}=B-A}

  • 向量通常写作largea→{\\large \overrightarrow{a}}或者largea{\\large \mathbf{a}}
  • A 指向 B 的向量 = B 的坐标减去 A 的坐标
  • 向量具有长度和方向两个属性
  • 向量只要长度和方向相同就是相等的,并不关心其起始位置

2. 向量标准化 (Vector Normalization)

largea^=a⃗/∥a⃗∥{\\large \hat{a}=\vec{a} /\|\vec{a}\|}

  • 向量的长度被写作large∥a⃗∥{\\large \|\vec{a}\|}
  • 单位向量 (Unit Vector) 就是长度为 1 的向量
  • 单位向量用于表示方向而不关心其长度

3. 向量求和 (Vextor Addition)

  • 几何:平行四边形法则和三角形法则
  • 代数:坐标相加

4. 向量的坐标表示 (Cartesian Coordinates)

  • largeX{\\large \mathbf{X}}、largeY{\\large \mathbf{Y}}是正交(垂直在高维空间中的推广)的单位向量,分别是笛卡尔坐标系横轴和纵轴的方向
  • 图形学上默认向量是列向量的形式:largemathbfA=left(beginarraylxyendarrayright)=left(beginarrayl43endarrayright){\\large \\mathbf{A}=\\left(\\begin{array}{l}x \\\\y\\end{array}\\right)=\\left(\\begin{array}{l}4 \\\\3\\end{array}\\right)}

5. 向量的点乘 (Vector Dot Product)

largea⃗⋅b⃗=∥a⃗∥∥b⃗∥cos⁡θ{\\large \vec{a} \cdot \vec{b}=\|\vec{a}\|\|\vec{b}\| \cos \theta}

largecos⁡θ=a⃗⋅b⃗∥a⃗∥∥b⃗∥{\\large \cos \theta=\frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\|\|\vec{b}\|}}

largecos⁡θ=a^⋅b^{\\large \cos \theta=\hat{a} \cdot \hat{b}}

  • 向量的点乘结果是一个值
  • 已知两个向量的坐标表示,可以求他们之间的夹角,余弦夹角
  • 两个单位向量的夹角就是他们的点乘

5.1 向量点乘的性质

largea⃗⋅b⃗=b⃗⋅a⃗{\\large \vec{a} \cdot \vec{b}=\vec{b} \cdot \vec{a}}

largea⃗⋅(b⃗+c⃗)=a⃗⋅b⃗+a⃗⋅c⃗{\\large \vec{a} \cdot(\vec{b}+\vec{c})=\vec{a} \cdot \vec{b}+\vec{a} \cdot \vec{c}}

large(ka⃗)⋅b⃗=a⃗⋅(kb⃗)=k(a⃗⋅b⃗){\\large (k \vec{a}) \cdot \vec{b}=\vec{a} \cdot(k \vec{b})=k(\vec{a} \cdot \vec{b})}

  • 当三个向量进行点乘时,后两个向量是不满足交换率和结合率的

5.2 在笛卡尔坐标系下的点乘计算

largevecacdotvecb=left(beginarraylxayaendarrayright)cdotleft(beginarraylxbybendarrayright)=xaxb+yayb{\\large \\vec{a} \\cdot \\vec{b}=\\left(\\begin{array}{l}x_{a} \\\\y_{a}\\end{array}\\right) \\cdot\\left(\\begin{array}{l}x_{b} \\\\y_{b}\\end{array}\\right)=x_{a} x_{b}+y_{a} y_{b}}

largevecacdotvecb=left(beginarraylxayazaendarrayright)cdotleft(beginarraylxbybzbendarrayright)=xaxb+yayb+zazbHuge{\\large \\vec{a} \\cdot \\vec{b}=\\left(\\begin{array}{l}x_{a} \\\\y_{a} \\\\z_{a}\\end{array}\\right) \\cdot\\left(\\begin{array}{l}x_{b} \\\\y_{b} \\\\z_{b}\\end{array}\\right)=x_{a} x_{b}+y_{a} y_{b}+z_{a} z_{b}{\\Huge }}

5.3 利用点乘求解投影 (Dot Product for Projection)

b⃗⊥=ka^{\large \vec{b}_{\perp}=k \hat{a}}

k=∥b⃗⊥∥=∥b⃗∥cos⁡θ{\large k=\left\|\vec{b}_{\perp}\right\|=\|\vec{b}\| \cos \theta}

b⃗⊥=∥b⃗∥cos⁡θa^=∥b⃗∥a^b^a^=b⃗a^a^{\large \vec{b}_{\perp}=\|\vec{b}\| \cos \theta \hat{a}=\|\vec{b}\| \hat{a} \hat{b} \hat{a}=\vec{b} \hat{a} \hat{a}}

  • 向量的投影可以用于分解向量,将b⃗\large \vec{b}分解成两个互相垂直的向量 b⃗_⊥\large \vec{b}\_{\perp} 和 b⃗−b⃗_⊥\large \vec{b}-\vec{b}\_{\perp}

5.4 利用点乘判断向量间的方向 (Dot Product in Graphics)

  • 求解a⃗\large \vec{a}和c⃗\large \vec{c}、b⃗\large \vec{b}的余弦夹角
  • 若cos⁡θ>0\large \cos \theta > 0,则与a⃗\large \vec{a}同向
  • 若cos⁡θ=0\large \cos \theta = 0,则与a⃗\large \vec{a}垂直
  • 若cos⁡θ<0\large \cos \theta < 0,则与a⃗\large \vec{a}异向
  • 若cos⁡θ\large \cos \theta越接近11,则越接近a⃗\large \vec{a}

应用:金属的高光,镜面反射,用于判断出射光和相机法向的接近关系

6. 向量的叉乘 (Cross Product)

叉乘的结果是一个向量

  • 右手螺旋定则确定叉乘的方向
  • 向量的大小为 ∣a⃗∣∗∣b⃗∣∗sin⁡θ\large |\vec{a}| * |\vec{b}| * \sin \theta

应用:

  • 构造坐标系
  • 判断坐标系的左右手:x⃗×y⃗\large \vec{x} \times \vec{y} 得到 z⃗\large \vec{z}, 则说明坐标系的方向是右手坐标系,得到 −z⃗\large -\vec{z}则是左手坐标系

6.1 向量叉乘的计算 (Cross Product: Cartesian Formula)

a⃗×b⃗=(yazb−ybza zaxb−xazb xayb−yaxb)\large \vec{a} \times \vec{b} = \left(\begin{array}{c} 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{array}\right)

a⃗×b⃗=A∗b=(0−zaya za0−xa −yaxa0)(xb yb zb)\large \vec{a} \times \vec{b}=A^{*} b=\left(\begin{array}{ccc} 0 & -z_{a} & y_{a} \\\ z_{a} & 0 & -x_{a} \\\ -y_{a} & x_{a} & 0 \end{array}\right)\left(\begin{array}{l} x_{b} \\\ y_{b} \\\ z_{b} \end{array}\right)

  • A 是一个对偶矩阵

6.2 向量叉乘的性质 (Cross product: Properties)

x⃗×y⃗=+z⃗a⃗×b⃗=−b⃗×a⃗ y⃗×x⃗=−z⃗a⃗×a⃗=0→ y⃗×z⃗=+x⃗a⃗×(b⃗+c⃗)=a⃗×b⃗+a⃗×c⃗ z⃗×y⃗=−x⃗a⃗×(kb⃗)=k(a⃗×b⃗) z⃗×x⃗=+y⃗ x⃗×z⃗=−y⃗\large \begin{array}{lc} \vec{x} \times \vec{y}=+\vec{z} & \vec{a} \times \vec{b}=-\vec{b} \times \vec{a} \\\ \vec{y} \times \vec{x}=-\vec{z} & \vec{a} \times \vec{a}=\overrightarrow{0} \\\ \vec{y} \times \vec{z}=+\vec{x} & \vec{a} \times(\vec{b}+\vec{c})=\vec{a} \times \vec{b}+\vec{a} \times \vec{c} \\\ \vec{z} \times \vec{y}=-\vec{x} & \vec{a} \times(k \vec{b})=k(\vec{a} \times \vec{b}) \\\ \vec{z} \times \vec{x}=+\vec{y} & \\\ \vec{x} \times \vec{z}=-\vec{y} & \end{array}

6.3 向量叉乘的应用

判断向量的左右关系:

  • 如图,a⃗×b⃗\large \vec{a} \times \vec{b}, 其 z 坐标大于 0, a⃗\large \vec{a}在 b⃗\large \vec{b}的右侧
  • 如图,a⃗×b⃗\large \vec{a} \times \vec{b}, 其 z 坐标小于 0, a⃗\large \vec{a}在 b⃗\large \vec{b}的左侧

判断点在三角形的内部还是外部:

  • AB⃗×AP⃗\large \vec{AB} \times \vec{AP}, 结果向外,P 在 AB 的左侧
  • BC⃗×BP⃗\large \vec{BC} \times \vec{BP}, 结果向外,P 在 BC 的左侧
  • CA⃗×CP⃗\large \vec{CA} \times \vec{CP}, 结果向外,P 在 CA 的左侧
  • 则说明 P 在三角形 ABC 内部

对于三角形 CBA, 则 P 一定都在其右侧,如果刚好 P 点在与某一个向量的叉乘为 0, 与其他两个向量的叉乘为同侧,则说明 P 在三角形上,这种情况自己定义是在内部还是在外部

二、正交基与坐标系 (Orthonormal bases and coordinate frames)

1. 自定义坐标系

n∥u⃗∥=∥v⃗∥=∥w⃗∥=1 u⃗⋅v⃗=v⃗⋅w⃗=u⃗⋅w⃗=0 w⃗=u⃗×v⃗ (right-handed) \large \begin{array}{l} n\|\vec{u}\|=\|\vec{v}\|=\|\vec{w}\|=1 \\\ \vec{u} \cdot \vec{v}=\vec{v} \cdot \vec{w}=\vec{u} \cdot \vec{w}=0 \\\ \vec{w}=\vec{u} \times \vec{v} \quad \text { (right-handed) } \end{array}

  • u^\large \hat{u}, v^\large \hat{v}, w^\large \hat{w} 为互相垂直的单位向量

p⃗=(p⃗⋅u⃗)u⃗+(p⃗⋅v⃗)v⃗+(p⃗⋅w⃗)w⃗  (projection) \large \begin{array}{l} \vec{p}=(\vec{p} \cdot \vec{u}) \vec{u}+(\vec{p} \cdot \vec{v}) \vec{v}+(\vec{p} \cdot \vec{w}) \vec{w}\\\ \text { (projection) } \end{array}

  • 向量p⃗\large \vec{p}通过投影分解

三、矩阵 (Matrices)

主要应用于矩阵变换 (Transformations)

  • Translation, Rotation, Shear, Scale

1. 矩阵乘法 (Matrix-Matrix Multiplication)

(13 52 04)(3694 2783)\large \left(\begin{array}{ll} 1 & 3 \\\ 5 & 2 \\\ 0 & 4 \end{array}\right)\left(\begin{array}{llll} 3 & 6 & 9 & 4 \\\ 2 & 7 & 8 & 3 \end{array}\right)

  • 需要满足要求:(M x N) (N x P) = (M x P)

(13 52 04)(3694 2783)=(9?3313 19446126 82832?)\large \left(\begin{array}{ll} 1 & 3 \\\ 5 & 2 \\\ 0 & 4 \end{array}\right)\left(\begin{array}{llll} 3 & 6 & 9 & 4 \\\ 2 & 7 & 8 & 3 \end{array}\right)=\left(\begin{array}{cccc} 9 & ? & 33 & 13 \\\ 19 & 44 & 61 & 26 \\\ 8 & 28 & 32 & ? \end{array}\right)

  • Element (i, j) in the product is the dot product of row i from A and column j from B

2. 矩阵乘法的运算律/性质(Properties)

(AB)C=A(BC){\large (AB)C=A(BC)}

A(B+C)=AB+AC{\large A(B+C) = AB + AC}

(A+B)C=AC+BC{\large (A+B)C = AC + BC}

  • 不满足交换律
  • 满足结合律和分配律

3. 矩阵与列向量

  • 在图形学中,向量用列向量表示是为了方便左乘一个矩阵
  • 向量的点乘和叉乘都可以写成矩阵乘法

4. 矩阵的转置

(123456)T=(135246)\large \left(\begin{array}{ll}1 & 2 \\3 & 4 \\5 & 6\end{array}\right)^{T}=\left(\begin{array}{lll}1 & 3 & 5 \\2 & 4 & 6\end{array}\right)

(AB)T=BTAT\large (A B)^{T}=B^{T} A^{T}

  • 矩阵转置的运算性质

5. 单位矩阵与矩阵的逆

I3×3=(100010001)AA−1=A−1A=I(AB)−1=B−1A−1\large \begin{array}{l}I_{3 \times 3}=\left(\begin{array}{ccc}1 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 1\end{array}\right) \\A A^{-1}=A^{-1} A=I \\(A B)^{-1}=B^{-1} A^{-1}\end{array}

Conda init 设置拖慢 shell 启动速度的解决方法
Windows11 Terminal: 配置与美化 Powershell7、WSL2、WSA