向量的长度
向量的长度就是向量的大小或者向量的模
向量长度的大小就是向量个分量平方和的平方根,就是根据三角形法则计算对角线,通过勾股定理获得长度
Unity中使用Vector3.magnitude来获取一个向量的长度
例如向量a(3,4,0),a向量的模就是3^2+4^2+0^2然后在开根号,值为5,所以a的长度就是5.
向量与标量的乘除运算
在unity中向量使用和/进行乘除运算,向量与标量进行运算的时候是将向量的每个值与标量进行运算,比如3(1,2,3) = (3,6,9)
单位向量(标准化向量)
单位向量就是大小为一的向量例如Vector3.forward等长度为一的向量
将一个向量转化为单位向量的过程叫做向量的归一化
归一化就是获得向量的长度然后用向量除以这个向量的长度,本质就是向量和标量的运算
在Unity中可以使用Vector3.Normalize()方法来使一个向量归一化,可以使用Vector3.Normalized属性来获取归一化的单位向量,使用方法会将这个向量变成归一化向量,原有向量不存在.使用属性相当于个一个向量赋值,将原有向量归一化的值赋给新的向量,对原有向量不做修改
向量和向量之间的加减运算
当两个向量维度相同时,两个向量可以进行加减运算
两个向量加减的时候就是向量的个个分量进行相加减即可
向量加法符合交换律,谁在前谁在后无所谓,但是减法不符合交换律 a-b = -(b-a),交换之后方向相反,向量加减法符合三角形法则
向量的点乘(点积)
向量乘法的两种形式 使用 • 的向量相乘就是点乘
计算时,就是对应分量乘积的和,结果是一个标量,例如 a(2,3) • b(3,4) = 2*3+3*4
点乘满足交换律
点乘的第二种计算方式是通过两个向量的夹角的cos值计算的 a•b= |a||b|cos∮
点乘的结果越大,两个向量越是接近,通常用来求两个向量之间的夹角的大小
一般我们除了通过点乘计算角度,还可以通过点乘判断位置关系. 如果值大于0,夹角在0-90度直接(不包含90),如果等于0 ,夹角在90度,两个向量垂直,小于0,夹角大于90小于180,两个向量方向相反
向量点积的运用
点积可以用来求得一个向量在另一个向量上面的投影
向量b在a上面的投影长度表示为 a•b/|a|,这个投影的向量为 (a•b/a•a)a
unity使用点乘 Vector3.Dot()获取点乘,使用Vector3.Angle()获取夹角大小
根据点积的正负,我们可以判断两个点的前后关系
向量的叉乘(叉积)
叉乘是两个向量相乘的第二种方式 使用 * 表示叉乘,也被叫做向量的外积
差乘的结果依然是一个向量,而且叉乘只能运用于3d向量
叉乘公式 : a*b=(1,2,3)(-2,-3,4) = ( 2*4-3(-3) , 3*(-2)-1*4 , 1*(-3)-2*(-2) )=(17,-10,1)
核心思想是交叉相乘,求x位置的时候去掉ab中的x位置,将y和z的值交叉相乘取差值,同样的方法取y和z的值,注意符号,叉乘的符合是(+,-,+),y轴比较特殊,是负值
向量叉乘的应用
叉乘得到的是垂直于原来两个向量的向量,也就是这两个向量构成平面的法向量
叉乘的向量长度等于两个原向量模的长度乘以两个向量夹角的sin值,也是以这两个向量长度为边所构成的平行四边形的面积
可以通过叉积得到的向量方向判断a是在b的顺时针方向还是逆时针方向,通过这个向量的y值正负判断a是在b的左边还是右边,为正在右,为负在左
在Unity种使用Vector.Cross计算点乘