点乘的应用:
(1) 点乘可以用来判断两个向量是否垂直,返回值为0,则垂直。(公式:abcosθ,向量夹角θ为90度,则垂直)
(2)本质上其实是判断两个向量相似的程度(2个向量夹角越小,越相似)。
(3)计算敌人在你的正方向上行走的距离,利用的是计算一个向量在另一个向量上的投影分量大小(根据点乘几何意义)
(4)得到2个向量的夹角:范围[0, 180] ,可以做游戏怪物的视角是否有查看到玩家,可以用来计算敌人是否在角色的***范围之内
Vector A,B;
float dotValue = Vector3.Dot (A.normalized, B.normalized);
float angle = Mathf.Acos(dotValue) * Mathf.Rad2Deg;
当然,更简单的方法是float Vector3.Angle (Vector3 from, Vector3 to)
(5)判断目标在自己的前后方位
Vector3.Dot(transform.forward, target.position)
返回值为正时,目标在自己的前方;返回值为负时,在自己的后方;返回值为0时,在自己的正左方或者正右方。
(6)模拟飞机飞行的状态,当飞机与vector3.up的点积等于0,证明飞机平行飞行;当小于0时候,证明飞机向下飞行;当大于0时候,证明飞机向上飞行。
叉乘的应用:
(1)叉乘可以用来判断两个向量是否平行或相交。返回值为0,则平行。
(2)用于求平面法线(叉乘的几何意义:absinθ)
(3)计算两个物体之间形成四边形的面积(|a||b|sinθ)
(4)得到2个向量的夹角:范围[-90,90]
Vector A,B;
float value = Vector3.Cross (A.normalized, B.normalized);
float angle = Mathf.Asin(value) * Mathf.Rad2Deg;
(5)判断目标在自己的左右方位
Vector3.Cross(transform.forward, target.position).y
返回值为正时,目标在自己的右方;返回值为负时,在自己的左方;返回值为0时,在自己的正前方或者正后方。
(6)将炮管的正方向向量 与 敌人位置减去炮管位置的向量 进行叉积,得到一个向量,炮管绕此向量旋转,可以使炮管旋转至对准敌人,实现定位敌人的作用。