Unity--向量点乘叉乘在Unity中的使用

记录一下。

向量的点乘在Unity中使用Vector.Dot(v1,v2)方法进行运算,运算的过程其实是v1在v2的投影长度乘v2的长度(反之亦然)。得到一个标量结果,如果Vector.Dot(v1,v2)中的v1和v2均为单位向量,得到的则是v1和v2夹角的余弦值,用下面的代码来解释:

        Vector2 V1 = new Vector2(0, 2);
        Vector2 V2 = new Vector2(2,2);
        float result1 = Vector3.Dot(V1, V2);//直接计算得到的点乘值
        float result2 = Vector3.Project(V1, V2).magnitude * V2.magnitude;//通过原理运算得到的值,只有正值,只做原理解释,不做使用
        float result3 = Vector3.Dot(V1.normalized, V2.normalized);//参数单位向量化得到的值
        Debug.Log(string.Format("result1:{0}", result1));
        Debug.Log(string.Format("result2:{0}", result2));
        Debug.Log(string.Format("result3:{0}", result3));
        float angel = Mathf.Acos(result3) * Mathf.Rad2Deg;//使用反余弦获取角度的弧度,在转化成角度
        Debug.Log(string.Format("Angle:{0}",angel));

 

运行看看结果:

当然我们获取角度可以直接使用Vector.Angle(v1,v2),这里只做原理解释。还需要注意的是:通过Vector.Dot()运算的结果是有正负的,可以通过正负判断两个向量的方向关系,在项目中可以判断是在视野前方还是在视野后方。比如V1表示我们视野的正前方,此时V2在我们视野前方,把V2值换成(-2,-2)看结果:

结果显而易见。

----------------------------------------------------------------------------------------------------------------------------------------------------

下面看看叉乘:

在Unity里面叉乘使用Vector.Cross(V1,V2)表示,满足Unity的左手坐标系。得到的结果是一个垂直于V1,V2组成的平面的向量,那么这个向量肯定是垂直于V1和V2的。同时Vector.Cross(V1,V2)结果不同于Vector(V2,V1),Vector(V2,V1)相当于Vector(-V1,V2),结果相反

通过下面的代码和结果可以清楚看到:

 private void Start()
    {
        Vector3 right = Vector3.right.normalized;
        Vector3 left = Vector3.left.normalized;
        Vector3 up = Vector3.up.normalized;
        Vector3 down = Vector3.down.normalized;

        Vector3 result = Vector3.Cross(right, up);
        Vector3 result2 = Vector3.Cross(right, down);
        Vector3 result3 = Vector3.Cross(left, up);
        Vector3 result4 = Vector3.Cross(left, down);
        Debug.Log(string.Format("Vector3.Cross(right, up):{0}", result));
        Debug.Log(string.Format("Vector3.Cross(right, down):{0}", result2));
        Debug.Log(string.Format("Vector3.Cross(left, up):{0}", result3));
        Debug.Log(string.Format("Vector3.Cross(left, down):{0}", result4));
}

结果:

上面是X轴和Y轴组成的一个平面。那么得到的向量就是Z轴,可以看到得到的结果有正负关系,那其实就是向量V2是处于向量V1的左边方向还是右边方向,左边得到正值,右边得到负值。 可以根据正负做判断。

欢迎加群:4364930讨论。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 点乘Dot Product)、叉乘(Cross Product)和投影(Projection)是常用的向量运算。下面我会分别解释它们的含义和用法。 1. 点乘Dot Product):点乘是两个向量之间的一种运算,结果是一个标量(Scalar)。它可以用来计算两个向量之间的夹角余弦值,还可以判断两个向量是否正交(垂直)或平行。在 Unity ,可以使用 Vector3.Dot 方法来计算两个三维向量点乘结果。 示例代码: ```csharp Vector3 a = new Vector3(1, 2, 3); Vector3 b = new Vector3(4, 5, 6); float dotProduct = Vector3.Dot(a, b); ``` 2. 叉乘(Cross Product):叉乘是两个向量之间的一种运算,结果是一个新的向量。它的方向垂直于原始两个向量,并符合右手法则。在 Unity ,可以使用 Vector3.Cross 方法来计算两个三维向量叉乘结果。 示例代码: ```csharp Vector3 a = new Vector3(1, 2, 3); Vector3 b = new Vector3(4, 5, 6); Vector3 crossProduct = Vector3.Cross(a, b); ``` 3. 投影(Projection):投影是将一个向量沿着另一个向量的方向进行投影的过程。投影后的结果是一个新的向量,与原始向量垂直。在 Unity ,可以使用 Vector3.Project 方法来计算一个三维向量在另一个三维向量上的投影结果。 示例代码: ```csharp Vector3 a = new Vector3(1, 2, 3); Vector3 b = new Vector3(4, 0, 0); Vector3 projectedVector = Vector3.Project(a, b); ``` 以上是在 Unity 使用点乘叉乘和投影的基本示例。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值