Unity 点乘&叉乘 应用实例

一 前言 1.可以解决的问题

    I.如何计算角度

    II.如何判断前后

    III.如何判断逆时针还是顺时针。

    IV.如何判断其他物体在目标物体左右。

    V.如何计算平行四边形面积

2.概述

    主要概述了点乘,叉乘的实用例子,没有讲述什么原理性的,偏向应用层。点乘叉乘数学原理性的东西比较“难记”,网上很多。实用举例,网上算是比较少吧。故,来总结一番。

二 理论知识 1.点乘性质

        a · b = |a|*|b| cosθ   

        a ·b = b·a

        结果是float类型

2.叉乘性质

         aXb = c,c⊥a,c⊥b。

         |aXb| = |a| |b| sinθ,

       a X b = -b X a

       叉乘的结果还是向量,且其模就是那两个向量为边的平行四边形面积

3.性质总结

      根据点乘,叉乘的公式得知,用到cos函数和sin函数,所以理解cos函数和sin函数很重要。

复习一下,我推荐使用根据函数图像理解。

  点乘,cos函数

      

Unity 点乘&叉乘 应用实例

  叉乘,sin函数

      

Unity 点乘&叉乘 应用实例

三.分析&理解

     当然,这边计算角度,直接可以用Vector.Angle(p1,p2) 就可以解决,但是返回角度范围为(0,180)。

  我们根据上述点乘叉乘,可以得出,点乘,叉乘都可以算出角度。

1.点乘 计算角度

           首先我们根据公式   a · b = |a|*|b| cosθ,θ∈(0,180)  

      I.在知道a,b均为单位向量的情况,则 cosθ = Mathf.Dot(a,b)

        这里的θ角度跟Vector.Angle的返回的结果是一致的(0,180),则cosθ最终返回的也只是 (-1,1)之间.

      II.继续得出 θ =arcCos(Mathf.Dot(a,b)) ---------注意这个θ是弧度值,弧度制就类似π/2, 90度。

      III.我们的目的是得出角度,则 angle = θ * Mathf.Rad2Deg     ----------注意:Mathf.Rad2Deg即为 180/π,与之相乘则弧度转角度;  注意区分Mathf.Deg2Rad 为π/180,角度转弧度,Deg即Degree,角度的意思。      

    float cosAngle = Vector3.Dot(p1.normalized, p2.normalized); float angleDot = Mathf.Acos(cosAngle)*Mathf.Rad2Deg; float angleVector = Vector3.Angle(p1, p2); Debug.Log("angleDot:" + angleDot); Debug.Log("angleVector:" + angleVector);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyzpy.html