跳过正文
  1. Posts/

GAMES101学习笔记02:向量与线性代数

··4157 字·9 分钟·
Xenolies
作者
Xenolies
Keep On Keeping On

声明:部分内容参考网上博客。

教程地址: # GAMES101-现代计算机图形学入门-闫令琪

课程主页: # GAMES101: 现代计算机图形学入门

作业汇总: http://games-cn.org/forums/topic/allhw/

一些笔记参考: TA学习笔记

向量
#

  • 定义
  • 标准化
  • 求和
  • 坐标表示
向量

向量最重要的两个属性:1.方向 2.本身的长度

向量定义: \(\vec{AB} = B - A\)

从点 \(A\) 指向点 \(B\) 的向量 \(\vec{AB}\),等于终点 \(B\) 的坐标减去起点 \(A\) 的坐标。

向量的标准化

向量的模长

向量的模,就是向量的长度、大小,符号写作:\(\|\vec{a}\|\)

$$ |\vec{a}\| = \sqrt{a_x^2 + a_y^2} $$

用勾股定理可以求出向量的模长

\({a_x}\) : x 轴上的分量(水平)

\({a_y}\) : y 轴上的分量(水平)

** 向量的模长 = 从原点到该向量终点的直线距离 = 直角三角形的斜边长度(用勾股定理算出来的)**

单位向量(Unit Vector)

长度为 1 的向量,记作 \(\hat{a} \)(用 ^ 标记)。它只保留原向量的方向,丢掉了 “长度” 这个信息。

$$ \hat{a} = \frac{\vec{a}}{\|\vec{a}\|} $$

向量求和

平行四边形法则
  • 把两个向量的起点放在一起:让向量 a 和 b 从同一个点出发。
  • 以这两个向量为邻边,画一个平行四边形
  • 从共同起点出发的那条对角线,就是两个向量的和 a+b
三角形法则
  • 把一个向量的起点接到另一个向量的终点上:先画向量 a,再把向量 b 的起点放在 a 的终点上。
  • 从 a 的起点连到 b 的终点,这条线段就是 a+b
$$ \vec{a} = (a_x, a_y),\quad \vec{b} = (b_x, b_y) $$$$ \vec{a} + \vec{b} = (a_x + b_x, a_y + b_y) $$

图形学中的坐标表示

图形学上一般用列向量表示向量

$$ \mathbf{A} = \begin{bmatrix} x \\ y \end{bmatrix}, \quad \mathbf{A}^\text{T} = \begin{bmatrix} x & y \end{bmatrix} $$

点乘
#

速览
  • 点乘主要应用于求两个单位向量的夹角,
  • 观察两个向量之间是同向、垂直还是反向,可以观察两个向量的接近,若两个向量的点乘接近1则离得很近,若接近0则离得很远
  • 利用投影可将一个向量分解成两个(多个)向量和
$$ \vec{a} \cdot \vec{b} = \|\vec{a}\| \|\vec{b}\| \cos\theta $$$$ \cos\theta = \frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\| \|\vec{b}\|} $$
余弦(cos)是什么

直角三角形里的定义:

在一个直角三角形中,对于一个锐角 θ:

$$ \cos\theta = \frac{\text{邻边}}{\text{斜边}} $$

邻边:和角 θ 直接相连的那条直角边

斜边:直角三角形里最长的那条边

点乘的计算
#

  • 交换律
  • 结合律
  • 分配律
$$ \cancel{(交换律)} \newline \vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a} $$$$ \cancel{(分配律)} \newline \vec{a} \cdot (\vec{b} + \vec{c}) = \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c} $$$$ \cancel{(结合律)} \newline (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_a x_b + y_a y_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 $$

点乘的作用
#

  • 寻找两个向量之间的夹角

    $$ \cos\theta = \frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\| \|\vec{b}\|} $$
  • 找到一个像两个在另一个向量上的投影

    投影

\(\vec{b}_\perp\) 是 \(\vec{b}\) 在向量 \(\vec{a}\) 上的投影

投影向量的方向必须与向量A完全一致,表示为

$$ \vec{b}_\perp = k\hat{a} $$

投影长度的计算

