Voronoi diagram应用

第一个要讲的是使用Voronoi图来求解点集中的最大空心圆。下面先给出寻找最大空心圆这个问题的定义:

Find a largest empty circle whose center is in the convex hull of a set of n points, empty in that it contains no points in its interior, and largest in that there is no other circle with strictly larger radius.

这个问题一看就是要是在无限多个点中选择一个点。所以我们的方法很显然就是要先剔除一部分点,使我们的问题在有限多个点中进行寻找。

这时很显然只有在convex中的Voronoi点和Voronoi边喝convex的交点是候选点,于是我们只要在这些点中选择就行了。

关于为什么是这些点?可以看书(computational geometry in c),其实很自然就是那些点,主要不要忘了convex边和Voronoi边的交点和剔除那些在convex外的Voronoi点就行了。

 

第二个计算一个点击的最小遍历树(minimum spanning tree,MST),其中MST的定义:

a minimum spanning tree of a set of points is a minimum length tree that spans all the points: a shortest tree whose nodes are precisely those in the set.

一个原始的想法就是使用贪婪的算法。首先将所有的边的长度进行排序,然后从头开始加入到树中,保证没有环出现,直到所有的边都遍历过了。

一个很明显的问题就是对所有的边排序,这是一个很庞大的工程。于是和上面的应用的想法一样,我们选择从那些边中选择一些候选边。

一个引理,如果MST is subset of the Delaunay triangulation.这个问题的证明使用的是反证法,也就是存在一条边属于MST,但是不属于Delaunay triangulation,然后利用的是如果一条边ab不属于Delaunay triangulation,就存在一个圆包含a,b(ab是直径)的同时,一定还包含其他的点。由三角形的限制,其中的两条边会小于ab的长度,于是树如果通过连接到那个点而达到b,而不是a,这时树比原来的小,于是和命题的条件不符。如果看不懂,请阅读书computational geometry in c。

 

如果有任何疑问,发邮件至fire_fuxm@hotmail.com

posted on 2011-09-10 00:20  fire_fuxm_USTC  阅读(1645)  评论(0编辑  收藏  举报