- 3
- 0
- 约3.01万字
- 约 16页
- 2018-03-29 发布于天津
- 举报
计算简单多边形的核
计算简单多边形的核
――计算几何实验报告 2003 年12 月
指 导 教 师: 邓 俊 辉
作 者: 万 海 (035451)
蒋 弘 山 (035441)
吴 邦 欲(035454 )
1.问题描述
简单多边形的定义:设平面上n 个点 , ,…, 按循环排序方法逆时针排列,
v v v v
0 1 n1 0
在 之后,又设 = , = , = ,是连接点的n条线段,那么这些线
v e v v e v v e v v
n1 0 n1 0 1 0 1 n1 n2 n1
段界定一个简单多边形,当且仅当:1、循环排序中相邻线段对的交是它们之间共有的单个点:
e e = ;2 、不相邻的线段不相交: ,j i+1,i=1,2 …n-1, = 。
v e e e e
i i1 i i j 0 n
简单多边形P 的核(kernel),K(p)定义如下:K(p) 由多边形内部的点构成,这些点与多边
形的任何顶点相连所构成的线段完全包含在P 中。
K(p) 的定义还可以等价地描述为:如果将多边形P 的边看作逆时针方向所构成的环,则
K(p)是多边形的所有边的左半平面的交集。通过观察可以发现,K(P)或者为空或者为完全包
含在P 内的有界凸集。
图1 kernel 的定义
1976 年,Shamos 和Hoey 提出了在O(nlogn) 的时间内完成n 条边构成的简单多边形的
kernel 算法,该算法基于的思想是求n 个一般的半平面的交需要的时间是O(nlogn),基本上
是蛮干型。但经分析发现该下界并不适合求kernel ,这是因为在简单多边形中,所有半平面
是按边的顺序有序排列的,而他们在设计算法时忽略了这个特性。
1994 年Sven Schuierer 在论文An O(log log n) Algorithm to Compute the Kernel of a
Polygon提出了利用 n/loglogn 个处理器并行处理点包含和直线求交的方法,将求kernel 的
复杂度降为O(loglogn) 。该算法基于按斜率排序的边数据结构,这篇论文的特点是将kernel
的特性以及存在kernel 的多边形的特性分析得非常透彻,但实现起来比较困难。
我们的实验是基于1978年D.T.LEE和F.P.PrePARATA提出的一个改进算法,在仔细阅读
论文的过程中我们还发现图表和描述存在一些小的错误。这个算法充分利用了半平面有序排
列的特性,效率能达到线性时间,(与边的数目呈线性关系) 。这种具有线性复杂度的算法称
为核序列算法。算法依序扫描P 的顶点,同时构造一个凸多边形的核序列 K ,K ,⋯K n,
1 2
这里每个多边形既可能有界也可能无界。K i 是e0 ,e1 ,⋯, ei 的 i 个左半平面的交
集, i=1,2 …n-1,因此有K n K K ,且K n 1=K(P) 。
原创力文档

文档评论(0)