3D数学
数学公式:X平方加Y平方加Z平方开根号
向量的模长API:Vector3.Magnitude
模的平方API :Vector3.sqrtMagnitude;
向量的方向:Vector3.Normalize
明白向量相加或者相减的意义,并且能够画出来图形
相减(向量的方向会指向被减向量向量的起点是俩个向量的交点)
应用:求两个点之间的距离和方向
相加:构成平行四边形对角线就是这两个向量的和方向和这个一直
应用:物体的移动
向量和标量的乘除的作用就是把该向量进行延伸或者进行缩短
角度的度量方式:角度Degree与弧度radian
角度转化为弧度API:弧度=角度数*Mathf.Deg2Rad;
弧度转化为角度API:角度数=弧度数*Mathf.Rad2Deg;
点乘几何意义:a*b=|a|*|b|*cos<a,b>
点乘的API:float dot=Vector3.Dot(a.Normalize,b.Normalize);
作用:求两个向量之间的夹角,这两个向量都要做Normalize处理
应用:float dot=Vector3.Dot(a.Normalize,b.Normalize)//这里求出的是夹角的值然后利用反余弦进行求角度
float angle=Math.ACos(dot)*Mathf.Red2Deg;//值->弧度->角度
更简单的方法是float Vector3.Angle (Vector3 from, Vector3 to)
叉乘几何意义:结果为俩个向量所组成的平面的垂直向量,模长为两个向量的模长的乘积在夹角的正弦值
应用于:创建一个垂直于平面的向量,判断两条向量的相对位置(在第一象限内创建一个平行于Y轴的正半轴的向量,在第四象限中,创建一个与Y轴负半轴的向量)
欧拉角:(1)使用三个角度来保存方位
(2)X与Z轴沿着自身的坐标轴进行旋转Y沿着世界的坐标轴进行旋转
API:Vector3 enlurAngle=this.transform.enlerAngles;
致命的缺点:万向节死锁(物体沿着X轴旋转正负90度时,自身坐标系Z轴和世界坐标系的Y轴将会重合,此时在沿着Y轴或者Z轴进行旋转是会失去一个*度)
四元数:常用的API(qt代表一个四元数)
Vector3 euler=qt.eulerAngles();将四元数转化为欧拉角
Quatertion qt=Quaternion.Euler(0,30,0);将欧拉角转换为四元数(可以避免万向节死锁)
Quaternion.AngleAxis();适用于轴角模式的旋转
Quaternion.LookRotation(target.postion-this.transform.postion);注视旋转此时Z轴指向目标进行旋转,会返回一个向量
Quaternion.Lerp(transform.rotation,用LookRotation求出来的一个目标位置,速度);速度由快到慢安两点间的比例进行移动,无限接近目标但是不能够到达
Quaternion.RotateTowards();参数和Lerp一样,但是匀速进行旋转
Quaternion.FromToRotation(轴向,目标位置减去当前位置)
四元数的运算:(1)四元数左乘一个向量,表示该向量按照四元数表示的角度进行旋转
(2)四元数相乘可以进行组合添加效果
向量的API(Vector3)
Vector3.Angle();用于求两个向量之间的夹角,返回一个较小的角度,范围是0到180
Vector3.Cross();叉积用来求两个向量的夹角
Vector3.Dot();点积,用于创建一个垂直于平面的一个向量
Vector3.Distance();用于求两点之间的距离
Vector3.Lerp();差值比列进行旋转
Vector3.SmoothDamp(当前位置,目标位置,使用时要声明变量(ref),时间);速度由慢->快->慢
Vector3.project();投影,(求一个向量在另一个向量上的投影)
重点函数Vector3.LerpUnclamped(begin,target,curve.Evaluate(x)