向量
- 向量是既有大小又有方向的量。
零向量与单位向量
- 模等于0的向量为零向量,模等于1的向量叫做单位向量。注意零向量的方向是任意的。
- 由一个向量v求与它同方向的单位向量过程称为标准化(normalization),这个单位向量为标准化向量(normalized vector)。
向量点积(dot product)
- 向量点积的结果是一个标量,其定义为:
A.B = |A||B|cosθ
向量叉积(cross product)
- 两个向量a和b的叉积,结果是一个向量c = a x b,c的方向垂直于a 和 b,它需要根据右手规则确定。c的大小等于
|c| = |a||b|sinθ
- 右手规则是指将向量a与b放在同一个起点时,当右手的四个手指从a所指方向转到b所指方向握拳时,大拇指的指向即为a x b的方向
-
在利用以坐标形式表示向量a和b时,在3D空间中,叉积的结果用矩阵表示为:
行向量和列向量
- 1 x n的矩阵称之为行向量,n x 1的矩阵称为列向量。
- OpenGL编程中习惯用列向量表示点或者向量。矩阵在内存中以列优先存储,但是具体传递参数时,一般函数提供了是否转置的布尔参数来调整存储格式。例如void glUniformMatrix4fv函数提供了布尔变量 GLboolean transpose 来表示是否转置矩阵。
零矩阵和n阶单位矩阵
- 一个矩阵,如果所有元素都为0,则为零矩阵。
- 对于一个n阶方阵,如果主对角线元素全为1,其余元素都为0则称为n阶单位矩阵。
- 对于一个矩阵A,存在单位矩阵E满足:EA=AE=A。
- 任意矩阵A与对应的零矩阵相乘得到零矩阵。
矩阵转置
-
转置操作即是将矩阵的行和列互换。
矩阵运算
- 两个矩阵A和B要能执行加减法,必须是行和列数目相等,计算过程,即对应的元素相加(Aij+Bij)或者相减(Aij−Bij)
- 用一个数k乘以矩阵A,结果为矩阵A中每个元素乘以数k。
- 两个矩阵Amxn和Bnxp要执行乘法操作,需要满足:左边矩阵的列数和右边矩阵的行数相等。
行列式
逆矩阵
- 对于n阶方阵A,如果存在一个n阶方阵B使得:AB = BA = E 成立,则称B是A的逆矩阵,矩阵A是可逆矩阵,或者说矩阵A是非奇异矩阵(Nonsingular matrix)。
- 只有n阶方阵才有逆矩阵的概念。n阶方阵A可逆的充要条件是A的行列式|A|≠0.
- 在3D图形处理中,用一个变换矩阵乘以向量,代表了对原始图形进行了某种变换,例如缩小,旋转等,逆矩阵表示这个操作的逆操作,也就是能够撤销这一操作。例如对一个向量v用矩阵M相乘,然后再用M−1相乘,则能得到原来的向量v: M−1(Mv)=(M−1M)v=Iv=v
- 当用矩阵A,B,C转换向量v时,如果v用行向量记法,则矩阵按转换顺序从左往右列出,表达为vABC;如果v采用列向量记法,则转换矩阵应该放在左边,并且转换从右往左发生,对应的转换记为CBAv。
正交矩阵
向量组的线性组合
- 向量组是一组向量的集合,例如α1,α2,⋯,αm表示一个由m个n×1的矩阵(n维列向量)组成的列向量组。对应的也有行向量组的概念。如果存在一组实数λ1,λ2,⋯,λm,使得向量β满足下式:
β=λ1α1+λ2α2+⋯+λmαm
则称向量β是α1,α2,⋯,αm的线性组合,或者说β由α1,α2,⋯,αm线性表示
向量组线性无关
- 对于向量组α1,α2,⋯,αm,如果存在不全为零的数λ1,λ2,⋯,λm,使下面的等式成立:
λ1α1+λ2α2+⋯+λmαm=0
则称向量组α1,α2,⋯,αm线性相关(linearly dependent), 否则称为线性无( linearly independent)。也就是要使向量组α1,α2,⋯,αm线性无关,那么所有的系数λi都必须为0。
线性空间的基
- 如果在线性空间V中存在n个线性无关的向量α1,α2,⋯,αn使得V中任意元素α都能由他们线性表示,则称α1,α2,⋯,αn为V的一个基。基所含向量个数n称为线性空间V的维数,并称V为n维线性空间。
线性变换
- 线性变换 T: U→V是一个函数,将定义域U中元素,映射到值域V中,并满足下列两个条件:
1)可加性 对任意u1,u2∈U,都满足: T(u1+u2)=T(u1)+T(u2)
2)齐次性 对任意u∈U和任意标量k,都满足: T(ku)=kT(u)
线性变换与矩阵一一对应
- 对一个线性变换T,存在一个矩阵A与之对应,变换表示为T(x)=Ax,其中x为列向量。
- 线性变换由基及变换后基的值唯一确定,通过计算线性变换后基的值可以得到线性变换对应的矩阵A。
- 可以通过计算 A=(T(u1),T(u2),⋯,T(un))来获取线性变换T对应的矩阵A。
仿射变换
线性变换无法表达一类重要的变换——平移变换。平移变换表达的是对于点p=(x,y,z)经过d=(αx,αy,αz)所表示的位移后得到点p′=(x′,y′,z′)的过程,表示为:
p′=p+d
我们尝试寻找变换T
满足:T(x) = Ax = p′ = | x+αx |
| y+αy |
| z+αz |
当d≠0时,上式中T(0)≠0,由式子1可知,这不是线性变换。因此需要引入仿射变换的概念。
齐次坐标(homogeneous coordinate)
4x4矩阵表示仿射变换
来自:
OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)
OpenGL学习脚印: 向量和矩阵要点(math-vector and matrices)