关于多边形的布尔运算

在计算机图形学中,经常遇到如何计算两个多边形之间交集的情况,这其实就是一种多边形的布尔运算的问题。

多边形必定会把平面分区为两个分离的区域:内部区域和外部区域。我们可以这样定义,多边形的每一条线形对象都具有与其相关的法线向量,法线所指向的区域标为“外部”;相反的区域为“内部”。如果线形对象按指定方向前进时,内部区域位于左边,而外部位于右边。这样我们就明确的划分了内部区域和外部区域。对于与多边形相关的布尔运算,其实和数集的布尔运算基本相同,本次的内容我们主要介绍以下几种:

1、反:反转内部和外部区域。如何明确定义了边线形的法线向量或前进方向,反也就是把这两个方向全部取反就可以得反转内部和外部区域的效果。应该比较容易理解;

2、交:顾名意思,也就是取两个多边形内部区域相交的部分;

3、并:两个多边形的联合;

4、差:一个多边形差去另一个多边形的部分。

5、异或:两个多边形并完之后,差去两者交的部分。

 

已经有很多方法用来解决多边形的布尔运算问题,其中可以大家了解最多的就是直接用空间分区二叉树的方法来实现(空间分区二叉树---在图形学中的应该还是非常多的,以后做为一个新的一篇专门介绍一下自己的理解吧)

1、           反:对于反处理是比较简的,假设多边形的数据结构保存了边,通过反转第一条边的次序来实现反运算。

2、           交:可以用非常简间的方法来实现。如果AB相交,那么A的每一条与B相交的边,保留这些边位于B内的部分;类似,保留B位于A内的部分。如果AB都有很多边,那么时间复杂度就很高是Onm)级的。由于位于二叉分区直线的一侧的A的边不需要与位于另一侧的B边进行比较,因些利用二叉树可以减少比较次数。其实,二叉树的方法并不是唯一的方法,但所有方法的焦点:找到一对相交的边

3、           其它的三种运算都可以通过上两种去简单的操。

你可能感兴趣的:(关于多边形的布尔运算)