Algorithm 与Voronoi图算法相混淆(财富和财富扫描线)

Algorithm 与Voronoi图算法相混淆(财富和财富扫描线),algorithm,computational-geometry,voronoi,Algorithm,Computational Geometry,Voronoi,我正在实现Voronoi图,以便在地图中直观地找到最近的位置。现在,我只想在画布中使用整数坐标(x,y)来实现这一点 问题是——我真的对这个算法感到困惑。我读了《计算几何》一书,《财富算法的更多理论》。我现在真的很困惑。当我开始编写代码时,它对我来说似乎非常复杂 请告诉我voronoi图的非常简单的实现(使用给定的坐标)。请建议我使用简单的java或python或scheme代码,最好不要使用哈希、多线程、Delaunay、花式颜色等 在没有多线程或散列映射的情况下,使用Fortune算法实现V

我正在实现Voronoi图,以便在地图中直观地找到最近的位置。现在,我只想在画布中使用整数坐标(x,y)来实现这一点

问题是——我真的对这个算法感到困惑。我读了《计算几何》一书,《财富算法的更多理论》。我现在真的很困惑。当我开始编写代码时,它对我来说似乎非常复杂

请告诉我voronoi图的非常简单的实现(使用给定的坐标)。请建议我使用简单的java或python或scheme代码,最好不要使用哈希、多线程、Delaunay、花式颜色等


在没有多线程或散列映射的情况下,使用Fortune算法实现Voronoi图难道不可能吗?

Voronoi图只是一个图:不是数据结构或算法。我认为它不适合在集合中找到最近的点。构建图表不会改变问题的渐进复杂性,尽管它会使问题更复杂,内存效率更低。你最好把你的观点放在四叉树或类似的东西上。如果您正在寻找算法,那么您试图解决的问题的名称就是“空间索引”。“最近点”是四叉树和其他空间索引解决的问题之一。

它看起来很复杂,因为它很复杂!您不需要哈希表或线程,但需要一个优先级队列(通常作为堆实现,在java和python标准库中都可用)和一个允许您在O(log n)中进行范围查询的树(标准库中的那些不太合适,因为你无法了解它们的内部结构;我建议实现一个)。而且算法本身仍然很复杂


你能运行一个外部程序吗?如果是的话,我真的建议你把繁重的工作交给Voronoi,它非常擅长Voronoi图。遗憾的是,它比我们任何一个都要好。

我去年看了很多Voronoi图,我当然能理解其中的混乱。Voronoi图有一些实现算法。请看一些,还有。正如twic提到的,Qhull当然值得一看-MATLAB使用它生成Voronoi图和Delaunay三角剖分以及类似的有趣的东西。

这里是Ruby和C的另一个实现,包括可视化:


很明显,Form的算法并不是很容易实现的。特别是如果你使用时间轴,你不会说你想要用什么编程语言来实现它。如果它是C++,你可以找到Andriy Sydorchuk为项目所做的工作:Andriy的实现是基于库的。Voronoi实现和升压都是基于库的。多边形依赖整数坐标,以提供数值稳健性

BoostCon的视频讲座很好地解释了这个想法、问题和陷阱

与这个Voronoi项目相关的很多讨论。发生在2010/2011年的Boost邮件列表中。

与《财富》杂志的一篇原始论文有关。由于《财富》杂志处理数据结构的方式,它的实现非常难以遵循

看起来更现代

需要一些阅读

本文对该算法的描述可以说比《财富》在原著中的描述更清晰

有关于如何处理一个站点和一个顶点的很棒的幻灯片(10,11)

有一个()可以帮助您可视化算法

A也描述了算法

列出了更多的实现

是“二维优质网格生成器和Delaunay三角剖分器”


在Voronoi图上有一个简单的例子

我理解你的意思。但我必须自己做评估。因此,我在寻找一些简单的实现,我可以研究并修改/添加到我的设计中。他试图描绘最近的邻居,将Voronoi图直观地覆盖在地图上,以便人们一眼就能看到哪个X最接近to兴趣点。Voronoi图用于解决最近邻问题:Voronoi图不仅仅是一个图。它是一个平面图(边不相交的平面图),具有顶点和双向边。如果您能解释该实现是如何工作的或会有所帮助,那就太好了,因为最初的问题提到了Java或Python的使用,并且该实现是在Ruby中实现的。