声明:部分内容参考网上博客。
教程地址: # 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} \)(用 ^ 标记)。它只保留原向量的方向,丢掉了 “长度” 这个信息。
向量求和
平行四边形法则
- 把两个向量的起点放在一起:让向量 a 和 b 从同一个点出发。
- 以这两个向量为邻边,画一个平行四边形。
- 从共同起点出发的那条对角线,就是两个向量的和 a+b
三角形法则
- 把一个向量的起点接到另一个向量的终点上:先画向量 a,再把向量 b 的起点放在 a 的终点上。
- 从 a 的起点连到 b 的终点,这条线段就是 a+b
图形学中的坐标表示
图形学上一般用列向量表示向量
$$ \mathbf{A} = \begin{bmatrix} x \\ y \end{bmatrix}, \quad \mathbf{A}^\text{T} = \begin{bmatrix} x & y \end{bmatrix} $$点乘#
速览
- 点乘主要应用于求两个单位向量的夹角,
- 观察两个向量之间是同向、垂直还是反向,可以观察两个向量的接近,若两个向量的点乘接近1则离得很近,若接近0则离得很远
- 利用投影可将一个向量分解成两个(多个)向量和
余弦(cos)是什么
直角三角形里的定义:
在一个直角三角形中,对于一个锐角 θ:
$$ \cos\theta = \frac{\text{邻边}}{\text{斜边}} $$邻边:和角 θ 直接相连的那条直角边
斜边:直角三角形里最长的那条边
点乘的计算#
- 交换律
- 结合律
- 分配律
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} $$作用#
- 判定左和右
用叉乘的方向反应右手螺旋定则的旋转的方向反映左右

向量叉乘判断左右位置
一、场景
图中向量 a 和 b 都在 x-z 平面上(y 分量为 0)。
我们想判断 b 相对于 a 的左右位置。
二、核心计算
计算叉乘 a×b,结果只有 y 分量:
a×b=(0,axbz−azbx,0)
我们只关心这个 y 分量的正负号。
三、判断规则
| 叉乘 y 分量符号 | b 相对于 a 的位置 | 旋转方向 |
|---|---|---|
| > 0 | 在 a 的左侧 | 逆时针 |
| < 0 | 在 a 的右侧 | 顺时针 |
| = 0 | 与 a 共线 | 无旋转 |
结合你的图来看:
- b 在 a 的左侧
- 所以 a×b 的 y 分量为正
- 方向指向 +y 轴(向上)
四、一句话总结
叉乘结果的 y 分量为正 → 左;为负 → 右;为零 → 共线。
- 判定内和外 (三角形光栅化基础)
绕同一个方向判断这个向量与其他所有向量的左右位置,如果都一致则在内部。

三角形内外判断
一、准备工作:定义向量
我们以图中的三角形 ABC 和内部点 P 为例。
首先,给三角形的每条边定义一个有向边向量,并定义从边起点到 P 点的向量:
| 边 | 边向量 | 点向量(从边起点到 P) |
|---|---|---|
| AB | AB=B−A | AP=P−A |
| BC | BC=C−B | BP=P−B |
| CA | CA=A−C | CP=P−C |
二、核心计算:三次叉乘
对每条边,计算 “边向量” 与 “点向量” 的叉乘。
我们在 x-y 平面进行计算,叉乘结果只有 z 分量,我们只需关注其正负号。
第一条边 AB
c1=AB×AP
图中 P 在 AB 的左侧,所以 c1>0
第二条边 BC
c2=BC×BP
图中 P 在 BC 的左侧,所以 c2>0
第三条边 CA
c3=CA×CP
图中 P 在 CA 的左侧,所以 c3>0
三、判断内外:符号一致性
内部:c1,c2,c3 全部同号(全部为正,或全部为负)
就像图中的 P 点,三个叉乘结果都为正,说明它始终在所有边的同一侧。
外部:如果有任何一个结果的符号与其他不同
说明点 P 穿过了至少一条边。 四、一句话记忆
所有叉乘结果同号 → 内部;出现异号 → 外部
- 定义直角坐标系

叉乘构建右手坐标系
图中的核心关系是:w=u×v
这正是叉乘在定义三维空间中的关键作用:
当 u 和 v 是两个互相垂直的单位向量时,它们的叉乘结果 w 会自动满足:
- 垂直于前两者:w⋅u=0 且 w⋅v=0
- 单位长度:∥w∥=∥u∥∥v∥sin(90∘)=1
这个性质保证了 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{ 矩阵。} $$- 性质 : 结合律,分配律,没有交换律
矩阵乘法 · 2×2 简洁演示
设:
$$ A=\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix},\quad B=\begin{pmatrix}5 & 6 \\ 7 & 8\end{pmatrix} $$能否相乘
$$ A:2\times2,B:2\times2 $$前列数 = 后行数 → 可相乘
结果形状
$$ 2\times2 \times 2\times2 = \boldsymbol{2\times2}$$计算规则(唯一核心)
$$ C_{ij} = A_{第i行} \cdot B_{第j列} \text{(对应相乘,再相加)}$$核心公式:
$$ C_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj} $$逐元素计算
$$ \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} $$最终结果
$$ C=A\times B=\begin{pmatrix}19 & 22 \\ 43 & 50\end{pmatrix} $$重要性质
矩阵乘法 不满足交换律
$$ A\times B \neq B\times A $$尺寸匹配:前矩阵的列数 = 后矩阵的行数。
结果尺寸:前行数 × 后列数。
计算规则:结果的第 i 行第 j 列 = A 的第 i 行 点乘 B 的第 j 列。
顺序敏感:A×B ≠ B×A,顺序不能乱。
单位矩阵#
- 定义
主对角线全为 1,其余元素全为 0 的方阵,记作 \(I\) 或 \(I_n\)。
它就像数字里的 “1”,任何矩阵和它相乘,结果都不变。
- 示例
- 核心性质 .
- 单位元性质:\(A \times I = I \times A = A\)
- 对称矩阵:\(I^T = I\)
- 逆矩阵关系:\(A \times A^{-1} = I\)
- 矩阵乘积的逆矩阵法则
- 若 \(A\) 和 \(B\) 都是可逆矩阵,则它们的乘积 \(AB\) 也可逆,且: $$ (AB)^{-1} = B^{-1}A^{-1} $$
- 核心逻辑(“穿衣服”比喻)
- 把矩阵乘法 \(AB\) 想象成“先穿袜子 \(A\),再穿鞋 \(B\)”。
- 要撤销这个操作,必须按倒序:“先脱鞋(\(B^{-1}\)),再脱袜子(\(A^{-1}\))”。
- 因此,\((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\),故法则成立。
转置#
- 定义: 将矩阵的行与列互换,沿主对角线翻转。 记为 \(A^T\)。
- 形状规则: 若 \(A\) 是 \(m\times n\),则 \(A^T\) 是 \(n\times m\)。
- 元素规则 \[ (A^T)_{ij} = A_{ji} \]
- 示例(2×2)
- 重要性质
- 对称矩阵
满足 \(A^T=A\),元素关于主对角线对称。
