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=BA{\\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}\|}

  • 向量的长度被写作largea{\\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)

largeab=abcosθ{\\large \vec{a} \cdot \vec{b}=\|\vec{a}\|\|\vec{b}\| \cos \theta}

largecosθ=abab{\\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 向量点乘的性质

largeab=ba{\\large \vec{a} \cdot \vec{b}=\vec{b} \cdot \vec{a}}

largea(b+c)=ab+ac{\\large \vec{a} \cdot(\vec{b}+\vec{c})=\vec{a} \cdot \vec{b}+\vec{a} \cdot \vec{c}}

large(ka)b=a(kb)=k(ab){\\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=bcosθ{\large k=\left\|\vec{b}_{\perp}\right\|=\|\vec{b}\| \cos \theta}

b=bcosθa^=ba^b^a^=ba^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}bb_\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)

叉乘的结果是一个向量

  • 右手螺旋定则确定叉乘的方向
  • 向量的大小为 absinθ\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=(yazbybza zaxbxazb xaybyaxb)\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=Ab=(0zaya za0xa 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=+za×b=b×a y×x=za×a=0 y×z=+xa×(b+c)=a×b+a×c z×y=xa×(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. 自定义坐标系

nu=v=w=1 uv=vw=uw=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=(pu)u+(pv)v+(pw)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)AA1=A1A=I(AB)1=B1A1\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