查找具有面积约束的沃罗诺伊曲面细分



假设我们要对具有 N 个点的矩形曲面进行 Voronoi 分区。Voronoi 曲面细分产生对应于 N 个点的 N 个区域。对于每个区域,我们计算其面积并将其除以整个表面的总面积 - 将这些数字称为 a1、...、aN。它们的总和等于团结。

假设现在我们有一个预设的 N 个数字列表,b1,...,bN,它们的总和等于单位。

如何找到 Voronoi 分区的 N 个点坐标的选择(任何),例如 a1==b1, a2==b2, ..., aN==bN?

编辑:

经过一番思考,也许 Voronoi 分区不是最好的解决方案,重点是想出一个随机的不规则表面划分,以便 N 个区域具有适当的大小。在我看来,沃罗诺伊似乎是合乎逻辑的选择,但我可能弄错了。

我会选择一些遗传算法。

以下是基本过程:

1)创建100组属于矩形的随机点。

2)对于每个集合,计算沃罗诺伊图和面积

3)对于每组,评估它与预设权重的比较情况(称之为分数)

4) 按分数对分数集进行排序

5)倾倒最差的50套

6)通过混合点数并添加一些随机集合,从剩余的50个集合中创建50个新集合。

7)跳到步骤2,直到满足条件(分数高于阈值,发生次数,花费的时间等...

你最终会(希望)得到一个"有点合适"的结果。

如果您正在寻找的不一定是 Voronoi 镶嵌,并且可能是幂图,那么以下文章中描述了一个不错的算法:

F. Aurenhammer, F. Hoffmann, and B. Aronov, "Minkowski type theorems and minimum-quads clustering," Algorithmica, 20:61-76 (1998).

他们对问题的版本如下:给定多边形 P 中的 N 个点 (p_i),以及一组非负实数 (a_i) 求出权重 (w_i),使得动力单元 Pow_w(p_i) 与 P 的交点面积正好a_i。在论文的第5节中,他们证明了这个问题可以写成凸优化问题。若要实现此方法,需要:

  • 用于高效计算功率图的软件,例如 CGAL 和
  • 用于凸优化的软件。我发现使用准牛顿求解器(如 L-BFGS)在实践中给出了非常好的结果。

我的网页上有一些代码可以做到这一点,名为"二次最优传输"。但是,此代码不是很干净,也不是很详细,因此实现您自己的算法版本可能会很快。你也可以看看我SGP2011关于这个主题的论文,它在同一页面上,简要描述了Aurenhammer,Hoffman和Aronov算法的实现。

假设坐标,其中矩形在 x = 0 处与左边缘对齐,

在 x = 1 处与右边缘对齐,在 y = 0 处与水平平分线对齐。设 B(0) = 0 且 B(i) = b1 + ... + bi。将点数放在 ((B(i-1) + B(i))/2, 0)。这是不对的。我们将 x 坐标为 xi,使得 bi = (x(i+1) - x(i-1))/2,将 x(0) 替换为 0,将 x(n+1) 替换为 1。这是三对角线,应该有一个简单的解决方案,但也许你不想要这么无聊的 Voronoi 图;这将是一堆垂直部门。

对于一个看起来更随机的图表,也许是物理学启发的东西:随机放置点,计算Voronoi图,计算每个细胞的面积,使超重细胞对其邻居的点有吸引力,而体重不足的细胞排斥并计算每个点的小增量,重复直到达到平衡。

当您

计算最小生成树并移除最长边时,可以计算 voronoi 镶嵌。然后,mst 子树的每个中心都是 voronoi 图的一个点。因此,voronoi 图是最小生成树的子集。

最新更新