简介:
首先给出我的Github页面:ConcaveIntersection
这个开源库基于Unity开发,主要实现了凹多边形之间的相交判断,当然也可以应用于顶点与凹凸包、线段与凹凸包、凸包与凸包之间的相交判断,也就是说,这个方案基本可以解决前面两则文章中的所有多边形判断,效率也非常高,复杂度几乎接近O(n),下面解释原理。
一、扫线法概念
扫线法其实是一种常用的平面空间算法思路,在很多算法中均有应用,例如我的文章Voronoi图和扫线法中就是应用扫线法来实现Voroni图的计算,从而实现三角剖分。扫线法的典型作用是降维,将原本的二维空间数据,转化为一位空间数据,这样可以大大提升计算效率。
如上图,假设存在多边形ABCDEFG,我们在执行运算时,依照从左至右,从下到上的规则,好像有一条扫描线推遍整个相关平面区域,这样的计算方法,就称为扫线法。
所谓的从左到右不难理解,图中的每个顶点都被从左至右排序,而通过这些顶点的垂线将平面划分成了若干区域,这些被划分的区域我们可以称为不同的扫描阶段,因此以上共有A、G、B、F、D、C、E七个阶段。
那么,从下到上代表什么意思?先看下图