GAMES103.王华民.02.Math Background
Math Background
- 数学预备知识介绍
- Vector, Matrix and Tensor Calculus
- 向量、矩阵、张量微积分
Vectors
Geometry Vector
- 矢量的定义(有几何含义)
- An (Euclidean) vector
- A geometric entity endowed with magnitude and direction
- 向量(矢量)
- 带有大小和方向的量
- 论文中区分标量和矢量
- 矢量:黑体 \(\mathbf{p}\)
- 标量:斜体 \(p\)
- 矩阵:大写 \(\mathbf{M}\)
坐标系
- 右手系、左手系
- 左手系的好处
- 屏幕空间中,物体一般是在屏幕后面,那么物体的 \(z\) 值都是正的
Stacked Vector
- 矢量的定义(没有几何含义)
- 可以只是由一堆数字组成,而不具备表示三维空间中的方向等几何含义
- 常用于物体的描述
- 例如用 11 个点表示一个闪电
矢量的运算
- 矢量 \(\pm\) 矢量
- 矢量的范数
- 2-范数:长度
- p-范数
- 1-范数:曼哈顿距离
- 无穷范数
- 单位矢量:unit vector
- 适量的单位化:normalization
- 点乘
- \(\mathbf{p}\cdot\mathbf{q}=0\):向量垂直、正交
\[ \mathbf{p}\cdot\mathbf{q}=\langle\mathbf{p},\mathbf{q}\rangle=\mathbf{p}^{\mathbf{T}}\mathbf{q} \]
- 叉乘
- 右手系:\(\mathbf{p},\mathbf{q},\mathbf{r}\)
- \(\Vert{r}\Vert=\Vert{p}\Vert\Vert{q}\Vert\sin\theta\)
- \(\mathbf{p}\times\mathbf{q}=0\):向量平行
\[ \mathbf{r}= \mathbf{p}\times\mathbf{q}= \begin{pmatrix} p_yq_z-p_zq_y\\ p_zq_x-p_xq_z\\ p_xq_y-p_yq_x\\ \end{pmatrix} \]
示例
(1) 表示基础量
- Linear Representation
- 矢量可以被用于描述如下的量
- 位置、速度、力、直线、光线、线段
- 匀速运动的粒子的位置
\[ \mathbf{p}(t)=\mathbf{p}+t\mathbf{v} \]
- 直线,两个点 \(\mathbf{p},\mathbf{q}\)
- 直线:\(t\in\mathbf{R}\)
- 线段:\(0<t<1\)
- 射线(光线):\(t>0\)
- 直线两种形式:运动形式、插值形式
\[ \mathbf{p}(t)=\mathbf{p}+t(\mathbf{q}-\mathbf{p}) \]
\[ \mathbf{p}(t)=(1-t)\mathbf{p}+t\mathbf{q} \]
(2) 点到直线的投影
- Paticle-Line Projection
\[ \begin{array}{c} s=(\mathbf{q}-\mathbf{o})^{\mathbf{T}}\dfrac{\mathbf{v}}{\Vert\mathbf{v}\Vert_2^2}=(\mathbf{q}-\mathbf{o})^{\mathbf{T}}\overline{\mathbf{v}}\\ \mathbf{s}=\mathbf{o}+s\overline{\mathbf{v}} \end{array} \]
(3) 平面的表示
- Plane Representation
\[ s=(\mathbf{p}-\mathbf{c})^{\mathbf{T}}\mathbf{n} \left\{ \begin{array}{rl} >0,&在平面上方\\ =0,&在平面内部\\ <0,&在平面下方\\ \end{array} \right. \]
- 有向距离 \(s\)
- 可以用于位置的判定
- 如何判断一个点在多面体内部?
- 在每个面的下方
(4) 粒子和球的碰撞
- Particle-Sphere Collision
- 判断如下式子是否有解
\[ \Vert\mathbf{p}(t)-\mathbf{c}\Vert=r^2 \]
- 展开
\[ (\mathbf{v}\cdot\mathbf{v})t^2+2(\mathbf{p}-\mathbf{c})\cdot\mathbf{v}t+(\mathbf{p}-\mathbf{c})\cdot(\mathbf{p}-\mathbf{c})r^2=0 \]
- \(t\ge0\) + 最近的点(最小的 \(t\))
(5) 三角形面积和法向
- Triangle Normal and Area
- 记号
\[ \begin{array}{c} \mathbf{x}_{10}=\mathbf{x}_{1}-\mathbf{x}_{0}\\ \mathbf{x}_{20}=\mathbf{x}_{2}-\mathbf{x}_{0}\\ \end{array} \]
- 法向(单位向量)
\[ \mathbf{n}=\dfrac{\mathbf{x}_{10}\times\mathbf{x}_{20}}{\Vert\mathbf{x}_{10}\times\mathbf{x}_{20}\Vert} \]
- 面积
\[ S=\dfrac{\Vert\mathbf{x}_{10}\times\mathbf{x}_{20}\Vert}{2} \]
- 定义三角形的时候,顶点顺序很重要
- 如何判定三点共线?
- 叉乘为 0
(6) 判定点是否在三角形内部
- Triangle Inside/Outside Test
- 或者直接 3 个叉乘符号值相同即可
- 使用上面的判定方式能够更快排除掉点不在内部的情况
(7) 重心坐标系
- Barycentric Coordinate
- 表示面积大小
- 有向面积大小
- 重心坐标系
- 使用重心坐标系对三角形内部的属性进行插值
- Gouraud Shading
- 早期硬件计算较弱的时候,使用这种方式减小 shading 的开销
- 计算插值比 shading 计算快
- 现在不流行了
- 早期硬件计算较弱的时候,使用这种方式减小 shading 的开销
- 双线性插值,利用扫描线算法进行插值
- Gouraud Shading
(8) 四面体体积计算
- Tetrahedral Volume
- 边向量
\[ \begin{array}{c} \mathbf{x}_{10}=\mathbf{x}_{1}-\mathbf{x}_{0}\\ \mathbf{x}_{20}=\mathbf{x}_{2}-\mathbf{x}_{0}\\ \mathbf{x}_{30}=\mathbf{x}_{3}-\mathbf{x}_{0}\\ \end{array} \]
- 体积
\[ \begin{aligned} V&=\dfrac{1}{3}Sh= \dfrac{1}{3} \left(\dfrac{1}{2}\Vert\mathbf{x}_{10}\times\mathbf{x}_{20}\Vert_2\right) \left(\mathbf{x}_{30}\cdot\mathbf{n}\right)\\ &=\dfrac{1}{3} \left(\dfrac{1}{2}\Vert\mathbf{x}_{10}\times\mathbf{x}_{20}\Vert_2\right) \left(\mathbf{x}_{30}\cdot\dfrac{\mathbf{x}_{10}\times\mathbf{x}_{20}}{\Vert\mathbf{x}_{10}\times\mathbf{x}_{20}\Vert_2}\right)\\ &=\dfrac{1}{6}\mathbf{x}_{30}\cdot(\mathbf{x}_{10}\times\mathbf{x}_{20}) \end{aligned} \]
- 行列式表示方式:\(4\times4\)
\[ V=\left|\begin{array}{cccc} \mathbf{x}_1&\mathbf{x}_2&\mathbf{x}_3&\mathbf{x}_0\\ 1&1&1&1\\ \end{array}\right| \]
- 体积是带正负的
(9) 重心坐标系
- Barycentric Weights
- 中间的点将四面体划分为 4 个部分,4 个部分的体积占比对应对面的顶点的权重
(10) 移动粒子和三角形求交
- 首先求得时间 \(\mathbf{p}\) 和平面相交的时间 \(t\)
\[ (\mathbf{p}(t)-\mathbf{x}_0)\cdot(\mathbf{x}_{10}\times\mathbf{x}_{20})=0 \]
\[ t=-\dfrac {(\mathbf{p}-\mathbf{x}_0)\cdot(\mathbf{x}_{10}\times\mathbf{x}_{20})} {\mathbf{v}\cdot(\mathbf{x}_{10}\times\mathbf{x}_{20})} \]
- 然后再判断 \(\mathbf{p}(t)\) 是否落在三角形内部
其他
- 某论文
- Vega: Nonlinear FEM Deformable Object Simulator