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

unity3d Vector3.Dot Cross Angle 用法记录 今天为一个角度问题找了很多算法用法资料。结果发现网上几乎全来自一个源头。都是一样的。真的是文章一大抄!操! 找到一篇写得比较实用,正确的: 蓝色问题是我补充的用法 1.已知两个向量dirA,dirB。 Vector3 dirA = new Vector3(-1,1,0); Vector3 dirB = new Vector3(-1,1,1); 2.使向量处于同一个平面,这里 阅读详情

  在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。分别求出了他们的点积和叉积,并通过点积和叉积来反过来计算他们的夹角。
  这里要说明的是:
  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.


Unity之 Vector3 的详细介绍以及方法的介绍 你真的懂得unity 中的Vector3 的方法吗?Please fellow me 阅读详情

相关推荐

Vector3.Dot()与Vector3.Cross()判断敌人相对于角色的方位——Unity的API学习篇

概念理解:          向量的:               向量的又称为数量或内,计算方式:两向量的模与其夹角的余弦值相乘,例如ab两个向量,a·b...

weixin_45373419的博客 3710

Unity Vector3.Dot(VectorA, VectorB)

Unity Vector3.Dot(VectorA, VectorB) Vector3.Dot(VectorA, VectorB) 等于 VectorA * VectorB。 而对于两个向量的乘计算如下:

Wilhelm的博客 6264

【unity进阶篇】向量的Vector3.DotVector3.Cross、判断物体方位范围

【unity进阶篇】向量的Vector3.DotVector3.Cross

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1026

Unity3DVector3.Dot()Vector3.Cross()的使用

Unity3DVector3.Dot()Vector3.Cross()的使用Unity3D中, Vector3.Dot 表示求两个向量的Vector3.Cross 表示求两个向量的。    计算的结果为数值,而计算的结果为向量。两者要注意区别开来。    在几何数学中:    1.    的计算方式为:  a·b=|

hundaxxx的博客 941

Unity3DVector3.DotVector3.Cross采用

Unity3D中。Vector3.Dot表示求两个向量的;Vector3.Cross表示求两个向量的计算的结果为数值,而计算的结果为向量。两者要注意差别开来。在几何数学中:1. 的计算方式为: a·b=|a|·|b|cos< a,b > 当中|a||b|表示向量的模,< a ,b >表示两个向量的夹角。另外在中。< a,b >< b,a > 夹角是不

microsoftMSDNNET的博客 1226

Vector3.Cross

上期介绍了Vector.Dot可以用来判断敌人处于自身的前方or后方,那么这期就是通过乘来判断敌人处于自身的左方or右方。可以看到,敌人位于自身右边时(x轴正方向)根据右手定则,乘的结果方向向上。根据这个特性,我们可以根据乘结果的正负来判断敌人位于自身的左边or右边。将球移动至自身右边时。

qq_29172391的博客 950

vector3.cross

得到得结果永远是垂直于ab所在得平面得,这个一般可以用于判断人物是要左转还是右转,通过结果得正负值进行判断。比如,假设a是Unity中得x轴,b是untiy中得y轴,那么就会有两种情况 一种a在b得左边,另一种是a在b得右边,那么得出得结果就会不同。 ...

LCHUIHUI的博客 6179

Vector3.Dot用法

Vector3.Dot也叫,它返回1个-1.0~1.0之间的一个值。网上确实也这么说。但是这个值表示什么呢?恩,表示返回进行Dot计算的两个向量之间的夹角的余弦值(Cos弧度角).要注意的是能进行Dot计算的前提是两个向量首先要变成单位向量! public class DotTest : MonoBehaviour {   public Vector3 v1; public V

Simon 1万+

Vector3.Dot

a.transform.position这两个向量,当cube(2)在自身(cube)的前方时,其夹角永远小于90°,在后方时,永远大于90°,如此可依据乘来判断“敌人”相对于自身的位置(前方or后方)这里我将两个向量传入,第一个为cube本身的正方向,第二个为cube指向cube(2)的方向,由于向量乘等于其各自模长相乘再乘上二者之间的余弦值,所以Vector3.Dot返回值的正负取决于其夹角。如图:cube在cube(2)的前方、

qq_29172391的博客 747

【Unity中的数学】—— 向量(乘)

向量

惊鸿醉的博客 2349

threejs向量Vector3.dot()

dot()

u014291990的博客 1430

Unity乘的基本使用

[csharp] view plain copy //求角度 及前后左右方位 public void checkTargetDirForMe(Transform target) { //xuqiTest: target.position = new Vector3(3, 0, 5); Vector3 dir = target.position - transform.position; //位置差,方向 //方式1 乘 //的计算方式为:.

LearnToStick的博客 1904
上一篇: Java 8即将正式发布
下一篇: Unity3D之MeleeWeaponTrail武器轨迹插件的使用
ml3947
博客等级 码龄18年 492粉丝 100原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值