$$ k = \|\vec{b}_\perp\| = \|\vec{b}\|\cos\theta $$
k 是投影向量 b⊥​ 的模长(大小)。
它等于原向量 b 的模长 ∥b∥ 乘以两向量夹角 θ 的余弦值 cosθ。
这个公式来自直角三角形的边角关系:投影长度就是 b 在 a 方向上的 “影子” 长度
  • 判断向量的方向
cosθ 如何反映方向?
  • 当 θ<90∘ 时:cosθ>0 → 点积为正。

这说明两个向量的方向大致相同,夹角是锐角。

  • 当 θ=90∘ 时:cosθ=0 → 点积为 0。

这说明两个向量互相垂直,没有任何方向上的重叠。

  • 当 θ>90∘ 时:cosθ<0 → 点积为负。

这说明两个向量的方向大致相反,夹角是钝角。

叉乘
#

速览
  • AxB=-BxA
  • 判定左右(内外)
    • 若AxB为正则点A在点B在A左侧,若点P在点A、B、C内,则ABXAP,BCxBP,CAxCP结果都为外(内)则P在ABC内
    • 若任意一个结果不同则P在ABC外
  • 定义坐标系
    • 要求:单位向量、互相垂直(点乘为0且叉乘结果为另外一轴)
    • 可以获得任意一个向量分解为多个投影
叉乘
  • 方向:右手螺旋定则(OpenGL左手坐标系)
  • 作用: 建立三维空间直角坐标系
  • 坐标运算:克莱姆法则

向量叉乘
#

一、标准正交基向量叉乘(3D 坐标系基础)

$$ \begin{aligned} \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} \end{aligned} $$

二、叉乘核心代数性质

$$ \begin{aligned} 1.\ &\text{反交换性:} \quad \vec{a} \times \vec{b} = -(\vec{b} \times \vec{a}) \\ 2.\ &\text{自身叉乘为零向量(长度是0):} \quad \vec{a} \times \vec{a} = \vec{0} \\ 3.\ &\text{对向量加法的分配律:} \quad \vec{a} \times (\vec{b} + \vec{c}) = \vec{a} \times \vec{b} + \vec{a} \times \vec{c} \\ 4.\ &\text{数乘结合律:} \quad \vec{a} \times (k\vec{b}) = k(\vec{a} \times \vec{b}) \quad (k \in \mathbb{R}) \end{aligned} $$

三、叉乘模长公式(几何意义)

$$\begin{aligned}| \vec{a} \times \vec{b}| &= |\vec{a}| \cdot |\vec{b}| \cdot \sin\theta \quad (0^\circ \le \theta \le 180^\circ) \end{aligned} $$

作用
#

  1. 判定左和右

用叉乘的方向反应右手螺旋定则的旋转的方向反映左右

向量叉乘判断左右位置

一、场景

图中向量 a 和 b 都在 x-z 平面上(y 分量为 0)。

我们想判断 b 相对于 a 的左右位置。

二、核心计算

计算叉乘 a×b,结果只有 y 分量

a×b=(0,ax​bz​−az​bx​,0)

我们只关心这个 y 分量的正负号

三、判断规则

叉乘 y 分量符号b 相对于 a 的位置旋转方向
> 0在 a 的左侧逆时针
< 0在 a 的右侧顺时针
= 0与 a 共线无旋转

结合你的图来看:

  • b 在 a 的左侧
  • 所以 a×b 的 y 分量为
  • 方向指向 +y 轴(向上)

四、一句话总结

叉乘结果的 y 分量为正 → 左;为负 → 右;为零 → 共线。

  1. 判定内和外 (三角形光栅化基础)

绕同一个方向判断这个向量与其他所有向量的左右位置,如果都一致则在内部。

三角形内外判断

一、准备工作:定义向量

我们以图中的三角形 ABC 和内部点 P 为例。

首先,给三角形的每条边定义一个有向边向量,并定义从边起点到 P 点的向量:

边向量点向量(从边起点到 P)
ABAB=B−AAP=P−A
BCBC=C−BBP=P−B
CACA=A−CCP=P−C

二、核心计算:三次叉乘

对每条边,计算 “边向量” 与 “点向量” 的叉乘。

