Unity游戏开发中的向量运算-点乘和叉乘

1.点乘:

定义:

又称点积、数量积、标量积。既可以由向量坐标的代数运算得出,也可以通过引入两个向量的长度和角度等几何概念来求解。

公式一:

公式二:

点积满足交换律,即 ab = ba

通过点积公式可以看出,a,b都是标量,都是正数,余弦值结果只受角度变化的影响。所以,游戏开发中经常对向量a、b进行归一化,即当两个单位向量的长度都是1时,点乘的结果就是他们夹角的余弦值,最后可以反余弦求得向量的夹角 θ = arccos(ab),注意这里得到的是弧度值,需要再乘以Mathf.Rad2Deg才能得到最终的角度。这个结果也可以通过Vector3.Angle(a,b)直接得出。

由余弦函数曲线可以看出:当夹角小于90,余弦值大于0;当夹角大于90,余弦值小于0。

游戏中的应用:

1.判断敌人在我们前方或者后方?

我们以自己为原点,问题就可以转化为,计算我们的正前方(Vector3.forward)和原点指向敌人位置的向量的点积。当结果大于0时,说明敌人与我们正前方夹角小于90度,敌人在我们前面,当结果小于0时,说明敌人与我们正前方夹角大于90度,敌人在我们后面。

2.已知敌我位置,自己的视角θ范围,判断敌人是否在视角内?

同样以自己为原点,首先可以求得正前方向量和指向敌人位置的向量之间的夹角α,因为左右视角是平分的,我们只需要比较α和θ/2的大小就可以判断出结果了。由根据余弦值在(0,π)是单调递减的,所以可以通过直接比较cos值的大小来比较θ值的大小,不需要通过反余弦来计算真实角度值。即当cos(α) > cos(θ/2)时,敌人在我们视角内;当cos(α) < cos(θ/2)时,敌人在我们视角外。

2.叉乘:

定义:

向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。同样既可以由向量坐标的代数运算得出,也可以通过引入两个向量的长度和角度等几何概念来求解。

公式一:

公式二:

该结果为向量积的模长,其中0° < θ < 180°,方向在unity中由左手法则得出。

叉乘不满足交换律,满足反交换律,即 axb = -(bxa)

根据左手定则可以看出,叉乘结果大于0时,第二个向量在第一个向量右边,叉乘结果小于0时,第二个向量在第一个向量左边。

根据叉乘的定义,这两个只在XY平面的向量的叉乘,必然为一个只在Z轴(垂直于XY平面)上有值的向量,所以可以把2D向量的叉乘简化为一个只表示Z值的标量。

所以2D向量的叉乘可以定义为:

这个公式的几何意义就是如果以向量a和b为边构成一个平行四边形,那么a和b的叉乘的结果就是这个平行四边形的面积。

游戏中的应用:

判断最优转向敌人问题

以自己为原点,计算自己正前方和指向敌人的向量的叉乘,如果结果大于0,说明敌人在我们右手边,小于0则在我们左手边。

3.总结:

简单来说,在两个物体的位置关系判断中。

点乘可以判断出目标物体在我的前方还是后方。大于零在前方,小于零在后方。

叉乘可以判断出目标物体在我的左边还是右边。大于零在右方,小于零在左方。

参考文章:

向量运算在游戏开发中的应用和思考

Unity游戏开发——向量运算(点乘和叉乘)

Unity游戏开发中的向量运算-点乘和叉乘相关推荐

  1. PureMVC在Unity游戏开发中的应用

    作为开发人员,我们都想写出优雅的代码,可又苦于自身能力不知该如何下手,而框架的作用正在与能够让你规范的去开发. 之前写Web的时候,总被要求采用MVC架构,的确非常好用,也从来没有质疑过这种架构的好与 ...

  2. Unity游戏开发中ECS思想介绍

    ECS是啥? ECS是一种编程思想,和传统的面向对象有区别 有一篇文章说的挺好,大家可以看看,这里只简要概括一下! 浅谈<守望先锋>中的ECS架构 ECS: E(Entity)实体 C(C ...

  3. Unity游戏开发中的内存管理_资料

    http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMTUzOTczNQ==&hid=6&sn=44228b7260d7a5a3287a4499 ...

  4. Unity游戏开发之游戏存档方式

    目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...

  5. [C++基金会]位计算 游戏开发中的应用

    定义的位操作:通俗点说,,位计算是计算机操作二进制整数. 无论整数可以用二的方式来表示进度,不同类型的其长度的整数位的是不一样的.INT8要么char靠8个月2 位表示,INT16或者short是由1 ...

  6. Unity游戏开发——向量运算(点乘和叉乘)

    Unity游戏开发--向量运算(点乘和叉乘) 0.前言 在游戏开发中,确定目标得方向,朝向,夹角等相关数据需要用到向量的计算,其中最常用到的就时点乘和叉乘. 因为我们主要研究的是游戏开发中的3D世界向 ...

  7. [Unity游戏开发]向量在游戏开发中的应用(一)

    本文已同步发表在博客园:http://www.cnblogs.com/davidsheh/p/5246213.html ---------------------------------------- ...

  8. unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理

    前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...

  9. 喵的Unity游戏开发之路 - 推球:游戏中的物理

    很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...

最新文章

  1. Makefile条件推断 ——————————【Badboy】
  2. Fabric--configtxlator转换配置添加组织到channel
  3. 远程连接Linux,如何使程序断开连接后继续运行
  4. Tree-CNN:一招解决深度学习中的「灾难性遗忘」
  5. springcloud 返回json
  6. SQL 单一用户(解决)
  7. 使用代码设置Item级的权限(权限总结1)
  8. 编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)
  9. 响应式web之@media screen
  10. 第一个spring冲刺团队贡献分(80分满分)
  11. 华为抓取错误日志在哪里_分析Spider抓取情况和SEO优化
  12. 安全双标准或成拖垮企网防护的新威胁
  13. 微软并购雅虎案:世界商业三巨头的财智较量
  14. 考研数学一二三区别 什么专业考研不考数学
  15. java-----Map
  16. 香港大学和清华大学计算机,香港大学在我国属于什么水平,有哪些优势、能够和清华北大相比吗...
  17. 网上跳蚤市场网站系统HTML5+Vue+nodejs
  18. 鸡兔同笼问题----已知鸡和兔的总数量为n,总腿数为m,输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出 No answer。
  19. java编程软件教程_Java编程软件图文版教程,快来看看吧
  20. 在HTML中嵌入并播放FLV媒体文件

热门文章

  1. 你偷看的小簧片,其实全都被监视了…
  2. 原创干货 | 史上最全的大数据学习资源(Awesome Big Data)
  3. 读安晓辉老师的访谈有感
  4. 架构师小跟班:推荐46个非常经典的Linux面试题
  5. 京东数科:无偿驰援 多款智能产品服务防控第一线
  6. 单元库质量验证方法之compare library
  7. python房价数据分析统计服_Python 爬取分析全国 12 个城市 4 万条房价信息,告诉你该怎样买房?...
  8. android pay 教程,移动支付框架-AndroidPay
  9. 软件工程---个人账本---立项文档
  10. 蛮力法之百鸡百钱问题