在Unity3D中,Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。
点积计算的结果为数值,而叉积计算的结果为向量。两者要注意区别开来。
在几何数学中:
1.点积
点积的计算方式为: a·b=|a|·|b|cos<a,b> 其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。另外在点积中,<a,b>和<b,a>
夹角是不分顺序的。
所以通过点积,我们其实是可以计算两个向量的夹角的。
另外通过点积的计算我们可以简单粗略的判断当前物体是否朝向另外一个物体: 只需要计算当前物体的transform.forward向量与 (otherObj.transform.position – transform.position)的点积即可, 大于0则面对,否则则背对着。当然这个计算也会有一点误差,但大致够用。
2.叉积
叉积的定义:c
=a x b 其中a,b,c均为向量。即两个向量的叉积得到的还是向量!
性质1:c⊥a,c⊥b,即向量c垂直与向量a,b所在的平面。
性质2:模长|c|=|a||b|sin<a,b>
性质3:满足右手法则。从这点我们有axb ≠ bxa,而axb = – bxa。所以我们可以使用叉积的正负值来判断向量a,b的相对位置,即向量b是处于向量a的顺时针方向还是逆时针方向。
根据上面的性质2,我们也同样的可以计算出两个向量的夹角。
下面是示例代码:
using UnityEngine; using System.Collections; public class MainScript : MonoBehaviour { //向量a private Vector3 a; //向量b private Vector3 b; void Start () { //向量的初始化 a = new Vector3 (1, 2, 1); b = new Vector3 (5, 6, 0); } void OnGUI () { //点积的返回值 float c = Vector3.Dot (a, b); //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看! float angle = Mathf.Acos (Vector3.Dot (a.normalized, b.normalized)) * Mathf.Rad2Deg; GUILayout.Label ("向量a,b的点积为:" + c); GUILayout.Label ("向量a,b的夹角为:" + angle); //叉积的返回值 Vector3 e = Vector3.Cross (a, b); Vector3 d = Vector3.Cross (b, a); //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看! angle = Mathf.Asin (Vector3.Distance (Vector3.zero, Vector3.Cross (a.normalized, b.normalized))) * Mathf.Rad2Deg; GUILayout.Label ("向量axb为:" + e); GUILayout.Label ("向量bxa为:" + d); GUILayout.Label ("向量a,b的夹角为:" + angle); } }上面的示例中,我们定义了两个向量a和b。分别求出了他们的点积和叉积,并通过点积和叉积来反过来计算他们的夹角。
本文章为个人原创,版权所有,转载请注明出处:http://blog.csdn.net/ml3947,另外我的个人博客:http://www.wjfxgame.com.
Unity3D之Vector3.Dot和Vector3.Cross的使用,布布扣,bubuko.com
Unity3D之Vector3.Dot和Vector3.Cross的使用
原文:http://blog.csdn.net/ml3947/article/details/27714311