《实时碰撞检测算法技术》读书笔记(七):分离轴测试

分离轴测试基于凸体:给定两凸体集AB,若两集合不存在交集,则必定存在一个轴使得两凸体投影无重叠。若找不到该轴,则两凸体集相交。

对于对称几何体如线段、AABBOBB、球体等,其包含中心C且为投影轴上投影区间的中心位置,只需计算其投影区间的1/2宽度或半径,求和并于二中心投影间的距离进行比较,若和小于中心投影间距离,则物体对象处于分离。如下图:


总体上讲,多面体对象间的分离测试需要考查下列轴:

平行于物体A的面法线的轴

平行于物体B的面法线的轴

平行于物体AB各边生成的叉积向量的轴

一旦找到分离轴,测试即可立刻退出并返回“分离”信息。若全测试完且不存在,则对象间必定相交。

对于2D物体,只需要考查两物体所有边的法向量即可。

分离轴测试的健壮性:

物体间相应边的叉积向量可以构造分离轴,但是若两向量平行,则叉积结果为0向量,此时不适合用于分离轴。普遍采用以下方案:检测叉积向量是否为(准)0向量。若是,则重新生成与两个边向量垂直的新轴,或者仅忽略该轴。

下列代码片段针对边ABCD,给出健壮的分离轴测试的实现方式:

  1. //Commpute a tentative separating axis for ab and cd  
  2. Vector m = Cross(ab,cd);  
  3. if(!IsZeroVector(m)) {  
  4.     //Edges ab and cd not parallel, continue with m as a potential separating axis  
  5.     ...  
  6. else {  
  7.     //Edges ab and cd must be(near) parallel, and therefore lie in some plane P.  
  8.     //Thus, as a separating axis try an axis perpendicular to ab and lying in P  
  9.     Vector n = Cross(ab, c - a);  
  10.     m = Cross(ab, n);     
  11.     if(!IsZeroVector(m)) {  
  12.         //continue with m as a potential separating axis  
  13.         ...  
  14.     }  
  15.     //ab and ac are parallel too, so edges must be on a line. Ignore testing  
  16.     //the axis for this combination of edges as it won’t be a separating axis.  
  17.     //(Alternatively, lest if edges overlap on this line, in which case the  
  18.     //objects are overlapping.)  
  19.     ...  
  20. }  


另外,若叉积向量过大,会导致计算过程中精度损失。如果并未限定输入向量的范围,则应在叉积计算之前对向量执行范化操作以保持相应的精度。

内容简介  《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分、BSP树层次结构、凸体算法、基于GPU的碰撞检测、数值健壮性、几何健壮性以及优化操作。另外,《实时碰撞检测算法技术》还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解计算方案的实现过程。  《实时碰撞检测算法技术》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。第1章 概述1.1 内容概览1.2 关于本书的代码第2章 碰撞检测系统中的设计问题2.1 碰撞算法的设计因素2.2 应用程序中对象的表达方式2.3 查询类型2.4 环境模拟参数2.5 性能2.6 健壮性2.7 实现与使用的简洁性2.8 小结第3章 数学和几何学入门3.1 矩阵3.2 坐标系统和顶点3.3 向量3.4 质心坐标3.5 直线、光线和线段3.6 平面和半空间3.7 多边形3.8 多面体3.9 凸包计算3.10 域3.11 Minkowski和与Minkowski差3.12 小结第4章 包围体4.1 BV期望特征4.2 对齐包围盒4.3 Spheres球体4.4 方向包围盒4.5 球扫掠体4.6 半空间相交体4.7 其他类型的包围体4.8 小结第5章 基本图元测试5.1 最近点计算5.2 图元测试5.3 直线、光线和有向线段的相交测试5.4 其他类型的测试5.5 动态相交测试5.6 小结第6章 层次包围体技术6.1 层次结构设计问题6.2 层次结构的构建策略6.3 层次结构的遍历6.4 包围体层次结构示例6.5 合并包围体6.6 高效的树型表达方式及遍历6.7 通过缓存机制改善查询6.8 小结第7章 空间划分第8章 BSP树层次结构第9章 凸体算法第10章 基于GPU的碰撞检测第11章 数值健壮性第12章 几何健壮性第13章 优化操作参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值