- 介绍向量的概念,向量由指向和长度组成,与位置无关
- 引入坐标系统,向量可以用坐标来表示
- 引入frame概念,在不同的frame,同样的向量有不同的坐标。3D计算机图形学就是处理不同frame中的向量坐标转换
- zero-vector 是特殊的向量
- 向量的长度通过坐标计算,表示为
$||u||$ - 向量的方向可以通过将向量标准化(normalize)长度来表示
点乘也称为点积, 是将两个向量作为输入的函数, 返回结果是一个标量. 它的结果是欧几里得空间的标准内积, 两个向量的点积写作
- 向量点乘运算(与向量间的夹角有关), 几何学上的应用是在两个互相垂直的方向上对向量进行分解, 其中一个方向是参与点乘运算的向量指向的方向.
- 向量的点乘满足分配率,
$a \cdot b=||a||,||b||\cos\theta$ . - 点乘在几何上可以用来计算两个向量之间的夹角(此时两个向量都是单位向量), 以及计算向量在某一方向上的标量投影, 这在3D中很有用处. $$ \cos\theta = \dfrac{a \cdot b}{|a||b|} $$ 向量 a 在向量 b 上的标量投影是指: $$ a_{b} = |a|\cos\theta $$ (比如:3D技术中的光栅化(光栅化的任务是为了绘制每个三角形单元, 如何计算构成三角形单元的每个像素的颜色值)过程中, 我们可以根据两个面的法向量的点乘判断两个面是否处于同一面, 如果不是, 那么只要光栅化其中需要显示出来的一面, 不用光栅化另一面(因为我们根本看不到被遮住的面), 这样就节省了很多很多计算, 能加快效率.)
- 如果一组向量是两两正交的, 那么我们称之为 标准正交集(orthonormal).
- 标准正交集在运算中会丢失精度(因为涉及浮点计算), 介绍了如何校正 正交集合.
$u=(u_x, ;u_y, ;u_z)$ $v=(v_x, ;v_y, ;v_z)$ $u \cdot v=u_xv_x+u_yv_y+u_zv_z$
存在向量 v 和单位向量 n, 应用点乘求 v 在 n 方向上的分量 p
因为
$u=(u_x, ;u_y, ;u_z)$ $v=(v_x, ;v_y, ;v_z)$ $u \times v=(u_yv_z-u_zv_y, ;u_zv_x-u_xv_z, ;u_xv_y-u_yv_x)$
- 向量的叉乘运算,几何学上的意义是获取一个新的向量, 该向量垂直于两个乘数组成的平面
- 向量的叉乘不满足乘法交换律
$u \times v \neq v \times u$ - 在3维几何中,叉乘的结果也是一个向量,这个向量就是大名鼎鼎的"法向量"
- 介绍三向量正交集如何用乘法校正
- 我们用起点在原点的向量代表三维空间中的一点,称为位置向量(position vector)
- SSE2 (Streaming SIMD Extensions 2) 指令集
3D计算机图形学中,我们使用各种矩阵来描述几何转换和在不同的frame中转换坐标 矩阵可以被视为向量的集合
- 介绍矩阵的相等,相加,标量乘法和减法
- 相加的矩阵必须是行和列相同的矩阵
$\begin{pmatrix} A_{11}&A_{12}&A_{13}\ A_{21}&A_{22}&A_{23} \ A_{31}&A_{32}&A_{33} \end{pmatrix} =\begin{pmatrix} \leftarrow A_{1,}\rightarrow \ \leftarrow A_{2,}\rightarrow \ \leftarrow A_{3,*}\rightarrow \end{pmatrix}$
$A_{1,} = [A_{11},; A_{12},; A_{13}]$
$A_{2,} = [A_{21},; A_{22},; A_{23}]$
$\begin{pmatrix} A_{11}&A_{12}&A_{13}\ A_{21}&A_{22}&A_{23} \ A_{31}&A_{32}&A_{33} \end{pmatrix} =\begin{pmatrix} \uparrow&\uparrow&\uparrow\ A_{,1}&A_{,2}&A_{*,3} \ \downarrow&\downarrow&\downarrow \end{pmatrix}$
$A_{,1} = \begin{pmatrix}A_{11} \ A_{21} \ A_{31}\end{pmatrix}$ $A_{,2} = \begin{pmatrix}A_{12} \ A_{22} \ A_{32}\end{pmatrix}$ $A_{*,3} = \begin{pmatrix}A_{13} \ A_{23} \ A_{33}\end{pmatrix}$
- 两个矩阵 A,B 相乘的前提条件是A的列数与B的行数相同
- 矩阵乘法不满足交换律
$AB \neq BA$
A 为
向量 u 为
$uA = [x,y,z] \begin{pmatrix} A_{11}&A_{12}&A_{13} \ A_{21}&A_{22}&A_{23} \ A_{31}&A_{32}&A_{33} \end{pmatrix} = [x,y,z] \begin{pmatrix} \uparrow&\uparrow&\uparrow\ A_{,1}&A_{,2}&A_{,3} \ \downarrow&\downarrow&\downarrow \end{pmatrix}$ $\quad;,,= [u \cdot A_{,1},\quad u \cdot A_{,2},\quad u \cdot A_{,3}]$ $\quad;,,=xA_{1,} + yA_{2,} + zA_{3,*}$
结论 $\quad uA = xA_{1,} + yA_{2,}+ zA_{3,}$ 向量与矩阵的叉乘可以转化为标量与矩阵行向量的乘法 u为标量系数,$A_{1,}$ 为矩阵 A 的列向量, uA被称为两者的线性组合
矩阵乘法满足结合律 (AB)C = A(BC)
将
单位矩阵行与列相等,且从左上角到右下角对角线上的元素都为1 如果M是方形矩阵,那么M与单位矩阵I的乘法满足交换律,换句话说, 单位矩阵在矩阵乘法中类似于自然数乘法中的1: MI = IM = M 存在单位矩阵I与矩阵A,B,如果 AI 能够相乘 或 IB能够相乘,存在等式: AI = A IB = B
克莱姆法则(Cramer's Rule)
行列式(Determinant)是数学中的一个函数,定义是将
把一个方阵A中的第i行、第j列去掉后,剩余的元素组成的 n-1 阶方阵的行列式值,就是 Minor。
Minor的记号是:
矩阵的行列式是递归定义的,例如,4 × 4 矩阵的行列式定义依赖于 3 × 3 矩阵,3 × 3 矩阵的行列式定义依赖于 2 × 2 矩阵, 2 × 2 矩阵的行列式定义依赖于 1 × 1 矩阵, 1 × 1 矩阵也就是矩阵中的一个元素 对于任意阶行列式,都可以改写为第一行所有元素与对应 n-1 阶余子式的积,以此不断递推,直到分为某项与二阶行列式的积,然后再自此回溯最终可得解
伴随矩阵就是先计算出余子式的行列式,排列成矩阵,再对矩阵进行转置
这里注意余子式的行列式开头乘(-1)的次数,即正负性
矩阵 A 的伴随矩阵记为
矩阵代数并没有定义除法,但是定义了乘法逆运算,下面列出了关于逆运算的一些重要信息:
1.只有方阵才是可逆的,本书中只要提到矩阵逆运算,我们假定我们处理的是方阵
2.n × n 矩阵 M 的逆矩阵记为
矩阵逆运算可用于矩阵等式求解。例如,我们有一个等式 p' = pM,p' 和 M 是已知的,求解 p。假设矩阵 M 是可逆的, 我们可以用下面的解法:
等式两边都乘以 M 的逆矩阵
计算逆矩阵的公式
我们用几何学在计算机世界中表达真实世界中的物体,换句话说,是用一堆三角形来近似的描绘物体的表面。如果所有的物体都是静止的,那么这个世界将是无趣的。所以我们对几何转换方法非常有兴趣,所谓的几何转换包括转换(translation), 旋转和缩放。在本章中,我们开发了一些用于转换3D空间中点和向量的矩阵等式。
对于向量 u, v, 标量 k
如果下面两个等式成立, 那么我们把
公式推导, a, b, v 为标量, u, v, w 为向量:
线性变换从几何上直观的来看有三个要点: 1.变换前是直线的,变换后依然是直线 2.直线比例保持不变 3.变换前是原点的,变换后依然是原点
待变换向量 u 的定义如下:
该公式的意义是三维空间中的任意向量都可以由三个向量的线性组合来表示,这里的单位向量 i, j, k 被称为 标准基向量(standard basis vector)
标准基向量表示一组长度为 1 的基. 标准正交基表示一组长度为 1 且两两正交的基.
下面引入线性变换函数
可以得到
$\tau(u) =x\tau(i) + y\tau(j) + z\tau(k)=[x,y,z] \begin{pmatrix} \leftarrow \tau(i)\rightarrow \ \leftarrow \tau(j)\rightarrow \ \leftarrow \tau(k)\rightarrow \end{pmatrix}=[x,y,z] \begin{pmatrix} A_{11}&A_{12}&A_{13} \ A_{21}&A_{22}&A_{23} \ A_{31}&A_{32}&A_{33} \end{pmatrix}=\begin{pmatrix}xA_{11}+yA_{21}+zA_{31} \ xA_{12}+yA_{22}+zA_{32} \ xA_{13}+yA_{23}+zA_{33} \end{pmatrix}=\begin{pmatrix}xA_{11} \ xA_{12} \ xA_{13} \end{pmatrix}+\begin{pmatrix}yA_{21} \ yA_{22} \ yA_{23} \end{pmatrix}+\begin{pmatrix}zA_{31} \ zA_{32} \ zA_{33} \end{pmatrix}$
其中
此时由行向量
缩放操作的数学定义
缩放交换律推导(下面的 u, v 都是向量):
$S(u+v)=\begin{pmatrix} s_x(u_x+v_x),&s_y(u_y+v_y),&s_z(u_z+v_z) \end{pmatrix}$
$\quad\quad\quad\quad=\begin{pmatrix} s_xu_x+s_xv_x,&s_yu_y+s_yv_y,&s_zu_z+s_zv_z \end{pmatrix}$
$\quad\quad\quad\quad=\begin{pmatrix} s_xu_x,&s_yu_y,&s_zu_z \end{pmatrix} + \begin{pmatrix} s_xv_x,&s_yv_y,&s_zv_z \end{pmatrix}$
对于标量 k,则有
$S(ku)=\begin{pmatrix} s_xku_x,&s_yku_y,&s_zku_z \end{pmatrix}$
$\quad\quad;;;=k\begin{pmatrix} s_xu_x,&s_yu_y,&s_zu_z \end{pmatrix}$
由上可知, S 也是线性的,并且存在矩阵表达:
$S(i)=\begin{pmatrix} s_x \cdot 1,&s_y \cdot 0,&s_z \cdot 0 \end{pmatrix}=\begin{pmatrix} s_x,0,0 \end{pmatrix}$
$S(j)=\begin{pmatrix} s_x \cdot 0,&s_y \cdot 1,&s_z \cdot 0 \end{pmatrix}=\begin{pmatrix} 0,s_y,0 \end{pmatrix}$
$S(k)=\begin{pmatrix} s_x \cdot 0,&s_y \cdot 0,&s_z \cdot 1 \end{pmatrix}=\begin{pmatrix} 0,0,s_z \end{pmatrix}$
缩放操作的矩阵表达如下,又名缩放矩阵:
$\begin{pmatrix} s_x&0&0 \ 0&s_y&0 \ 0&0&s_z \end{pmatrix}$
缩放矩阵对应的逆矩阵为:
$\begin{pmatrix} 1/sx&0&0 \ 0&1/s_y&0 \ 0&0&1/s_z \end{pmatrix}$
- 旋转公式
$R_n(v)$ 的推导
场景: 向量 v 绕 n 轴旋转了 θ 角度, 假设
将向量 v 分解为两个子向量, 其中一个与 n 轴平行, 记为
-
$R_n(v \bot)$ 的推导
$R_n(v \bot)=\cos\theta , v\bot + \sin\theta(n \times v)$
- 总结
使
$R_x=\begin{pmatrix} 1&0&0&0 \0&\cos\theta&\sin\theta&0\ 0&-\sin\theta&\cos\theta&0\ 0&0&0&1 \end{pmatrix}$
$R_y=\begin{pmatrix} \cos\theta&0&-\sin\theta&0 \0&1&0&0 \\sin\theta&0&\cos\theta&0\ 0&0&0&1 \end{pmatrix}$
$R_z=\begin{pmatrix} \cos\theta&\sin\theta&0&0 \-\sin\theta&\cos\theta&0&0 \0&0&1&0\ 0&0&0&1 \end{pmatrix}$
指在几何中,一个向量空间进行一次线性变换, 然后进行平移,变换为另一个向量空间. 平移对矢量没有意义, 因为矢量只描述方向和幅度, 与位置无关, 换句话说, 矢量应该在平移后保持不变. 平移应仅应用于点. 齐次坐标提供了一种方便的符号机制, 使我们能够统一处理点和向量. 对于齐次坐标, 我们将增加到 4 元组, 第四个坐标中的值取决于我们是在描述点还是向量.
(x, y, z, 0) for vectors (x, y, z, 1) for points
仿射变换从几何直观只有两个要点: 1.变换前是直线的,变换后依然是直线. 2.直线比例保持不变.
在数学里,齐次坐标(homogeneous coordinates)就是将一个原本是 n 维的向量用一个 n+1 维向量来表示,是指一个用于投影几何里的坐标系统, 又被称为投影坐标(projective coordinates).
$\begin{pmatrix}- B \left(k_{x}^{2} + k_{y}^{2}\right) + C - D \left(k_{x}^{2} + k_{y}^{2}\right) + M & A \left(k_{x} + i k_{y}\right) & 0 & 0\A \left(k_{x} - i k_{y}\right) & B \left(k_{x}^{2} + k_{y}^{2}\right) + C - D \left(k_{x}^{2} + k_{y}^{2}\right) - M & 0 & 0\0 & 0 & - B \left(k_{x}^{2} + k_{y}^{2}\right) + C - D \left(k_{x}^{2} + k_{y}^{2}\right) + M & A \left(- k_{x} + i k_{y}\right)\0 & 0 & - A \left(k_{x} + i k_{y}\right) & B \left(k_{x}^{2} + k_{y}^{2}\right) + C - D \left(k_{x}^{2} + k_{y}^{2}\right) - M\end{pmatrix}$
gaojun 00301069