物体的碰撞检测是游戏软件中的关键算法之一,两个角色是否能够对话、子弹是否击中了物体,以及是否出现人物穿墙的 bug,都依赖于一套可靠的碰撞检测算法。有很多算法可以实现碰撞检测,基于算法几何的方法有轴对称包围盒算法(Axis-aligned Bounding Box,AABB)、方向包围盒算法(Oriented Bounding Box,OBB)、分离轴算法(Separating Axis Theorem,SAT)、GJK 算法(Gilbert–Johnson–Keerthi Distance Algorithm)等。当然,也可以直接计算光栅图像的像素值来精确地判断物体是否发生了碰撞,这一课将介绍基于分离轴理论的分离轴算法。

算法几何基础

提到算法几何,很多读者会想到各种头疼的公式,放心,涉及本课内容的算法几何理论非常少,只需要知道向量的加法和减法(差)、点积、法向量和投影这四个简单的知识即可。

向量的加法和减法

什么是向量?简单地讲,它的数学意义就是既有大小又有方向的量,也被称为矢量,既然有方向,那就有二维向量和三维向量,这里我们只讨论二维向量。平面几何学意义的向量是一个端点有次序的线段,即有向线段(Directed Segment)。假如坐标原点是 $O(0, 0)$,点 $P$ 的坐标是 $(x, y)$,则线段 $OP$ 的向量表示就是 $P= (x,y)$。

假设有两个向量 $P{1} = ( x{1}, y{1} )$、$P{2} = ( x{2} , y{2}

第6-8课:分离轴算法(SAT)与碰撞检测(图文篇)相关推荐

  1. 分离轴定理SAT及碰撞检测

    1.简介 分离轴理论,简称SAT(SeparatingAxisTheorem),通过判断任意两个凸多边形在任意角度下的投影是否均存在重叠,来判断是否发生碰撞.即两个不相交的多边形一定能找到一条轴,它们 ...

  2. 碰撞检测之分离轴定理算法讲解

    本文翻译自@sevenson的文章Separating Axis Theorem (SAT) Explanation .原文作者用的是ActionScript 3来编写算法,不过文中主要讲述的还是算法 ...

  3. 碰撞检测之分离轴定理算法

    本文转载自 https://blog.csdn.net/yorhomwang/article/details/54869018,感谢博主分享 本文翻译自@sevenson的文章Separating A ...

  4. 碰撞检测—分离轴理论

    最近在用opengl写一个小游戏,动画和人机交互都很简单,逻辑控制,边界问题都是目前的一个难题,正好找了几篇碰撞检测的资料,看着挺不错的 http://www.cppblog.com/mybios/a ...

  5. 【运动规划算法项目实战】如何使用分离轴定理算法实现碰撞检测(附ROS C++代码)

    文章目录 前言 一.分离轴定理简介 二. 碰撞检测流程 三.代码实现 3.1 计算物体的顶点坐标 3.2 计算出物体的所有边 3.3 检测两个三维物体是否发生碰撞 3.4 完整代码 3.5 RVIZ显 ...

  6. 两个软件相互交换数据_六轴算法机软件使用说明

    RAA (1.00a) ( Robot Arm Algorithms 1.00a 六轴算法机软件使用说明 : 作者觉得,在实际应用中,正逆解求解工具可以理解为一个类似数学计算器的 东西:不需要每个研究 ...

  7. egret判断两个多边形是否相交(分离轴定律)

    参考原文:原文 预备知识:向量的点积:  关于向量的知识这里不再赘述 分离轴定理(Separating Axis Theorem) 概念:通过判断任意两个 凸多边形 在任意角度下的投影是否均存在重叠, ...

  8. 西门子S7-1200 PLC双轴算法控制程序 西门子PLC做的电池焊接程序

    西门子S7-1200 PLC双轴算法控制程序 西门子PLC做的电池焊接程序,电池包里面有n*m行列个电池,主要功能: 1.每个电池的焊点坐标能够独立调整 2.每个电池的焊接能量可独立选择 3.任意一个 ...

  9. 《DeepLearning.ai》第六课:优化算法(Optimization algorithms)

    第六课:优化算法(Optimization algorithms) 6.1 Mini-batch梯度下降 上图表示了整个Mini-batcha梯度下降的过程. 首先对 X { t } X^{\{t\} ...

最新文章

  1. uva 101 The Blocks Problem
  2. eos和以太坊有什么关系_以太坊 2.0是什么?
  3. linux如何查看jupyter日志_Mac如何远程连接上Linux下的jupyter notebook
  4. linux 固定usb设备,linux下多个usb设备固定名称方法
  5. java Enumset
  6. c++中BOOL和bool的区别
  7. AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项
  8. C#【Thread】Interlocked 轻量级锁
  9. python数据结构5 - 排序与搜索
  10. Java会走向晦暗吗?Kotlin会取而代之吗
  11. Atitit 标记语言ML(Markup Language) v4 目录 1. 标记语言ML Markup Language 1 1.1. 简介 1 2. 置标语言置标语言通常可以分为三类:标识性的
  12. Scala语言精华版笔记整理
  13. 抖音源码为什么会成为短视频源码中的翘楚
  14. echarts Map(地图) 波纹数据点
  15. Excel 合并两列时间,中间用分隔符连接
  16. Jupyter Notebook 自动生成目录(超级实用)
  17. Nginx 实现域名访问以及反向代理
  18. Arduino ESP8266当中的yield 函数
  19. APICloud实战--每日生鲜App
  20. 树莓派从零开始快速入门第8讲——单总线(以DS18B20为例)

热门文章

  1. ICC2: channel自动加soft blk方法
  2. 课件动画做的牛不牛,看你有它没它!
  3. Photoshop CC 2019入门知识手册
  4. APP按下home键恢复到登录(主界面)
  5. 【案例教程】基于RWEQ模型的土壤风蚀模数估算及其变化归因分析实践技术
  6. 以太网交换机可以家用吗_家用交换机是干什么用的?
  7. Microsoft fsx 飞行模拟器 SDK的一些心得
  8. gitlab runner 使用案例
  9. VBA程序升级,vba在线更新
  10. 论文格式要求及字体大小