Unity3D之Vector3.Dot和Vector3.Cross的使用

转载 2016年08月30日 09:29:13

在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,我们也同样的可以计算出两个向量的夹角。
  下面是示例代码:

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class MainScript : MonoBehaviour  
  5. {  
  6.         //向量a  
  7.         private Vector3 a;  
  8.         //向量b  
  9.         private Vector3 b;  
  10.           
  11.         void Start ()  
  12.         {  
  13.                 //向量的初始化  
  14.                 a = new Vector3 (1, 2, 1);  
  15.                 b = new Vector3 (5, 6, 0);  
  16.         }  
  17.           
  18.         void OnGUI ()  
  19.         {  
  20.                 //点积的返回值  
  21.                 float c = Vector3.Dot (a, b);  
  22.                 //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看!  
  23.                 float angle = Mathf.Acos (Vector3.Dot (a.normalized, b.normalized)) * Mathf.Rad2Deg;  
  24.                 GUILayout.Label ("向量a,b的点积为:" + c);  
  25.                 GUILayout.Label ("向量a,b的夹角为:" + angle);  
  26.   
  27.   
  28.                 //叉积的返回值  
  29.                 Vector3 e = Vector3.Cross (a, b);  
  30.                 Vector3 d = Vector3.Cross (b, a);  
  31.                 //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看!  
  32.                 angle = Mathf.Asin (Vector3.Distance (Vector3.zero, Vector3.Cross (a.normalized, b.normalized))) * Mathf.Rad2Deg;  
  33.                 GUILayout.Label ("向量axb为:" + e);  
  34.                 GUILayout.Label ("向量bxa为:" + d);  
  35.                 GUILayout.Label ("向量a,b的夹角为:" + angle);  
  36.         }  
  37. }  
  上面的示例中,我们定义了两个向量a和b。分别求出了他们的点积和叉积,并通过点积和叉积来反过来计算他们的夹角。
  这里要说明的是:
  1.a.normalized 和 b.normalized 表示的是两个向量的单位向量, 因为在公式里,有向量和模的除法,得出来的结果就是单位向量,所以我们这里和后面都直接用单位向量来计算,省去不少麻烦。

  2.Mathf.Rad2Deg表示的是 单位弧度的度数。详情请见本人文章: Unity3D之Mathf.Rad2Deg和Mathf.Deg2Rad
  3.通过叉积计算度数是通过公式|c|=|a||b|sin<a,b>来逆向求值。|c| 其实就是叉积的模,换句话说,也代表着Vector3.Distance (Vector3.zero, Vector3.Cross (a.normalized, b.normalized))的值。
  结果图如下:

  

  本文章为别人原创,版权所有,转载请注明出处:http://blog.csdn.net/ml3947,另外作者的个人博客:http://www.wjfxgame.com.


Unity3D之Vector3.Dot和Vector3.Cross的使用

在Unity3D中,Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。   点积计算的结果为数值,而叉积计算的结果为向量。两者要注意区别开来。   在几何...
  • ml3947
  • ml3947
  • 2014年05月30日 22:22
  • 10111

unity3D 之Vector3.Dot和Vector3.Cross的使用

在Unity3D中,Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。   点积计算的结果为数值,而叉积计算的结果为向量。两者要注意区别开来。  ...
  • qq617119142
  • qq617119142
  • 2014年11月25日 23:22
  • 704

Unity3D之Vector3.Dot和Vector3.Cross采用

在Unity3D中。Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。 点积计算的结果为数值,而叉积计算的结果为向量。两者要注意差别开来。在几何数学中:...
  • microsoftMSDNNET
  • microsoftMSDNNET
  • 2016年09月05日 17:03
  • 496

Vector3.Dot和Vector3.Cross的使用

在Unity3D中, Vector3.Dot 表示求两个向量的点积; Vector3.Cross 表示求两个向量的叉积。    点积计算的结果为数值,而叉积计算的结果为向量。   在几何数学中:  ...
  • qq_29639547
  • qq_29639547
  • 2017年05月10日 13:49
  • 53

Unity3D Vector3.Dot 点乘 与 Vector3.Cross 叉乘

一、点积(又称“数量积”、“内积”)     1、理论知识    在数学中,点积的定义为a·b=|a|·|b|cos 【注:粗体小写字母表示向量,表示向量a,b的夹角,取值范围为[0,π]】。从定...
  • song_hui_xiang
  • song_hui_xiang
  • 2015年07月01日 12:30
  • 9694

Unity3D之Vector3.Dot(点积)和Vector3.Cross(叉积)的使用

Unity3D之Vector3.Dot(点积)和Vector3.Cross(叉积)的使用 在Unity3D中, Vector3.Dot 表示求两个向量的点积; Vector3.C...
  • hundaxxx
  • hundaxxx
  • 2016年05月31日 19:59
  • 334

关于Unity3d中Vector3.Dot方法

在网络上关于Vector3.Dot的解释都不清除,其实Vector3.Dot方法很简单。 Vector3.Dot也叫点积,它返回1个-1.0~1.0之间的一个值。网上确实也这么说。但是这个值表示...
  • xinshou_jiaoming
  • xinshou_jiaoming
  • 2012年09月23日 17:35
  • 9777

Unity3D Vector3.Dot 点乘 与 Vector3.Cross 叉乘

一、点积(又称“数量积”、“内积”)     1、理论知识    在数学中,点积的定义为a·b=|a|·|b|cos 【注:粗体小写字母表示向量,表示向量a,b的夹角,取值范围为[0,π]...
  • ldy597321444
  • ldy597321444
  • 2016年01月11日 14:24
  • 589

Vector3.Dot 与Vector3.Cross

Vector3.Dot(点积) : 点积的计算方式为:  a·b=|a|·|b|cos; 其中和 夹角不分顺序; 物理学中点积用来计算力沿物体运动的方向所做的功:W=F*S=|F|*|S|*cosθ...
  • cxihu
  • cxihu
  • 2015年07月10日 17:32
  • 2242

unity3d Vector3.Dot Cross Angle 用法记录

今天为一个角度问题找了很多算法用法资料。结果发现网上几乎全来自一个源头。都是一样的。真的是文章一大抄!操! 找到一篇写得比较实用,正确的: 蓝色问题是我补充的用法 1.已知两个向量dir...
  • wdw5945
  • wdw5945
  • 2015年10月21日 23:10
  • 2748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D之Vector3.Dot和Vector3.Cross的使用
举报原因:
原因补充:

(最多只允许输入30个字)