在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.

版权声明:本文博主原创文章,博客,未经同意不得转载。

Unity3D之Vector3.Dot和Vector3.Cross采用的更多相关文章

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

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

  2. Vector3.Dot 与Vector3.Cross

    Vector3.Dot(点积) : 点积的计算方式为:  a·b=|a|·|b|cos<a,b>; 其中<a,b>和<b,a> 夹角不分顺序; 物理学中点积用来计算 ...

  3. Vector3.Dot 判断方位

    判断方位 假设空间中有这几个坐标,判断一个物体在另一个物体的左边还是右边,前后还是后面 物体空间图 假如以C为中心,判断L是在它的左边还是右边 判断方法 using UnityEngine; usin ...

  4. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  5. [C++][代码库]Vector3空间向量类

    本文用C++实现一个简单的Vector3类的功能,暂时有的功能是: 1 + - * /算术运算 2 向量的数量积,又叫:点乘 3 向量的向量积,又叫:叉乘 4 向量单位化(normalization) ...

  6. C++实现一个Vector3空间向量类(转)

    转自:http://www.2cto.com/kf/201311/260139.html ector2,3,4类在DirectX中都有现成的可以调用,不过要实现其中的功能其实也不难,也都是一些简单的数 ...

  7. The DOT Language

    CSDN新首页上线啦,邀请你来立即体验! 立即体验 博客 学院 下载 更多 登录注册 The DOT Language 翻译 2014年04月15日 11:27:07 标签: EBNF / 语言 / ...

  8. Unity中动态绘制圆柱体

    问题背景 上次写了动态绘制立方体,这最近又来了新功能,绘制圆柱(风筒),要求是给了很多节点,根据节点去动态绘制风筒,风筒就是圆柱连接而成的,可以理解为管道,还有就是拐角处注意倒角,圆润过度过来. 实现 ...

  9. HTC Vive开发笔记之手柄震动

    手柄震动的代码SteamVR_Controller脚本的最上面的注释里面就有说明,其实也很简单 // Example usage: //这个栗子是左手柄震动 右手震动只需把Leftmost换成Righ ...

随机推荐

  1. Delphi主窗口任务栏菜单的问题(转发WM_SYSCOMMAND到Application)

    Delphi的VCL框架在创建应用时TApplication是一个自动创建的隐藏窗口,其它创建的窗口是自动以该窗口为窗口,这就导致创始的主窗口在任务栏的系统菜单只有三项,只要在主窗口的Create事件 ...

  2. Spring4 MVC 多文件上传(图片并展示)

    开始需要在pom.xml加入几个jar,分别是 <dependency> <groupId>commons-fileupload</groupId> <art ...

  3. find . -iname "*.jpg"|xargs -i mv {} .;for i in `ls`; do mv -f $i `echo $i | sed 's/JPG/jpg/'`; done

    find . -iname "*.jpg"|xargs -i mv {} .;for i in `ls`; do mv -f $i `echo $i | sed 's/JPG/jp ...

  4. Mybatis在oracle、mysql、db2、sql server的like模糊查询

    <!-- oracle --> <select id="searchUserBySearchName" parameterType="java.lang ...

  5. ThinkPHP 3.2 开发过程

    原文:ThinkPHP 3.2 开发过程 设置所有项目的公共配置Application\Common\Conf\config.php,SAE模式下配置文件为config_sae.php 配置默认的模块 ...

  6. 15个最好的HTML5前端响应式框架(2014)

    文中的多个框架基于SASS创建,SCSS是一种比LESS更简洁的样式表编程语言,它能够编绎成CSS,可复用CSS代码,声明变量,甚至是函数,类Ruby/Python的语法.參见: LESS vs SA ...

  7. XML实例文档

    from: http://www.w3school.com.cn/xpath/xpath_examples.asp XML实例文档 我们将在下面的例子中使用这个 XML 文档: "books ...

  8. 使用notepad运行python

    Notepad++ 是一个开源的文本编辑器,功能强大而且使用方便,一般情况下,Notepad++作为代码查看器,很方便,但是每次要运行的时候,总是需要用右键打开其他的IDE来编译和运行,总有些不方便. ...

  9. mixpanel实验教程(2)

    六.发送邮件和推送通知 选择该用户前面的 checkbox,点击 Send A Notification button,从下拉列表中选择 Email Message/Push Notifiaction ...

  10. 基于 Apache Mahout 构建社会化推荐引擎

    基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...