前言
本文将讲解网页3D开发中,大量使用的向量方面的知识内容,比如点乘叉乘的意义和作用。
将主要会围绕着什么是向量,作用,运算规则,几何意义和数学推导等几个方面展开。
什么是向量
向量
是既有大小,又有方向的量,在物理和工程学中又称为矢量
。
与之对应的是标量
,标量只有大小,没有方向。如身高
、体重
、距离
等。
日常生活中常见的向量有位移
,速度
,加速度
、光线方向
等等。
向量在坐标系中通常用一根带箭头的线段来表示。
向量表示
向量一般用一个上方带一个箭头符号的字母表示, 如 代表一个名称为 a
的向量。在 2D 笛卡尔坐标系中,假设某向量起点为 O(0, 0),终点为 P(X, Y),那么通常使用 来表示这个 2 维向量,并且这个向量也可以用坐标的形式来表示: OP=(x−0,y−0)=(x,y)。
那么如果一个(x,y,z),它既可以表示向量,又可以表示一个坐标,那么我们该如何区分它呢?
这是一个非常重要的问题,通常使用齐次坐标系
来解决这种混乱。齐次坐标系使用 N + 1
维向量来表示 N 维点坐标
和 N 维向量
。假设在 3 维坐标系中,有一个点(X, Y, Z),那么在齐次坐标系中会使用 4 维向量来表示它 (X, Y, Z, W)。注意: W > 0
。如果是向量的话,齐次坐标将向量表示为(X, Y, Z, 0)
。
请谨记:W 为 0 时代表向量。W 不为 0 代表点。
- 齐次坐标系的引入除了解决这种概念混乱,还有一个重要的作用,透视除法
比较两个标量是否相等,只要比较他们大小是否相同即可。但是两个向量相等需要要满足以下两个条件:
- 大小相等
- 方向相同
向量的运算
假设有如下两个向量:
向量加减
- 维度相同的两个向量才可以相加或者相减,得到的新向量维度和原向量相同,新向量各个分量等于原向量各个分量之和或之差。
- 向量不能和标量相加。
- 向量减法不满足交换律。
- 向量加法满足交换律。
向量相加在坐标系中表示如下:
向量相减在坐标系中表示如下:
可见向量a-b和b-a的结果大小相同,方向相反,所以不满足交换律。
零向量
零向量是唯一一个大小为 0 的向量,对于其他任意大小不为 0 的向量,它们都存在无数个方向不同的向量,这些向量构成一个圆,零向量我们用的比较少。
负向量
负向量其实是原向量的反方向向量,大小不变,方向相反。求一个向量的负向量,只需将原向量的各个分量变成它们的相反数即可,并且负向量和原向量维度相同。
负向量可以理解为原向量与 -1 的乘法运算。
向量大小
向量的大小,也就是向量的长度(也叫向量的模),通常用 来表示,向量的大小等于向量各个分量平方之和的平方根。
向量与标量乘除
向量不能和标量相加减,但是向量可以和标量相乘除,向量和标量相乘或者相除返回一个新向量,新向量的各个分量等于原向量的各个分量和标量的乘积或者商。
向量与标量相乘的几何解释是:向量乘以标量 n 的意义是以因子|n|缩放向量的长度,例如:为了使向量的长度加倍,应使向量乘以 n 。如果 n < 0,则向量的方向与原向量相反。
单位向量
单位向量是长度为 1 的向量,对于大部分向量,我们只关心向量的方向,而不在意向量的长度,这种情况下就适合用单位向量来表示。比如光线入射方向、反射方向等向量,单位向量通常也被称为标准向量。
对于任意一个不为 0 的向量,我们都能将它转变成同方向的单位向量,这个转变过程我们称之为归一化向量
或者标准化向量
。
归一化向量只需要将原向量除以原向量的长度(模)即可,一定要注意,原向量不能是零向量。
归一化向量的过程:
点乘
标量和向量可以相乘,向量和向量也可以相乘,向量之间乘法包含两种点乘和叉乘。
向量点乘就是将两个向量的各个分量的乘积相加,返回一个标量
。
点乘的计算方式如下:
几何意义
点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影
我们经常会用点乘来计算两个向量之间的夹角大小,比如在光照模型中,我们在计算漫反射分量时,就使用了点乘公式,求出入射光和法向量之间夹角的大小,通常只求夹角的话,一般先将两个向量归一化,这样就不用再去计算向量模了,直接取点乘结果即可。
或者判断物体表面是否被光源照射,就是通过法向量和光源入射光线的点积来判断,为正表示光源在表面正面,能被照射到,为负表示光源在表面背面,不能被照到。
又比如在游戏中判断怪物在自己前面还是后面,也会用点积来判断,点积结果为正,表示怪物在自己前面。点积结果为负,表示怪物在自己后面。
推导过程
- 首先定义向量c = a -b
- 根据根据三角形余弦定理有:
3. 根据关系c=a-b(a、b、c均为向量)有:
- 然后等式进行化简得到:
- 向量a,b的长度都是可以计算的已知量,则知道余弦值,在根据反余弦arccos,可以得到a和b间的夹角θ:
- 根据这个公式就可以计算向量a和向量b之间的夹角。从而就可以进一步判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:
a·b>0 方向基本相同,夹角在0°到90°之间a·b=0 正交,相互垂直a·b<0 方向基本相反,夹角在90°到180°之间a·b>0 方向基本相同,夹角在0°到90°之间 a·b=0 正交,相互垂直 a·b<0 方向基本相反,夹角在90°到180°之间a·b>0 方向基本相同,夹角在0°到90°之间 a·b=0 正交,相互垂直 a·b<0 方向基本相反,夹角在90°到180°之间
叉乘
向量叉乘是另一个重要的运算,两个向量叉乘结果是一个新向量
,新向量的方向垂直于原来两个向量所在的平面,方向可以通过右手定则来判定。
假设有向量a,向量b
而这个叉乘结果的新向量的大小
等于两个向量模的乘积再乘以向量夹角的正弦值,即向量组成的平行四边形的面积。
如上图,利用右手定则,当右手的四指从向量 a 以不超过 180 度的转角转向 b 时,竖起的大拇指指向是叉乘结果向量的方向。
叉乘一般用于3D坐标系中。
几何意义
在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。在3D图像学中,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。
在二维空间中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。
推导过程
首先,得知道几个前置的数学规则或者定义:
-
给定直角坐标系的单位向量 i,j,k满足下列等式:
-
三阶行列式的计算方法如下,“对角线法则”,不过是复杂版的:主对角线乘完以后元素位置要平移一下继续相乘,直到x、y、z分别开过头以后,再分别减去x、y、z开头的副对角线乘积。
通过这些规则,两个向量的外积的坐标可以方便地计算出来,不需要考虑任何角度:设向量a,向量b:
a和b两个向量的叉乘,可以表示成一下行列式:
给定直角坐标系的单位向量,i,j,k,满足下列等式:
根据以上关系,代入公式得到:
结尾
以上就是本次向量相关基础内容的介绍,若有不准确之处还望指正。
对于点乘和叉乘更深入的数学概念没有讲到,如果有兴趣的伙伴可以自己找另外的资料来了解。
下次更新
- FPVM,坐标系变换理论的相关知识