音视频开发-向量理解
大学没有好好学习线性代数,无奈只能再次复习。
推荐一本书 《3D数学基础:图形与游戏开发》(https://pan.baidu.com/s/1YZ-xEuHwensh5IBa1DsPoA)
文章目录
向量
数学定义
对于数学家而言,向量就是一个数字列表,对于程序员而言则是另一种相似的概念-数组
向量与标量
数学上区分向量和标量,“速度”和“位移”是向量,而“速率”和“长度”是标量。
向量的维度
向量的维度就是向量包含的“数”的数目,有一维、二维、三维、四维向量。下列各图分别表示:
图4的表示缩放因子,在OpenGL图像渲染中
位置与位移
向量没有位置,只有大小和方向。
例如:
- 位移:“向前走三步”,这句话听上去是关于位置的,但其实句子中使用的量表示的是相对位移,而不是绝对位置。这个相对位移由大小(三步)和方向(向前)构成,所以它能用向量表示。
- 速度:“我们以50英里每小时的速度向北行驶”,这句话描述了一个量,它有大小(50英里每小时)和方向(北),但没有具体位置。“50英里每小时的速度向北”能用向量表示。
注意:位移、速度与距离、速率是完全不同的两种定义。位移和速度是向量,包含方向,而距离和速率是标量,不指明任何方向。
所以,记住:上图的向量,只有箭头的长度和方向是有意义的,不包括位置。
向量运算
负向量
向量变负,将得到一个和原向量大小相等,方向相反的向量
运算法则:
-[x,y] = [-x,-y]
-[x,y,z] = [-x,-y,-z]
-[x,y,z,w] = [-x,-y,-z,-w]
…
向量大小
运算法则
加法
向量a和向量b相加的几何解释为,平移向量,使得向量a的头指向向量b的尾,接着从a的尾向b的头画一个向量。这就是向量加法的“三角形法则”。
点乘
从上述公式中可以看出,点乘满足交换率。
点乘是得到的标量,并满足交换律,所以我们在OpenGL中需要矩阵效果叠加不能使用点乘。
几何解释
点乘等于向量大小与向量夹角的cos值的乘积
向量投影
根据上面取得的夹角,就可以根据点乘计算投影
向量的叉乘
叉乘得到的是垂直于原来的两个向量的一个向量,称之为法向量
图中,a,b在一个平面,指向该平面的正上方,垂直于a和b
通过把平行四边形一段切下来组成正方形计算
如果a、b平行或任意一个为0,则,所以,叉乘对零向量的定义是:它平行于任意其他向量。
已经证明垂直于a、b,但是垂直于a、b有两个方向,如何判断?通过将a的头和b的尾相连,并检查从a到b是顺时针还是逆时针,就能确定法线的方向。
在左手坐标系中,如果a和b呈顺时针,那么法向量指向您,如果a和b呈逆时针,那么法向量远离你。
在右手坐标系中,如果a和b呈逆时针,那么法向量指向你,如果a和b呈顺时针,那么法向量远离你。
叉乘的数学计算
叉乘的公式为:
标准化向量
向量的标准化过程,即将向量除以他的长度值
向量距离计算
现在有向量a和b,我们要计算两者之间的距离:
常用运算
已知向量V和向量N,求垂直于N的V1向量和平行于N的V2向量
然后V1可以方便求得
其实就是证明下题的过程