Unity_数学_点乘和叉乘的应用

来源:互联网 发布:python 时间加减 编辑:程序博客网 时间:2024/05/01 02:35


1. 点乘

1.理论和推导

术语点乘来自A·B中的点号(点乘·  叉乘* )向量点乘对应分量乘机的和,它结果是一个标量它的公式 

A·B=Ax*Bx+AyBy+AzBz例如(3,1,-1)·(7,2,1)=3*7+1*2+(-1)*1=22

看下图就好。感受手写比打字方便多了呀!!!!

2.项目中的应用

点乘结果描述的是两个向量之间的相识度,点乘的结果越大向量约靠近,所以完全可以用点乘的结果来确定向量A

和向量B之间的夹角。 用VectorAPI得到cos值,然后用Mathf类算出角度

 查看API :Vector 点乘API

点乘的结果除了可以确认向量A和向量B之间的夹角大小之外,还可以用来求向量的投影。其原理就是把

向量分解成平行和垂直的其他两个向量。这个自行想象吧

2. 叉乘

1.理论

和点乘一样,叉乘的术语是因为A x B中的x这个符号,点乘得到的结果是一个标量,儿叉乘得到的结果是一个向量
又一次打字太难受了,还是写方便很多,你直接看图推导公式吧
这段推导的下面三行忽略吧。我想试着推导下点乘和叉乘的关系的。 我也是傻逼哦

2.项目中的应用

看了推导,你大概都能知道叉乘能做什么了把,AB叉乘的结果会向量C垂直向量AB, 然后你通过判断C的正负值来判断他们处于方向



白色的向量就是点乘的结果。 查看向量C 的y值 朝上的时候是(0,85.4,0) 向量C朝下的时候 Vector值 (0,-90.54,0)



代码如下

using UnityEngine;using System.Collections;public class CrossTest : MonoBehaviour {    public Transform a;    public Transform b;    public Vector3 _c = Vector3.zero;    void Start()    {           }     void Update()    {        Debug.DrawLine(Vector3.zero, a.position, Color.blue);        Debug.DrawLine(Vector3.zero, b.position,Color.red);        Debug.DrawLine(Vector3.zero, _c,Color.white);    }            void OnGUI()    {        _c = Vector3.Cross(a.position, b.position);                //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看!        float angle = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(a.position.normalized, b.position.normalized))) * Mathf.Rad2Deg;        GUILayout.Label("向量a,b的夹角为:" + angle);    }}

总结一句话:点乘可以判断向量之间的夹角,叉乘可以判断向量之间的方向在顺时针还是逆时针方向


0 0