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的使用 在unity3D中,Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。 ...

Unity3D之Vector3.Dot和Vector3.Cross采用

在Unity3D中。Vector3.Dot表示求两个向量的点积;Vector3.Cross表示求两个向量的叉积。 点积计算的结果为数值,而叉积计算的结果为向量。两者要注意差别开来。在几何数学中:...

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

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

【Unity3D】浅谈Vector3的点积与叉积

原文地址:http://unity3d.9tech.cn/news/2013/1127/38923.html 一、点积(又称“数量积”、“内积”)     1、理论知识    在数学中,点积的定...

Unity3d-向量Vector3

向量表示的是方向和大小,与位置距离无关 三维空间的表示如下 在unity3d中采用的struct来描述的Vector3 namespace UnityEngine { public st...
  • cabxyz
  • cabxyz
  • 2015年02月25日 19:08
  • 1010

Unity3D浅谈Vector3的点积与叉积

一、点积(又称“数量积”、“内积”)  1、理论知识 在数学中,点积的定义为a·b=|a|·|b|cosa,b> 【注:粗体小写字母表示向量,a,b>表示向量a,b的夹角,取值范围为[0,π]】。...

unity3d问题集 对Vector3.Lerp 插值的理解 - 转自蛮牛

有时,我们在做游戏时会发现有些跟随动作不够圆滑或者需要一个缓冲的效果,这时,一般会考虑到插值。所以对插值的理解是必需的。(比如摄像机跟随主角) 插值是数学上的一个概念,在这里用公式表示就是:from...
  • XYK0318
  • XYK0318
  • 2016年04月25日 09:21
  • 3957

<Unity3D>浅谈Vector3的点积与叉积

一、点积(又称“数量积”、“内积”)  1、理论知识 在数学中,点积的定义为a·b=|a|·|b|cosa,b> 【注:粗体小写字母表示向量,a,b>表示向量a,b的夹角,取值范围为[0,π]...

Unity3d vector3.forward和transform.forward的区别!

在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样。他们之间的区别主要体现在在不同坐标系时的反映上。 ...

Unity3D学习之(transform和Vector3向量)

欢迎大家光临我的博客!   欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3D之Vector3.Dot和Vector3.Cross的使用
举报原因:
原因补充:

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