00. 数学速查表
00. 数学速查表
本篇位置:模块一 · 附录 | 前置:无 | 不必顺读,随时回查
这一篇不是课,是一张备查表。
正文各篇会默认你认识 、、 这些记号。如果读到哪里卡在"这个符号是什么意思"上,翻到这里,找到对应那条,看完回去接着读——不要试图先把这一篇背下来。
1. 符号对照
碰到不认识的符号,先在这张表里找。
| 符号 | 念作 | 意思 | 例子 |
|---|---|---|---|
| 约等于 | 差不多相等 | ||
| 不等于 | |||
| 小于等于 / 大于等于 | |||
| x 的绝对值 | 去掉负号 | ||
| 向量 v 的长度 | 同一个记号,看 是数还是向量 | ||
| 根号 x | 平方后等于 的那个数 | ||
| x 的 n 次方 | 自乘 次 | ||
| 求和(读 sigma) | 把一串数加起来 | 见第 6 节 | |
| delta | 变化量、差值 | = x 的变化量 | |
| 点乘 | 两个向量的点积 | ||
| 叉乘 | 两个向量的叉积 | ||
| M 的转置 | 矩阵沿对角线翻过来 | 见第 7 节 | |
| M 的逆 | 撤销 这个变换 | ||
| v hat | 长度归一化成 1 的 | ||
| 属于 | 落在某个范围里 |
希腊字母只在几个固定位置出现,认识这几个就够了:
| 字母 | 念作 | 本系列里通常指 |
|---|---|---|
| theta | 角度 | |
| alpha | 透明度 | |
| lambda | 波长;也常用作插值权重 | |
| gamma | 幂函数的指数(第 8 篇) | |
| pai | 圆周率 3.14159… | |
| sigma | 标准差(高斯核的"胖瘦") | |
| 大写 sigma | 求和 |
2. 角度与弧度
同一个角有两种说法,图形学里两种都会遇到。
- 角度制:一圈 = 360°。人读起来直观。
- 弧度制:一圈 = 。所有数学库(
sinf、cosf、GLSL 的sin)只认弧度。
换算只有一条:
常用值背下来更快:
| 角度 | 0° | 30° | 45° | 60° | 90° | 180° | 360° |
|---|---|---|---|---|---|---|---|
| 弧度 | 0 |
最常见的一个 bug:往
sin()里直接传角度值。sin(90)不是 1,而是 0.894——因为它把 90 当成了 90 弧度(约 14 圈)。转出来的东西方向全错、但又不至于崩溃,最难查。
3. sin 与 cos:看一张图就够
不用记公式,记住这张图:
图:画一个半径为 1 的圆。从正右方开始,逆着转 角,落到圆上某一点——这一点的横坐标就是 ,纵坐标就是 。这就是它们的定义,不是什么由来已久的公式。
由这张图能立刻读出三件事:
- 和 的值永远在 到 之间(因为圆的半径是 1)。
- ,(起点在正右方)。
- ,(转到正上方)。
把 从 0 转到一圈,把两个坐标各自画成曲线,就是这两条波:
图: 从 1 出发, 从 0 出发,两条曲线永远差 90°。
常用取值(推导旋转矩阵时会用到):
| 0° | 30° | 45° | 60° | 90° | 180° | 270° | |
|---|---|---|---|---|---|---|---|
| 1 | 0.5 | 0 | −1 | 0 | |||
| 0 | 0.5 | 1 | 0 | −1 |
唯一需要记住的恒等式:
它其实就是圆上一点到圆心的距离等于半径 1——勾股定理换个写法。第 2 篇算旋转矩阵的行列式时会用到它。
4. 四种函数长什么样
| 函数 | 形状 | 一句话 |
|---|---|---|
| 直线 | 每往右走 1 格,就升 格 | |
| 抛物线 | 离 0 越远涨得越猛 | |
| 指数 | 加 1, 就乘 2 | |
| 对数 | 指数的反过程: 乘 2,它才加 1 |
指数和对数是一对反过程,这个关系在讲深度精度(第 5 篇)和 gamma(第 8 篇)时都会用到:
念法:"2 的几次方等于 8?答案是 3。"
5. 幂函数 :第 8 篇的主角
把指数换成任意小数,就得到幂函数。输入输出都限制在 0 到 1 之间时,它的形状只由指数 决定:
图: 把曲线压向右下(整体变暗), 把它抬向左上(整体变亮), 就是不改动的对角线。
一个具体数字,第 8 篇会反复出现:
也就是说,把 0.5 送进一条 的曲线,出来的是 0.218,只有原来的四成多一点。这个"0.5 进去,0.218 出来"就是"为什么 0.5 不是一半亮"的全部数学内容。
运算律(偶尔用到):
6. 求和符号
就是"把下面这一串加起来"的缩写,没有别的意思。
念作:" 从 1 数到 4,每次取出 ,全部加起来。"
第 7 篇讲卷积时会看到这种写法:
它说的是"把每个像素 乘上自己的权重 ,再全部加起来"——就是加权平均,写成代码就是一个 for 循环里 sum += w[i] * p[i]。
7. 向量与矩阵的记号
向量写成一列数,用小写字母:
长度(也叫模)用勾股定理:
归一化是除以自己的长度,得到一个方向相同、长度为 1 的向量:
矩阵写成方阵,用大写字母:
转置 是沿主对角线(左上到右下)翻过来,行变列:
单位矩阵 是对角线全 1、其余全 0 的矩阵,作用是"什么都不做":
逆矩阵 是撤销 的那个变换,定义就是乘起来等于单位矩阵:
8. 导数:只需要"变化率"这一层意思
本系列不做微积分推导。你只需要知道一件事:
导数 = 变化率 = 这条曲线在这一点有多陡。
导数大 = 变化剧烈,导数小 = 变化平缓,导数为 0 = 局部走平了。
它在图形学里的三个化身:
- 法线本质是表面高度的变化率(第 4 篇);
- shader 里的
dFdx/dFdy是"相邻像素之间纹理坐标变了多少",GPU 用它来选 mipmap 层级(第 7 篇); - 边缘检测就是找变化率大的地方(亮度突变处 = 边)。
看到 这个记号,读成" 对 的变化率"就够了。
9. 一分钟自检
读完正文若干篇之后,回来看看这几句能不能不假思索地答出来。答不出的翻回对应小节。
1. sin(90) 在 C++ 里返回什么?
约 0.894,不是 1。C 标准库的 sin 收弧度,90 弧度约等于转了 14 圈。要得到 1,应该写 sin(90 * M_PI / 180) 或 sin(M_PI / 2)。
2. 向量 (6, 8) 的长度是多少?归一化之后是什么?
长度 。
归一化 = 每个分量除以 10,得到 。检验: ✓
3. 0.5 的 2.2 次方大概是多少?这个数字为什么重要?
约 0.218。
它是第 8 篇的核心:屏幕上"数值 0.5"的那个灰,实际发出的光只有最大亮度的约 21.8%,不是 50%。所有"混合结果偏暗"的问题都从这里开始。
4. $M^{-1}M$ 等于什么?
单位矩阵 。这就是逆矩阵的定义——先做 再做 ,等于什么都没做。
延伸阅读
- 3Blue1Brown《线性代数的本质》:https://www.bilibili.com/video/BV1ys411472E
- Khan Academy 三角函数基础:https://zh.khanacademy.org/math/trigonometry