一、向量(Vectors)
向量表示示意图:
- 有序实数组,用以表示在不同坐标轴上的投影长度
- 有行和列两种表达方式,在图形学中常以列表达
- 代表了一个有方向的长度
- 基本运算:
- 加法(满足结合律和交换律)
- 标量乘以向量(满足结合律和分配率)
- 点乘(内积,结果为标量,几何意义是 [公式] ,满足分配率和交换律,可用于判断两向量夹角,求向量长度,计算投影等)
- 叉乘(外积,结果为向量,垂直于原向量构建的平面,长度为 [公式] ,交换叉乘中两向量的位置,会得到长度相同但方向相反的向量)
- 向量归一化:p的归一化向量q与p方向相同,长度为1,可通过点乘算出
(一)向量归一化
向量长度表示:(||vec a||)
单位向量:
- 长度 = 1
- 计算公式:
- 可用于代表方向
(二)向量相加
向量相加示意图:
- 几何:遵守平行法则、三角法则
- 代数上:坐标相加
(三)笛卡尔积
向量相加示意图:
X和Y可以是任何(通常是正交的单位)向量,
(A = {x choose y }) (A^T = left(x,y ight )) (||A|| = sqrt{x_2+y_2})
(四)向量相乘
1. 点乘
向量点乘示意图:
(vec a cdot vec b = left| vec a
ight| left| vec b
ight| cos heta) (cos heta = frac{vec a cdot vec b}{left| vec a
ight| left| vec b
ight|})
对于单位向量:(cos heta = hat a cdot hat b)
(1)点乘性质
(vec a cdot vec b = vec b cdot vec a)
(vec a cdot left( vec b + vec c
ight) = vec a cdot vec b + vec a cdot vec c)
(left( k vec a
ight) cdot vec b = vec a cdot left( k vec b
ight) = k left( vec a cdot vec b
ight))
(2)在笛卡尔坐标系中做点积
组合相乘,然后相加。
- 二维坐标系
- 三维坐标系
(3)投影点积
示意图:
- (vec b_ot):(vec b)在(vec a)上的投影
- (vec b_ot)必须属于(vec a)(或者属于(hat a))
- (vec b_ot = k vec a)
- 求k的值
- (k = left| vec b_ot ight| cos heta)
- (vec b_ot)必须属于(vec a)(或者属于(hat a))
(4)图形学中的点乘
- 求两个向量的夹角,(例如:光源与表面夹角的余弦值)
- 求一个向量在另一个向量上的投影
应用
测量两个向量的方向
1)在一个圆中
例如,图中(vec a cdot vec b >0)属于前向(forward),(vec a cdot vec c <0)属于后向(backward)
2)两个向量之间
(四)向量叉乘(Cross product)
向量叉乘示意图:
- 叉乘正交于两个原始向量
- 方向遵循右手法则,(一般默认是右手法则,即:(vec x imes vec y = + vec z),但是OpenGL默认是左手法则,即:(vec x imes vec y = - vec z))
- 可用于构建坐标系
1. 叉乘性质
2. 叉乘:笛卡尔法则
3. 图形学中的叉乘
-
决定方向:左 or 右
两个向量进行叉乘,比如:(vec a imes vec b >0),所以,(vec a)在(vec b)的顺时针方向(也为:右边);(vec b imes vec a <0),所以,(vec b)在(vec a)的逆时针方向(也为:左边),如果(vec b imes vec a = 0),那么(vec a)则与(vec b)共线。后期如果更为细致,还可以用在游戏中判断两个物体的具体方位,比如以自身正对的方向,判断敌人是在自己的左上、左下、右上、右下等位置 -
判断内部 or 外部
如上图,若(P)点在三角形内部,则从同一个端点出发的边(eg:(vec{AB}))与到(P)点的向量(eg:(vec{AP})),按此顺序判断(即边向量顺序连接),则P点只会在三条边的同一个方向;若在外部,P点相对于三个边的位置将不一致。
注:即使A、B、C调换顺序,按照首尾连接,效果一致。此方法可应用在光线追踪中。
- 建立坐标系
叉乘后的另一个向量必定与原来两个向量垂直。
(五)标准正交基和坐标系(Orthonormal bases and coordinate frames)
1. 用途
- 对于表示点、位置、位置非常重要
- 通常有很多坐标系
- 全球、本地、世界、模型、模型部分(头,手,…)
- 关键问题是在这正交基和坐标系之间进行转换(见Lecture03笔记)
2. 直角坐标系
定义一个三维直角坐标系((u,v,w)):
(left| vec u
ight| = left| vec v
ight| = left| vec w
ight| = 1)
(vec u cdot vec v = vec v cdot vec w = vec u cdot vec w = 0)
(vec w = vec u imes vec v) (右手法则)
(vec p = left( vec p cdot vec u
ight) + left( vec p cdot v
ight) vec v + left( vec p cdot vec w
ight) vec w)(projection)
二、矩阵(Matrix)
在图形学中,广泛用于变换、旋转、剪切、缩放等(详见Lecture03笔记)
- 矩阵&标量值相乘/相加:每个元素相乘/相加。
- 矩阵&矩阵相乘:(left(M imes N ight) left( N imes P ight)),要求前一个的列数 = 后一个矩阵的行数。
矩阵&向量 相乘
- 把向量当做一个列矩阵(left( m imes ight))
- 关于y轴的2D反射
1. 矩阵转置
-矩阵转置的性质
2.单位矩阵和逆变换
(I_{3 imes 3} = egin{pmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 end{pmatrix})
(AA^{-1} = A^{-1}A = I)
(left( AB ight)^{-1} = B^{-1}A^{-1})
3. 矩阵形式中的向量相乘
- 点乘:
- 叉乘: