数学基础

一、向量的几何意义

1、向量的加法和减法

向量a和向量b相加的几何解释为:平移向量,使向量a的头连接向量b的尾,接着从a的尾向b的头画一个向量。这就是向量加法的“三角形法则”

798142-20161210161040694-1768063304.png
  • 计算一个点到另一个点的位移是一种非常普遍的需求,可以使用三角形法则和向量减法来解决这个问题,如: 上图 d - c 计算出 cd 的位移向量。

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在左侧");
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容