有人能指出我如何构建(乘法和/或加法)加权voronoi图的参考实现,最好是基于Fortune的voronoi算法吗?
我的目标: 给定一组点(每个点都有一个权重)和一组边界边(通常是一个矩形),我想用python或processing.org-framework构建一个加权的voronoi图。这是一个example。
到目前为止我的工作: 到目前为止,我已经实现了Fortune的算法以及Michael Balzer's paper中提出的“centroidal voronoi tessellation”。算法3说明了如何调整权重,但是,当我实现这个时,我的几何不再适用。为了解决这个问题,必须更新扫描线算法以考虑权重,但到目前为止我无法做到这一点。 因此,我想看看其他人是如何解决这个问题的。
答案 0 :(得分:8)
对于加权加权的Voronoi图:Remember that a power diagram in dimension n is only a(n unweighted) Voronoi diagram in dimension n+1。
为此,请回想一下,如果向坐标添加任何常量,则点集的Voronoi图是不变的,因此加权Voronoi图可以使用坐标写为非加权Voronoi图,例如2D提升到3D:
(x_i,y_i,sqrt(C - w_i))
其中w_i是种子的重量,C是任意大的常数(实际上,一个足够小,使得C-w_i为正)。
计算完图表后,只需丢弃最后一个组件。
因此,基本上,您只需要找到一个能够处理维度n + 1的Voronoi图表的库,与您的问题相比。 CGAL可以做到这一点。这也使得实施变得非常容易。
答案 1 :(得分:3)
答案 2 :(得分:2)
在那里,几乎没有“现成的”开源代码,因为中心的距离是用乘法因子加权的。 据我所知,目前的CGAL包都没有涵盖这种情况。
Takashi Ohyama丰富多彩的网站提供了java实现 http://www.nirarebakun.com/voro/emwvoro.html 使用SIMPLE算法(欧几里德和曼哈顿距离)最多可达100个点。 还有一篇论文描述了这个简单的交集算法和O(n ^ 3)时间内的近似实现,作为TerraView的插件。 但是,我在TerraView / TerraLib存储库中找不到此插件的来源: http://www.geoinfo.info/geoinfo2011/papers/mauricio1.pdf
Aurenhammer和Edelsbrunner描述了一种最优的n ^ 2时间算法,但我并不知道可用的代码。
答案 3 :(得分:0)