25.Unity中计算向量夹角

  1. 25.Unity中计算向量夹角
    1. 25.1 题目
    2. 25.2 深入解析
      1. 代码示例
        1. 方法1:使用 Vector3.Angle
        2. 方法2:使用点乘和反三角函数
    3. 25.3 答题示例
    4. 25.4 关键词联想

25.Unity中计算向量夹角


25.1 题目

Unity中如何计算出两个向量之间的夹角,请说出两种方式


25.2 深入解析

在Unity中,可以通过以下两种方式计算两个向量之间的夹角:

  1. 利用Vector3中的API:Vector3.Angle

  2. 先使用 Vector3.Dot 算出方向向量点乘结果,再通过 Mathf.Acos 反三角函数算出弧度,再将弧度转为角度。

代码示例

方法1:使用 Vector3.Angle

using UnityEngine;

public class AngleCalculation : MonoBehaviour
{
    void Start()
    {
        Vector3 vec1 = new Vector3(1, 0, 0);
        Vector3 vec2 = new Vector3(0, 1, 0);

        // 计算夹角
        float angle = Vector3.Angle(vec1, vec2);

        Debug.Log("夹角为:" + angle); // 输出: 夹角为:90
    }
}

方法2:使用点乘和反三角函数

using UnityEngine;

public class AngleCalculation : MonoBehaviour
{
    void Start()
    {
        Vector3 vec1 = new Vector3(1, 0, 0);
        Vector3 vec2 = new Vector3(0, 1, 0);

        // 计算点乘结果
        float dotProduct = Vector3.Dot(vec1.normalized, vec2.normalized);

        // 使用反三角函数计算弧度
        float radians = Mathf.Acos(dotProduct);

        // 弧度转为角度
        float angle = radians * Mathf.Rad2Deg;

        Debug.Log("夹角为:" + angle); // 输出: 夹角为:90
    }
}

这两种方法都可以准确地计算出两个向量之间的夹角。


25.3 答题示例

在Unity中计算两个向量的夹角,常用两种方式:

  1. 使用Unity内置API Vector3.Angle
    直接调用Vector3.Angle(vec1, vec2)即可返回两向量的夹角(角度值,范围0-180度)。该方法内部会自动对向量进行归一化处理,无需手动处理向量长度,适用于大多数场景。例如:
    vec1 = new Vector3(1,0,0)vec2 = new Vector3(0,1,0),调用后返回90度。

  2. 通过点乘公式结合反三角函数计算
    步骤如下:

    • 先将两向量归一化(vec1.Normalize()vec2.Normalize()),确保长度为1;
    • 计算点积:float dot = Vector3.Dot(vec1, vec2)
    • 利用点积公式dot = cosθ,通过Mathf.Acos(dot)得到弧度;
    • 转换为角度:float angle = radians * Mathf.Rad2Deg
      这种方法更底层,需手动处理归一化,否则结果会受向量长度影响,适合需要自定义计算逻辑的场景。

25.4 关键词联想

  • Vector3.Angle
  • Vector3.Dot(点积)
  • 向量归一化(Normalize)
  • 反余弦函数(Mathf.Acos)
  • 弧度转角度(Mathf.Rad2Deg)
  • 夹角范围(0-180度)
  • 点乘公式(dot = |a||b|cosθ)
  • 向量长度(Magnitude)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