Unity3D Vector3.Dot 点乘 与 Vector3.Cross 叉乘
2017-07-26 20:59
309 查看
一、点积(又称“数量积”、“内积”)
1、理论知识
向量的点积,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。在数学中,点积的定义为a·b=|a|·|b|cos<a,b> 【注:粗体小写字母表示向量,<a,b>表示向量a,b的夹角,取值范围为[0,π]】。从定义上,我们知道向量的点积得到的是一个数值。而不是向量(这点大家要注意了!要与叉积进行区别)。另外点积中的夹角<a,b>没有顺序可言,即<a,b>=<b,a>(或a·b=b·a)。所以我们可以通过点积得到两个向量之间的夹角。<a,b>=arccos(a·b / (|a|·|b|))。并且通过点积的正负值,我们可以判断两个向量的方向关系。如果为正,即>0,他们夹角为(0,π/2)。如果为负,夹角为(π/2,π)。
a·b>0 方向基本相同,夹角在0°到90°之间
a·b=0 正交,相互垂直
a·b<0 方向基本相反,夹角在90°到180°之间
2、Unity3D中应用
在Unity中,点积表示为Vector3.Dot(Vector3,Vector3):float——参数为2个向量,返回值为浮点型。using UnityEngine; using System.Collections; public class Vector3_Dot : MonoBehaviour { //向量a Vector3 a; //向量b Vector3 b; void Start() { //向量的初始化 a = new Vector3(3, 0, 0);//x轴方向,长度为3 b = new Vector3(Mathf.Sqrt(2), Mathf.Sqrt(2), 0);//(根号2,根号2,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); } }
a.normalized表示该方向的单位向量,即方向与向量a相同,长度为1的向量。Mathf.Acos()即数学中的arccos()函数。Mathf.Rad2Deg表示将弧度转化为角度。
结果如下图:
二、叉积(又称“向量积”、“外积”)
1、理论知识
数学上的定义:c=axb【注:粗体小写字母表示向量】其中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、Unity中应用
在Unity中,叉积表示为Vector3.Cross(Vector3,Vector3):Vector3——参数为2个向量,返回值也为向量。using UnityEngine; using System.Collections; public class Vector3_Cross : MonoBehaviour { //向量a Vector3 a; //向量b Vector3 b; void Start() { //向量的初始化 a = new Vector3(3, 0, 0);//x轴方向,长度为3 b = new Vector3(0, 4, 0);//y轴方向,长度为4 } void OnGUI() { //叉积的返回值 Vector3 c = Vector3.Cross(a, b); Vector3 d = Vector3.Cross(b, a); 9f9c //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看! float angle = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(a.normalized, b.normalized))) * Mathf.Rad2Deg; GUILayout.Label("向量axb为:" + c); GUILayout.Label("向量bxa为:" + d); GUILayout.Label("向量a,b的夹角为:" + angle); } }
Vector3.Distance()用于计算2个Vector3的距离,在这里我们可以得到叉积向量的模长。
结果如下图:
相关文章推荐
- 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的使用
- unity3D 之Vector3.Dot和Vector3.Cross的使用
- Unity3D之Vector3.Dot和Vector3.Cross的使用
- Unity3D之Vector3.Dot和Vector3.Cross的使用
- Unity3D之Vector3.Dot和Vector3.Cross的使用
- Unity3D 中 点乘和叉乘的应用
- unity3D里面的点乘和叉乘
- 关于Unity3d中Vector3.Dot方法
- unity3D里面的点乘和叉乘
- Unity3D之Vector3.Dot和Vector3.Cross的使用
- 向量的点乘和叉乘
- unity 用点乘和叉乘来判断 物体与人物的相对位置
- Unity3d vector3.forward和transform.forward的区别!
- 三维向量的标准化,两点距离,点乘,叉乘
- 点积与向量积(点乘与叉乘)