一、向量的几何意义
1、向量的加法和减法
向量a和向量b相加的几何解释为:平移向量,使向量a的头连接向量b的尾,接着从a的尾向b的头画一个向量。这就是向量加法的“三角形法则”
- 计算一个点到另一个点的位移是一种非常普遍的需求,可以使用三角形法则和向量减法来解决这个问题,如: 上图 d - c 计算出 c 到 d 的位移向量。
2、向量点乘
当两个向量都为单位向量时,余弦的定义就表示为第一个向量在第二个向量上面的投影长度
几何解释:一般来说,点乘结果描述了两个向量的“相似”程度,点乘结果越大,两个向量越相近.
计算角度:
点乘结果>0,即小于90°,面向
点乘结果<0,即大于90°,背向
点乘结果=0,即两向量互相垂直
点乘结果 = 1,即方向相同,平行
点乘结果 = -1,即方向相反,反向平行
应用场景:检测目标是否背向自己(背向是方向夹角在90-180之间)
点乘判断角度
点乘计算的角度跟Vector.Angle结果一致,都是0-180度,用哪个都可以。
public Transform trans00;
public Transform trans01;
void Update()
{
float cosAngle = Vector3.Dot(trans00.forward.normalized, trans01.forward.normalized);
float angleDot = Mathf.Acos(cosAngle) * Mathf.Rad2Deg;
float angleVector = Vector3.Angle(trans00.forward, trans01.forward);
print(angleDot);
print(angleVector);
}
3、向量叉乘
得到的结果垂直于输入的两个向量,参数顺序决定方向的正反
叉乘判断物体在自己左边还是右边(顺时针/逆时针)
public Transform trans00;
public Transform trans01;
void Update()
{
Vector3 result = Vector3.Cross(trans00.position, trans01.position);
print(result);
if (result.y == 0)
{
print("trans01在trans00前方的这条线上");
}
else if (result.y > 0)
{
print("trans01在右侧");
}
else if (result.y < 0)
{
print("trans01在左侧");
}
}