

























很多人都有这样的习惯,当要做一件自己没有接触过的事情时,先不着急下手从零做起,而是通过各种渠道去了解这个问题是否已经有人思考过,并且是否已经很好的解决了,或者能否给自己一些启迪。这是个好习惯,但是在参考别人的解决方案时要保持一个旁观者的心态,并时刻注意哪一部分对我有用,有多少用,他这样做的好处是什么,这样做的不足又是什么,我所处理的问题是否和他面对的完全一致,出入在什么地方,切不可拿来主义!
我就有这样的习惯,下面是对我在刚接触任意平面多边形三角剖分这个问题时找到的一些解决方案的分析,其中不乏经典。
一、三角剖分的定义
谈到三角剖分,不得不先摆一下它的定义:[1]
1. 产生的三角形不相重叠;
2. 不产生新的顶点。
这样的一个定义并不必那么教条,达到这样的目标是好的,但如果考虑到其它的一些因素,比如说通用性、复杂度、性能等等,可以适当的违反一些,三角剖分的目的就是一个:用三角形拟合多边形。
一般来说第一条是不该违反的,毕竟产生的三角形有重叠部分就可以将其进一步分解成无重叠。但第二条遵守起来就不那么容易了,就在摆出这个定义的同一篇文章,也就是参考文献1,它给出的算法就可能产生额外的顶点。
在本专题下一篇文章中我将会阐述我提出的新算法,你将发现,通过这样的算法进行处理,产生的不规则三角形网严格遵守第一条,但严重违反第二条!但是这个算法有一个好处,就是从更广泛的意义上做到了对任意多边形的处理。如果你读过本专题的首页,会发现我提出了一种新的多边形:分离多边形。分离多边形是由不相交的多个多边形组合为一个逻辑主体,以一个整体的形式对外表示。对于这样的多边形该算法仍然能够很好的工作,在算法看来,它与其它多边形没有什么区别,其实,算法并不关心多边形的类别,哪个顶点是凹的,哪个顶点是凸的。呵呵,提到自己的算法多少有些激动,话多了些,回到本篇的主题,关注一下别人的算法,回望经典。
二、Delaunay三角剖分
谈到三角剖分,这个名字你不得不熟悉,这就是经典。
三、其它三角剖分
对于简单多边形,有基于凹凸顶点判定的方法,就是判定多边形的每一个顶点是凹点还是凸点,发现凹点后,判断凹点之后两边能否形成三角形,如不行则继续寻找凹点;如果可以形成三角形,记录下三角形并将其移去,继续寻找凹点,直到分解完毕或没有凹点,没有凹点的凸多边形可由任意一点引线段将凸多边形分割。这种方法适用范围有限并且有特例不能分解,特例如下图。[5]
当然基于凹凸顶点判定的方法不是仅此一种,但在我找到的论文中就发现了这一个,还是作为反例出现的。
其它的对于非简单多边形的剖分算法基本上思路是一致的,就是连接内外环,化非简单多边形为简单多边形[1][5],然后再用其它的方法来处理简单多边形,例如基于凹凸顶点判定等等,以下两幅图给出了一个大致的思路。
五、参考文献:
1. 徐春蕾, 李思昆 . 一种适用任意平面多边形的三角剖分算法[J] . 国防科技大学学报 . 第22卷第2期
2. 丁永祥,夏巨湛,王英,肖景容 . 任意多边形的Delaunay三角剖分[J] . 计算机学报. 第17卷第4期
3. http://baike.baidu.com/view/501103.htm
4. 涂治红, 桑农 . 用VC语言实现任意多边形的Delaunay完全三角剖分算法. 计算机与数字工程. 第33卷
5. 陈向平, 应道宁. 任意多边形三角剖分算法[J]. 浙江大学学报. 第六期第22卷. 1988年11月
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。