旋转卡壳——四边形剖分

来源:互联网 发布:参加淘宝双十一条件 编辑:程序博客网 时间:2024/05/16 19:35

出处:http://blog.csdn.net/acmaker/article/details/3314243

四边形剖分

虽然三角剖分是一个更常用的结构, 但最近四边形剖分在某些特定条件下显得更适用, 比如 scattered data interpolation 以及 finite element method 等。 

一个四边形剖分实际上是一个点集的四边形分割。 一些与三角剖分本质上的区别(除了特别明显的)应该引起注意: 
首先, 不是所有的点集都存在四边形剖分。 事实上, 只有偶数点集才有。 对于奇数点集, 有时需要附加点(称为Steiner点)到原集合中, 从而构造一个四边形剖分。 
同时, 人们经常期望四边形剖分构造拥有一些“好的”性质, 比如凸的。 这个与三角剖分是不同的。 

有许多简单的四边形剖分算法。 比如, 首先考虑点集的三角剖分, 然后加入一个Steiner点到每个三角形内部, 以及每条边的中间。 连接这些新点构成了四边形剖分(这是DeBerg提出的)。 

Bose 和 Toussaint 在1997年提出从一个点集的螺旋三角剖分开始, 来构造一个o四边形剖分。 
如果点集是偶数的, 那么每隔一个的对角线(在螺旋三角剖分算法中加入的)移除, 构造了一个四边形剖分。 如果是奇数个点, 那么从最后一条对角线开始每个隔一条对角线(比如最后一个, 倒数第三个等)进行移除, 在被移除的第一条对角线附近加入一个Steiner点。 下图展示第一种情况(偶数个点的点集)。 螺旋三角剖分(左边), 和最终的四边形剖分(右边)。 

因为对角线的移除过程(和必要的更新)花费 O(n) 的时间, 这个四边形剖分算法与螺旋三角剖分有相同的时间复杂度。 这个算法的优点在于便于理解与实现(一旦凸螺旋线建立), 并且事实上其产生了一个比许多竞争者“更好的”四边形剖分算法。 

下一个问题集是关于凸多边形, 特别的, 关于凸包上的操作, 比如合并凸包

 

 

原文地址:http://cgm.cs.mcgill.ca/~orm/quad.html