【实时碰撞检测算法Summary】凸包检测和AABB解释

凸包可视为碰撞集合体的早小包围体。这里介绍两种算法

1.Andrew算法

对于一个点集,首先选择点集中最靠左的两个点,产生当前凸包的第一条边。然后开始向右扩展,(分上下两条路向右扩展,这里先只介绍上半部分)

如果考察的下一个顶点位于边集当前边的右侧,则该点暂定为凸包上的顶点,并加入到边集中,如果下一个点位于当前边的左侧,则该店位于凸包的外部,并处于错误状态,此时剔除边集中的最后一个顶点,并开始下一个顶点,直到出现位于边集中当前边右侧的顶点。

2.Quickhull算法

Andrew算法在2D空间内工作良好,但是在3D空间内并不适用。

快包算法是先获取顶点集的包围和,一般情况下可以确定4个端点,分别位于包围盒的四条边上。作为断点,上述4个点位于凸包并构成了首次逼近。进一步考察在当前凸包外部的顶点,对于现在获得的四边形,计算边外部距离最远的顶点(如果存在),则此点必定是凸包上的顶点,那么此时边的两个顶点和这一个新的顶点构成了一个三角形。然后形成一个新的凸包,如此迭代下去,直到所有的顶点都在凸包内。

包围体被称为BV

BV期望特征

低耗费的相交测试

实现紧密拟合

计算耗费较少

易于旋转和变换

内存占用较少

包围体的常用类型如下:

其中 轴对齐AABB比较常用

我们在做两个物体的相交测试的时候,可以把两个物体都变换到世界空间坐标。或者把其中一个变换到另一个物体的局部空间坐标。(这其中大有不同,)

如上图 b图和c图的判断结果一个是相交 一个是不相交

AABB的构造除了暴力遍历顶点取最大最小之外,还可以用爬山法,从当前顶点移动常数个顶点,得到最大/最小范围。

不过需要数据的预处理如下图所示

对于AABB旋转之后,物体的BV通常需要重新计算,最简单的方法是利用一个新的AABB包围旋转后的AABB。

通常计算旋转后的AABB,只需要计算旋转之前的顶点在世界坐标轴上的投影间隔范围 经过 矩阵M变换后的范围。

范围计算方法和解释如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值