2007年 工 程 图 学 学 报2007第3期 JOURNAL OF ENGINEERING GRAPHICS No.3一种基于计算几何方法的最小包容圆求解算法张 勇, 陈 强(清华大学机械工程系先进成形制造重点实验室,北京 100084)摘要:为实现点集最小包容圆(最小外接圆)的求解,将计算几何中的α-壳的概念应用到最小包容圆的计算过程,提出了一种精确有效的最小包容圆求解算法。
根据α-壳定义及最小包容圆性质,证明当1/α等于最小包容圆半径时点集的α-壳顶点共圆,1/α小于最小包容圆半径时α-壳不存在,1/α大于最小包容圆半径时随着1/α减小α-壳顶点数逐渐减小的规律。
将α-壳顶点数目作为搜索最小包容圆半径的依据,实现了最小包容圆半径的搜索和最小包容圆的求解。
关键词:计算机应用;优化算法;计算几何;最小包容圆;α-壳中图分类号:TP 391文献标识码:A 文章编号:1003-0158(2007)03-0097-05Algorithm for Minimum Circumscribed Circle Detection Based onComputational Geometry TechniqueZHANG Yong, CHEN Qiang( Key Laboratory for Advanced Manufacturing by Materials Processing Technology,Department of Mechanical Engineering, Tsinghua University, Beijing 100084, China )Abstract: α-hulls are applied to calculate the minimum circumscribed circle (MCC) of point set and an accurate and effective method for MCC detection is established through finding the least squares circle of the point set and iteratively approaching the MCC with recursive subdivision. Several theorems concerning the properties of α-hulls are presented. If 1/α is equal tothe radius of points’ MCC, all vertices of the α-hull will be on the same circle. When 1/α is larger than the MCC’s radius, the number of vertices of α-hulls will decrease with decreasing of 1/α, andthe number of vertices’ number will reach zero when 1/α is smaller than MCC’s radius. From the above rules, an algorithm for detecting MCC is developed, and experimental results show this algorithm is reliable.Key words: computer application; optimized algorithm; computational geometry; minimum circumscribed circle; α-hull收稿日期:2005-12-20基金项目:国家自然科学基金资助项目(50275083);高校博士点基金资助项目(20020003053)点集P的最小包容圆(有些文献称最小外接圆)是指包容P的所有圆中半径最小的圆(在该文中,若称“区域A包容集合B”是指B中所与元素均位于区域A的内部或A的边界上,下同)。
最小包容圆的概念广泛应用于计算机图形学、计量学、机械加工等领域。
最小包容圆(最小外接圆)法是进行圆度误差评定的一种重要方法。
目前对最小包容圆的求解大多采用优化搜索算法。
这些算法通常是将圆心作为优化参数、半径作为优化目标。
但是,这些优化算法通常计算时间长、效率低,甚至有时不能找到真正的最小包容圆。
计算几何是20世纪70年代出现的一个研究领域。
文献[1],[2]将计算几何中的V oronoi图应用到最小包容圆的求解,但是V oronoi图的计算比较复杂。
该文引入了计算几何中α-壳的概念,提出了一种精确、高效的最小包容圆求解算法。
1 α-壳(α-hull)的定义文献[3]中给出了平面内点集P的α-壳的定义,α-壳是凸壳概念的延伸。
在定义α-壳之前,先给出了α-盘(α-disc)的定义(如图1)如下:定义1 对于任意实数α:当α>0时,α-盘定义为平面内半径为1/α的圆内包容的所有区域;当α=0时,α-盘定义为一条直线一侧的半平面;当α<0时,α-盘定义为平面内半径为-1/α的圆外及圆上的所有区域。
α>0α=0α<0图1 不同取值情况下的α-盘α-壳的定义如下:定义2 对于平面内有限点集P及实数α,所有包容P的α-盘的交集定义为点集P的α-壳,P中位于α-壳边界上的点称为α-壳的顶点。
从定义2可知,当α >0时,P的α-壳为所有包容P的半径为1/α的圆盘的交集;当α=0时,P的α-壳就是P的凸壳;当α<0时,P的α-壳的为所有不包含P中任意一点半径为-1/α的圆盘的补集的交集。
图2给出了上面3种情况下的α-壳。
(a) (b)-1/(c) (d)(a) α>0; (b) α =0; (c, d) α <0图2不同取值情况下α-壳根据α-壳的定义易得出下面结论:(1)当α >0时,对于点集P内的某一点,若能够找到一个通过该点且半径为1/α的圆包容点集P的所有点,那么该点必为点集P的α-壳顶点;(2)当α<0时,对于点集P内的某一点,若能够找到一个通过该点且半径为-1/α的圆使得P的所有点在圆外或者在圆上,那么该点必为点集P的α-壳顶点。
文献[4]对文献[5]计算凸壳的算法进行了拓展,得出平面点集α-壳的计算算法,该算法的时间复杂度为O(n)2 几则定理的提出根据α-壳的定义及有关性质,该文推导出如下定理。
定理1设P为平面内有限点集;P的最小包容圆为圆C0,半径为R0;R为实数,且满足R>R0。
那么,点集P中位于圆C0上的点一定为·98· 工 程 图 学 学 报 2007年P的α-壳(1/α =R)的顶点。
证明设点p为P中位于最小包容圆上的点,那么过p一定能作一个半径为R0的圆,且该圆包容P中所有点。
因R >R0,那么,过p一定能够作一个半径为R的圆包容P中所有点。
根据α-壳的定义,点p一定是P的α-壳(1/α = R)的顶点。
定理1证毕。
定理2设P为平面内有限点集;P的最小包容圆为圆C0,半径为R0;R为正实数,且满足R<R0。
那么,点集P的α-壳(1/α = R)不存在。
证明假设点集P的α-壳(1/α =R)存在,那么至少有一点p为α-壳的一个顶点,根据α-壳的定义,过点p至少可以做一个半径为R的圆C 包容P的所有点。
由于圆C包容P的所有点,那么R一定大于或等于P的最小包容圆半径R0,这与已知条件R<R0矛盾。
假设不成立。
定理2证毕。
定理3设P为平面内有限点集,那么,点集P只有一个最小包容圆。
证明如图3,假设点集P有两个最小包容圆C1和C2,其半径分别为R1和R2。
若C1和C2同时为P的最小包容圆成立,那么,必有R1=R2成立。
由于圆C1和C2为两个不同的圆,那么,两圆的圆心点必为平面内不同的两个点。
圆C1和C2相交于两个点A和点B,因为圆C1和C2均包容点集P,记P⊆C1和P⊆C2,那么,有P⊆(C1∩C2)从图3可以看出,以AB为直径作圆C3,必有(C1∩C2)⊂C3那么,P⊆C3即圆C3包容点集P。
因|AB|<2R1,即圆C3的半径小于圆C1、C2的半径,这与圆C1、C2为最小包容圆相矛盾,假设不成立。
定理3证毕。
定理4 设P为平面内有限点集,点集P1和点集P2分别为P的α1-壳(1/α1=R1)和α2-壳(1/α2=R2)的顶点,R0为P的最小包容圆半径,且满足0<R0≤R1<R2,那么,P1⊆P2。
ABC2C3C1图3 定理3证明用图证 明 设点p为点集P1中的任意一点,那么过点p至少一定可以做一个半径为R1的圆C1包容P中的所有点,即P⊂C1因R1<R2,那么,过点p一定可以做一个半径为R2的圆C2包容圆C1,即C1⊂C2那么P⊂C2即圆C2包容P,又点p在圆C2上,那么,点p为点集P的α2-壳(1/α2=R2)的顶点,即p⊂P2因p为P1中的任意一点,那么P1中所有点都属于P2,即P1⊆P2定理4得证。
从定理4可以看出,对于某一已知点集P,当1/α由R2减小到R1时,P的α-壳顶点数目减少或不变。
定理5 设P为平面内有限点集,R0为P的最小包容圆半径,那么,P的α-壳(1/α =R0)所有顶点共圆。
证明设点p为P的α-壳(1/α =R0)的任意顶点,那么过点p至少能过作一个半径为R0的圆C包容P的所有点。
因R0为P的最小包容圆半径,由定理3可知圆C必为P的最小包容圆。
那么,点p在P的最小包容圆上。
同理可证,对于P的α-壳(1/α =R0)的任意顶点均在P的最小包容圆上。
定理5得证。
第3期 张 勇等:一种基于计算几何方法的最小包容圆求解算法 ·99·3 最小包容圆求解算法由前面定理1~5可知,对于已知的平面中点集P={p1, p2, …, p m},P的最小包容圆半径为R0,任意的正实数r,P的α-壳(1/α=r)的顶点数目n与r有关,并满足下面规律:(1)r =+∞时,n为P的凸壳顶点数目;(2)r>R0时,随着r的减小,n逐渐减小;(3)r =R0时,α-壳(1/α =r)的所有顶点共圆;(4)r <R0时,n=0。
从n与r的上述变化关系,对于某一点集P 可以根据其α-壳(1/α =r)的顶点数目判断r与其最小包容圆半径R0的大小关系,并不断改变r,计算P的α-壳(1/α =r)的顶点,当α-壳(1/α =r)的所有顶点共圆时的顶点即为位于P的最小包容圆上的点,求得最小包容圆半径即可。