我们在 x-y 平面进行计算,叉乘结果只有 z 分量,我们只需关注其正负号。

  1. 第一条边 AB

    c1​=AB×AP

    图中 P 在 AB 的左侧,所以 c1​>0

  2. 第二条边 BC

    c2​=BC×BP

    图中 P 在 BC 的左侧,所以 c2​>0

  3. 第三条边 CA

    c3​=CA×CP

    图中 P 在 CA 的左侧,所以 c3​>0


三、判断内外:符号一致性

  • 内部:c1​,c2​,c3​ 全部同号(全部为正,或全部为负)

    就像图中的 P 点,三个叉乘结果都为正,说明它始终在所有边的同一侧。

  • 外部:如果有任何一个结果的符号与其他不同

    说明点 P 穿过了至少一条边。 四、一句话记忆

所有叉乘结果同号 → 内部;出现异号 → 外部

  1. 定义直角坐标系
叉乘构建右手坐标系

图中的核心关系是:w=u×v

这正是叉乘在定义三维空间中的关键作用:

  1. 当 u 和 v 是两个互相垂直的单位向量时,它们的叉乘结果 w 会自动满足:

    • 垂直于前两者:w⋅u=0 且 w⋅v=0
    • 单位长度:∥w∥=∥u∥∥v∥sin(90∘)=1
  2. 这个性质保证了 u,v,w 三者能构成一组右手正交单位基,即一个完美的局部坐标系。

二、坐标分解的本质

基于这组基,任何向量 p​ 都可以被分解为:

p​=(p​⋅u)u+(p​⋅v)v+(p​⋅w)w

这是因为三个基向量互相垂直且长度为 1,点积 (p​⋅u) 就直接代表了 p​ 在 u 方向上的分量大小。

三、图形学中的应用

  • 构建局部空间:在渲染中,为每个物体建立一个基于叉乘的局部坐标系,方便计算光照和朝向。
  • 向量投影与分解:将世界空间的向量转换到局部空间,或反之,是 3D 变换的基础。

矩阵
#

速览
  • (MxN)(NxP)=(MxP)
  • 矩阵没有交换律,只有结合律
  • 转置:(AB)T=BT AT
  • 单位矩阵I(对角阵I):可以算出矩阵A-1(A逆),可以用于返回变换前的结果
  • 向量的点乘、叉乘都可以转换为矩阵相乘
  • 点乘:A·B=ATB
  • 叉乘:AxB=A*B

矩阵是由数字(或其他数学对象)按矩形阵列排列而成的集合

一个 M × N 的矩阵包含 N 行和 N 列,共有 M × N 个元素。

$$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix} $$$$ \text{向量叉乘写成矩阵乘法形式:} \vec{a} \times \vec{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} $$

矩阵乘法
#

$$ \text{若 } A \text{ 是 } m \times n \text{ 矩阵,} B \text{ 是 } n \times p \text{ 矩阵,} \\ \text{则 } C = A \times B \text{ 是 } m \times p \text{ 矩阵。} $$
  • 性质 : 结合律,分配律,没有交换律
$$ \begin{aligned} (A \cdot B)\cdot C = A \cdot (B\cdot C) \\ A \cdot (B + C) = A \cdot B + A \cdot C \\ (A + B) \cdot C = A \cdot C + B \cdot C \end{aligned} $$
矩阵乘法 · 2×2 简洁演示

设:

$$ A=\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix},\quad B=\begin{pmatrix}5 & 6 \\ 7 & 8\end{pmatrix} $$
  1. 能否相乘

    $$ A:2\times2,B:2\times2 $$

    前列数 = 后行数 → 可相乘

  2. 结果形状

    $$ 2\times2 \times 2\times2 = \boldsymbol{2\times2}$$
  3. 计算规则(唯一核心)

    $$ C_{ij} = A_{第i行} \cdot B_{第j列} \text{(对应相乘,再相加)}$$

    核心公式:

    $$ C_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj} $$
  4. 逐元素计算

    $$ \begin{aligned} C_{11} &= 1\times5 + 2\times7 = 5+14=19 \\ C_{12} &= 1\times6 + 2\times8 = 6+16=22 \\ C_{21} &= 3\times5 + 4\times7 = 15+28=43 \\ C_{22} &= 3\times6 + 4\times8 = 18+32=50 \end{aligned} $$

    [!VISUAL]- 计算过程可视化 > >

    $$ > > \begin{pmatrix} > > \color{red}{1} & \color{red}{2} \\ > > 3 & 4 > > \end{pmatrix} > > \times > > \begin{pmatrix} > > \color{blue}{5} & 6 \\ > > \color{blue}{7} & 8 > > \end{pmatrix} > > = > > \begin{pmatrix} > > \color{purple}{19} & 22 \\ > > 43 & 50 > > \end{pmatrix} > > $$

    $$ \color{red}{1}\times\color{blue}{5} + \color{red}{2}\times\color{blue}{7} = \color{purple}{19} $$
  5. 最终结果

    $$ C=A\times B=\begin{pmatrix}19 & 22 \\ 43 & 50\end{pmatrix} $$
  6. 重要性质

