计算机图形学是一门计算机的学科,同时也是一门数学的学科,涉及到大量的数学变换的知识。比如描述空间位置与位移,方向判断与几何计算,构建坐标系与空间变换等数学变换,这些都离不开一个基础的数学概念,那就是向量。那么什么是向量呢?下面我们将对向量及其基础运算进行介绍~
向量
向量是具有大小也有方向的数学量,它不依赖于具体的位置,只描述相对的位移或朝向。它的示意图如下所示
上图是一个二维向量的示意图,它表示的是平面上一点A指向B的向量,可以用有序数对表示
$\vec{a}$ = (x,y)
其中,x 是 x 轴方向上的投影分量, y 是 y 轴方向上的投影分量
注:$x = x_2 - x_1 ,y = y_2 - y_1$
除了二维向量之外还有三维向量,如图所示:
图上表示在一个三维空间中A点向B点的向量,可以用有序三元组表示:
$\vec{a}$ = (x,y,z)
其中, x 是 x 轴方向上的投影分量,y 是 y 轴方向上的投影分量, z 是 z 轴方向上的投影分量
注:$x = x_2 - x_1 ,y = y_2 - y_1, z = z_2 - z_1$
那么怎么计算向量的大小和确认它的方向呢?
向量的大小
向量的模
向量的大小,也称向量的模,即向量的长度,记为||a⃗\vec{a}a||
如果是二维向量,||a⃗\vec{a}a||的计算公式为:
||a⃗\vec{a}a|| =(x2−x1)2+(y2−y1)2\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}(x2−x1)2+(y2−y1)2
如图所示,向量 w 和向量 v 的大小相等,方向相同,所以它们是相等的向量
如果是三维向量,那么||a⃗\vec{a}a||的计算公式为:
∥a⃗∥=(x2−x1)2+(y2−y1)2+(z1−z2)2{\|\vec{a}\|=\sqrt{(x_2-x_1)^2 + (y_2 - y_1)^2 + (z_1 - z_2)^2}}∥a∥=(x2−x1)2+(y2−y1)2+(z1−z2)2
单位向量
单位向量就是模为1的向量,用于纯粹表示方向,是通过归一化得到
a^=a⃗∥a⃗∥(a⃗为非零向量)\hat{a} = \frac{\vec{a}}{\|\vec{a}\|} \quad (\vec{a}\text{为非零向量})a^=∥a∥a(a为非零向量)
向量的方向
上面说到,向量既有大小,也有方向,那么什么是向量的方向呢?有两种种表述方法:分别是借助单位向量法和用角度描述法
借助单位向量法
其通用表示方法是借助单位向量a^=a⃗∥a⃗∥\hat{a} = \frac{\vec{a}}{\|\vec{a}\|} \quada^=∥a∥a,单位向量的模为 1,其坐标就完全代表了原向量a⃗\vec{a}a的方向
为什么说$\hat{a}$就代表了向量的方向呢?
2D 向量 $\vec{a}$ =(3,4) ,模 $|\vec{a}|=5$ ,单位向量 $\hat{a}$ = (35,45\frac{3}{5},\frac{4}{5}53,54), 这个坐标就精准描述了 $\vec{a}$ 的方向
因为在常用的直角坐标系里,都有一组两两垂直的单位基向量,它们是描述所有方向的基本单位
比如 2D 向量 $\vec{a}$ =(x,y)可以写成:
$\vec{a}$ = x $\hat{i}$ + y $\hat{j}$
这里的 x 和 y,就是 $\vec{a}$ 在 x 轴和 y 轴上的投影分量,所以上面的 $\hat{a}$ = (35,45\frac{3}{5},\frac{4}{5}53,54)用投影分量表示:$\vec{a}$ = $\frac{3}{5}$ $\hat{i}$ + $\frac{4}{5}$ $\hat{j}$ ,意思是在x轴上的份量是 $\frac{3}{5}$ , 在y轴上的分量是 $\frac{4}{5}$
注:$\hat{i}$ 和 $\hat{j}$ 分别是
x轴和y轴的单位向量,大小都是 1 ,分享分别平行于x轴和y轴
以上是二维平面的单位向量法表示方向的方法, 三维空间的表示方法又是什么样的呢?原理是相通的~三维单位向量法表示方向法的结论如下:
$\vec{a}$ = x $\hat{i}$ + y $\hat{j}$ + z $\hat{k}$
这里的这里的 x 、y 、z ,就是 $\vec{a}$ 在x轴、y轴和z轴上的投影分量
角度描述法
因为在平面直角坐标系中,可通过向量与坐标轴的夹角来表示方向最常用的是与 x 轴正方向的夹角 $\theta$
若 2D 向量 $\vec{a}=(x,y)$,则 $\theta$ 满足:
cos$\theta$ = $\frac{x}{|\vec{a}|}$
sin$\theta$ = $\frac{y}{|\vec{a}|}$
也可直接用反正切函数计算:
tan$\theta$ = $\frac{sin\theta}{cos\theta}$ , 所以
tan$\theta$ = $\frac{y}{x}$, 得出
$\theta$ = arctan ( $\frac{y}{x}$ )
同时需根据 x、y 的正负判断 $\theta$ 所在象限,那么就可以得出向量的方向了
示例如下:
向量 $\vec{a}$ =(1,1), $||\vec{a}||$ = $\sqrt{2}$,
cos$\theta$ = $\frac{\sqrt{2}}{2}$
所以 $\theta$ = 45°
即方向为与 x 轴正方向夹角 45°
以上是二维平面直角坐标系的通过向量与坐标轴的夹角来表示向量方向的方法
三维空间场景:方向余弦法
3D 空间中向量的方向需要两个角度来确定,常用的是方向余弦
设三维向量$\vec{a}$ = (x,y,z)
与 x、y、z 轴正方向的夹角分别为α\alphaα,β\betaβ,γ\gammaγ, 这三个角的余弦值就叫方向余弦,公式如下:
cosα\alphaα= $\frac{x}{||\vec{a}||}$
cosβ\betaβ= $\frac{y}{||\vec{a}||}$
cosγ\gammaγ= $\frac{z}{||\vec{a}||}$
三个方向余弦满足关系:
cos2α+cos2β+cos2γ=1\cos^2\alpha + \cos^2\beta + \cos^2\gamma = 1cos2α+cos2β+cos2γ=1
向量的运算
通过上述讲解我们已经初步了解向量的大小和方向的基本知识,下面我们基于这些向量的特性进行向量的运算
向量的运算包括线性运算和乘法运算
线性运算
线性运算加法运算,减法运算和乘法运算
加法运算
加法运算满足三角形法则或平行四边形法则,坐标形式下对应分量相加
如:$\vec{a}$=(x1,y1) , $\vec{b}$=(x2,y2), 那么
$\vec{a}$ + $\vec{b}$ = (x1+x2,y1+y2)
减法运算
减法运算等价于加上相反的向量 ,即
$\vec{a}$ - $\vec{b}$ = $\vec{a}$ + (- $\vec{b}$) = (x1-x2,y1-y2)
数乘运算
数乘运算是一个实数 k 与向量 $\vec{a}$ 相乘
模长变为∣k∣· $|\vec{a}|$ ,当k大于0时,方向不变;当k小于0时,方向相反
$\vec{a}$ = (x,y), k · $\vec{a}$ = (k · x1,k · x2)
乘法运算
线性运算是相对直观的运算,乘法运算就不是那么线性了(简单);
乘法运算包括数量积、向量积、混合积
数量积
数量积运算也叫点积运算,其示意图如下所示:
$\vec{a}$ · $\vec{b}$ = $|\vec{a}|$ $|\vec{b}|$ $cos\theta$
运算结果是标量,可以可用于判断两个向量是否垂直,因为如果 $\vec{a}$ 与 $\vec{b}$ 的大小不为0,那么只有 $cos\theta$ = 0;那么 $\theta$ = 90° , 则 $\vec{a}$ ⊥ $\vec{b}$
$\vec{a}$ · $\vec{b}$ = 0 ,则 $\vec{a}$ ⊥ $\vec{b}$
向量积
向量积也叫叉积,仅适用于三维向量,表示为 $\vec{a}$ × $\vec{b}$ ,主要用来求 $\vec{a}$ 和 $\vec{b}$ 所确定的平面的法向量
$\vec{a}$ × $\vec{b}$ 的结果是向量,模长是 $|\vec{a}|$ $|\vec{b}|$ $sin\theta$
其方向垂直于 $\vec{a}$ 和 $\vec{b}$ 所确定的平面, 并且遵循右手定则
混合积
混合积就是点积和叉积相混合的运算,比如三维向量的( $\vec{a}$ × $\vec{b}$ )· $\vec{c}$ ,其几何意义是对应平行六面体的体积,这里我们只是稍作了解~
总结
本文主要简述了向量的基本知识,主要在向量的基本属性和向量的运算两方面展开,向量的基本属性包括向量的大小和方向;向量的运算则包括线性运算和乘法运算,线性运算主要是加法、减法和数乘运算,乘法运算则分为点积、叉积还有混合积,其中点积是用来判断向量是否垂直,叉积是来求法向量
以上就是本文的内容,非常感谢您能花出宝贵的时间观看,如果对您有帮助的话,欢迎点赞收藏~ 如果本文存在不足之处甚至错误的地方欢迎大家在评论区多多批评指出~我随后改正
参考来源:
- 《GAMES101: 现代计算机图形学入门(闫令琪)》
- learnOpenGL