有一种非常简单的方法可以创建一个近似的Voronoi图VD对于每个需要在VD中定义一个单元的s
(二维平面),你在一个圆锥体的s
处以恒定的斜率和一定的高度作为中心,然后你从上面看到圆锥体(所有尖峰都是可见的)景观。满足(投影到2D平面)是(近似的)Voronoi图。
(Image Source)
当您在意见中的要求,以获得实际的边缘数据似乎不那么容易。但是可能有一些图形例程通过相交圆锥来生成它们。
另一种方法是计算给定点集的Delaunay三角剖分。这个related post中引用了一些实现(也提到了简单的近似值)。然后你计算你的三角测量的双重图,你就得到了Voronoi图。 (双图表示对于三角剖分中的每个边缘AB
的每一个边缘,VD中存在一个边缘,平分两个顶点A
和B
之间的空间,并且对于每个三角形,在双边相遇的VD处存在顶点。) Othwerwise还有许多C#
Voronoi实现:Unity-delaunay,但正如你所提到的使用Fortune方法。
如果你想自己的代码都可能在O(n^2)
时间计算点用蛮力三角为n
点。然后应用圈内测试和edge flips。也就是说,对于每个三角形t(abc)
创建一个由t
三个顶点定义的圆C
。然后检查你的点的另一点d
是否在C
内。如果是,则翻转t
中的边缘,并在d
的三角形中形成边缘。该翻转完成,直到所有三角形满足空圆属性(德劳内条件)。再次以蛮力将需要O(n^2)
时间。然后你可以计算上面提到的双图。
(Image Source)
来源
2017-07-27 06:38:51
gue
所以,做你真正需要的几何精确Voronoi图或者是像素近似正常,因为你提到的‘风景’? – gue
的近似绝对是好的。虽然这将是不错的顶点或边的数据,这样我就可以用它来生成一个网格。谢谢GUE! – Komm
的可能的复制[最简单的Voronoi图的算法来实现?(https://stackoverflow.com/questions/973094/easiest-algorithm-的-维诺 - 图对实施) – Bytemain