矩阵乘法 不满足交换律

$$ A\times B \neq B\times A $$

尺寸匹配:前矩阵的列数 = 后矩阵的行数。

结果尺寸:前行数 × 后列数。

计算规则:结果的第 i 行第 j 列 = A 的第 i 行 点乘 B 的第 j 列。

顺序敏感:A×B ≠ B×A,顺序不能乱。

单位矩阵
#

  1. 定义

主对角线全为 1,其余元素全为 0 的方阵,记作 \(I\) 或 \(I_n\)。

它就像数字里的 “1”,任何矩阵和它相乘,结果都不变。

  1. 示例
$$ \begin{aligned} I_2=\begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix},\quad I_3=\begin{pmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{pmatrix} \end{aligned} $$
  1. 核心性质 .
    • 单位元性质:\(A \times I = I \times A = A\)
    • 对称矩阵:\(I^T = I\)
    • 逆矩阵关系:\(A \times A^{-1} = I\)
  2. 矩阵乘积的逆矩阵法则
  • 若 \(A\) 和 \(B\) 都是可逆矩阵,则它们的乘积 \(AB\) 也可逆,且: $$ (AB)^{-1} = B^{-1}A^{-1} $$
  • 核心逻辑(“穿衣服”比喻)
    1. 把矩阵乘法 \(AB\) 想象成“先穿袜子 \(A\),再穿鞋 \(B\)”。
    2. 要撤销这个操作,必须按倒序:“先脱鞋(\(B^{-1}\)),再脱袜子(\(A^{-1}\))”。
    3. 因此,\((AB)\) 的逆就是 \(B^{-1}A^{-1}\)。
  • 推导

根据逆矩阵的定义,我们只需验证 \((AB)(B^{-1}A^{-1}) = I\):

$$ \begin{aligned} (AB)(B^{-1}A^{-1}) &= A(BB^{-1})A^{-1} \quad \text{结合律:只加括号,不换顺序} \\ &= AIA^{-1} \quad \text{逆矩阵定义:}BB^{-1}=I \\ &= AA^{-1} \quad \text{单位矩阵性质:}AI=A \\ &= I \quad \text{逆矩阵定义:}AA^{-1}=I \end{aligned} $$

同理可证 \((B^{-1}A^{-1})(AB) = I\),故法则成立。

转置
#

  1. 定义: 将矩阵的行与列互换,沿主对角线翻转。 记为 \(A^T\)。
  2. 形状规则: 若 \(A\) 是 \(m\times n\),则 \(A^T\) 是 \(n\times m\)。
  3. 元素规则 \[ (A^T)_{ij} = A_{ji} \]
  4. 示例(2×2)
$$ \begin{aligned} % 2×2 转置示例 A &= \begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix} \quad\Rightarrow\quad A^T = \begin{pmatrix}1 & 3 \\ 2 & 4\end{pmatrix} \\[1em] % 3×2 转置示例 B &= \begin{pmatrix}1 & 5 \\ 2 & 6 \\ 3 & 7\end{pmatrix} \quad\Rightarrow\quad B^T = \begin{pmatrix}1 & 2 & 3 \\ 5 & 6 & 7\end{pmatrix} \end{aligned} $$
  1. 重要性质
$$ \begin{aligned} (A^T)^T &= A \\ (A+B)^T &= A^T+B^T \\ (kA)^T &= kA^T \\ (AB)^T &= B^TA^T \quad (\text{顺序反转}) \end{aligned} $$
  1. 对称矩阵

满足 \(A^T=A\),元素关于主对角线对称。