检测多边形是否重叠_三角形与包围盒的重叠测试

d1ae39d07a0094753e82f008ebe101b3.png
chopper:目录​zhuanlan.zhihu.com
e04be0c64bc342ee0c35a4ba061e5c4e.png

Voorhies(1992)[1]提出一种判断三角形与长方体是否相交的算法,Green和Hatch(1995)[2]扩展了该算法的用途,使得该算法能判断任意多边形与长方体之间是否重叠。该算法通过3个重叠检测来判定:1)检测多边形的顶点是否在长方体内,若至少存在一个这样的顶点,说明它们重叠;2)检测多边形的边是否与长方体相交,若至少存在一条这样的边,说明它们重叠;3)检测长方体的四条对角线是否与多边形相交,若至少存在一条这样的对角线,说明它们重叠。相反,若一个多边形通过了3个检测步骤,说明它们是分离的。可以在网上找到该算法的C++实现代码[4]。

Akenine-Möller(2001)[3]提出了一种基于分离轴理论的算法,该算法具有更高的效率,本篇文章将对这种算法进行详细的介绍,最后介绍该算法的实现。

文章目录:

  • 算法介绍
  • 源码实现
  • 参考

算法介绍

三角形

与有向包围盒
的重叠测试,其中,
,
,
,

跟线段与包围盒的重叠检测类似,把三角形的三个端点,沿着有向包围盒的三条轴方向做投影:

其中

。接下来,只要判断
与轴对齐包围盒
是否重叠,包围盒的中心是

eab15f3b00b13337cd332ede01d49bfb.png
图1. 三角形与包围盒的重叠检测

如图1所示,基于分离轴理论,需要对下面的13条轴线进行检测:

  • i. [3个检测]
    ,分别是轴对齐包围盒的3条轴线。
  • ii. [1个检测]
    的法线
  • iii. [9个检测]
    ,其中
    ,
    ,

对于第i种情况,以轴

为例,将
的3个顶点沿着
方向做投影,由于
分量和
分量都是零,所以3个点到包围盒中心的投影间隔分别是
,找到3个投影间隔的最小值
和最大值
。如果
或者
,说明三角形与包围盒分离。否则,还需要对其它轴进行检测。对于轴
和轴
的情况,也是类似的。

对于第ii种情况,判断

所在的平面与包围盒是否相交,若不相交,说明三角形与包围盒分离。否则,还需要对其它轴进行检测。

对于iii种情况,以

为例,
。将
的3个顶点沿着
方向做投影,得
。由于
,我们不再需要找到
的最小值和最大值,只要找到最小值
和最大值

的3个顶点沿着
方向做投影,并计算出一条半径

如果

或者
,说明三角形与包围盒分离。否则,还需要对其它轴进行检测。

对于其它8条轴的检测方法,也是类似的。但为了能顺利的完成算法的实现,这里描述两条重要的结论:

  • i.
    ,
    ;
  • ii. 对于
    ;对于
    ;对于
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值