- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
使用发现的 voronoi/delaunay 图生成库 in this program ,它基于 Fortune 的 his algorithm 的原始实现,以一组随机点作为输入数据,我能够得到以下输出数据:
以下是使用此库对我的程序进行测试运行的数据示例:
Input points:
0 (426.484, 175.16)
1 (282.004, 231.388)
2 (487.891, 353.996)
3 (50.8574, 5.02996)
4 (602.252, 288.418)
Vertex Pairs:
0 (387.425, 288.533) (277.142, 5.15565)
1 (387.425, 288.533) (503.484, 248.682)
2 (277.142, 5.15565) (0, 288.161)
3 (387.425, 288.533) (272.213, 482)
4 (503.484, 248.682) (637.275, 482)
5 (503.484, 248.682) (642, 33.7153)
6 (277.142, 5.15565) (279.477, 0)
Voronoi lines?:
0 (279.477, 0) (277.142, 5.15565)
1 (642, 33.7153) (503.484, 248.682)
2 (503.484, 248.682) (637.275, 482)
3 (387.425, 288.533) (272.213, 482)
4 (277.142, 5.15565) (0, 288.161)
5 (387.425, 288.533) (503.484, 248.682)
6 (277.142, 5.15565) (387.425, 288.533)
Delaunay Edges:
0 (282.004, 231.388) (487.891, 353.996)
1 (602.252, 288.418) (487.891, 353.996)
2 (426.484, 175.16) (487.891, 353.996)
3 (426.484, 175.16) (602.252, 288.418)
4 (50.8574, 5.02996) (282.004, 231.388)
5 (426.484, 175.16) (282.004, 231.388)
6 (50.8574, 5.02996) (426.484, 175.16)
Vertices:
0 (277.142, 5.15565)
1 (503.484, 248.682)
2 (387.425, 288.533)
3 (0, 288.161)
4 (272.213, 482)
5 (637.275, 482)
6 (642, 33.7153)
7 (279.477, 0)
虽然如果我只需要绘制 Voronoi 和 Delaunay 图,上述数据就足够了,但对于我尝试使用这些图进行的实际工作来说,这些信息还不够。 我需要的是一个由 Voronoi 顶点形成的多边形字典,由每个多边形围绕的输入点索引。最好,对于每个多边形,这些点将按顺时针顺序排序。 p>
有了以上信息,我可以隐式地为每个区域分配数据,必要时将数据分配给角,判断哪些区域共享边(使用 Delaunay 边),并进行相应的分析。
简而言之,我如何使用可用的数据来组合一个字典,其中键是输入点之一,由该键索引的数据是 Voronoi 顶点的列表形成周围的多边形? 或者,该信息是否隐含在我提供的数据中?
最佳答案
Fortune 的算法为 O(n log n) - 但如果您尝试按照 Alink 建议的蛮力方式重建细胞,您的代码将为 O(n^2)。
我的回答的出发点是您用来生成单元格的不是库,而只是 a class written to neatly wrap up the code originally presented by Fortune himself ,实际上并不是一个成熟的库。所以,作者其实并没有预料到你的需求,虽然你想要的信息已经计算出来了,但是却无法访问。
在内部,您的输入点存储为“站点”结构的实例,算法继续创建 half-edges ,每个都维护一个引用“顶点”它是指向它所包含的站点的指针。沿着半边行走,您自然会绕过封闭的站点——这正是您所需要的。
要访问这些数据,我建议修改或扩展 VoronoiDiagramGenerator 类;我会通过创建一个哈希表来做到这一点,其中 Site 指针作为键,单个 HalfEdge 指针作为值。然后,修改 generateVoroni 方法,在调用 voronoi 之后立即插入新代码:
For each HalfEdge in ELHash
Get table entry for current half edge's Site
If site in table has null HalfEdge reference
set current HalfEdge reference
End If
End For each
...还有你的字典。那个单一的半边将允许您“走”包围相关站点的多边形的周边,我认为这是您所要求的。您的下一个问题将是有效地发现 哪个 多边形包含一些新数据点 - 但这是另一个问题 :-)。我希望你会考虑分享你完成的类(class)——它应该比基础类(class)更有用。
编辑:这是一个很好的演示文稿,用图片描述了上述所有内容:http://ima.udg.es/~sellares/ComGeo/Vor2D_1.ppt :
这里有一个 C# 实现,可以帮助您检索字典,如上面所建议的:http://www.codeproject.com/Articles/11275/Fortune-s-Voronoi-algorithm-implemented-in-C
关于c++ - 如何从此 Voronoi 图数据中获取单元格字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441007/
我有一个让我想起 Voronoi 的问题,但我希望我的变体能让我避免使用 Voronoi 算法,并更快地写一些东西。 这是我在 Paint 中制作的一个可怕的图像来说明我的问题: 假设我有一个 map
上午下午 或晚上。 # Reproducible data df % filter(years == i) # # plot % filter(years == i)
我正在生成一个简单的 2D Voronoi 曲面分割,使用 scipy.spatial.Voronoi功能。我使用点的随机二维分布(参见下面的 MCVE)。 我需要一种方法来遍历每个定义的区域(由 s
我现在花了很多时间试图从 scipy.spatial.Voronoi 图中获取边,但无济于事。这是主要文档: http://docs.scipy.org/doc/scipy-dev/reference
我正在使用 voronoi 镶嵌。我有不同的多边形代表分割中的区域。 下面的点用于绘制图中的曲面分割。 tessdata [,1] [,2] 1 -0.4960583 -0.35
我有一个可折叠的力导向布局,我从 here 中引用了它. 我修改了代码,在图中的每个节点后面添加了 Voronoi 单元。目前,它看起来像是在工作,因为我可以看到 Voronoi 单元格根据折叠状态出
我创建了一个无法正常工作的 voronoi 代码。 我真的想不出错误!!! 我调用的函数是: void Voronoi( const int NbPoints, const int h
给定 voronoi 边列表,如何在合理的时间内获得每个单元格的质心?请注意,我只有 Voronoi 图的边,但我必须确定质心。 Voronoi 图是给定 Delaunay 三角剖分构造的,因此三角剖
到目前为止,我有一个程序采用一组随机点、站点,并围绕这些点形成适当的 Voronoi 图,表示为角和边的图形。它还为我提供了 Delaunay 三角剖分作为另一个以所有站点为节点的图形(尽管我不知道这
我正在寻找一种简单的(如果存在的话)算法来查找球体表面上一组点的 Voronoi 图。源代码会很棒。我是 Delphi 人(是的,我知道...),但我也吃 C 代码。 最佳答案 2016 年 7 月更
我需要生成一个 Voronoi diagram围绕多边形内部的凹(非凸)。我在网上找过方法,但我一直无法弄清楚如何做到这一点。基本上,我生成点的凸包,计算对偶点并在这些点之间构建边缘网络。然而,当遇到
我正在尝试使用 scipy.spatial.Voronoi 计算 Voronoi 图每个区域的确切边界,前提是所有点都在预定义的多边形内。例如,使用此 documentation 中的示例. 如果我需
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我正在使用 Voronoi 图进行图像处理 ( procedurally generated stippling )。 为了做到这一点,我需要创建一个元组(x,y 像素位置)列表(coords_wit
我有两个 geopandas 数据框 dfMd 和 centers。 dfMd 由多边形组成,而 centers 由点组成。 Here文件的链接。 f,ax=plt.subplots() dfMd.p
我正在使用 scipy.spatial用于 Voronoi 图的可视化。但是,这里使用的距离度量是欧几里得 (L2)。我正在我的 Voronoi 图上寻找一种曼哈顿 (L1) 度量方式。有没有一种简单
据我了解,R 缺少一种方法来以空间独占的方式缓冲多边形,以保留相邻多边形的拓扑结构。所以我正在试验一种生成原始多边形顶点的 voronoi 多边形的方法。除了 voronoi 生成中的明显错误外,结果
我一直在尝试为各州创建自定义区域。我想通过使用点的影响区域来填充状态图。 下图代表了我一直在尝试的东西。左图显示了点,我只想像右图一样填充所有区域。我使用了 Voronoi/Thiesen,但它在区域
我想弄清楚如何为两个不同的点绘制 Voronoi 图。 有人可以帮我吗。 谢谢 最佳答案 如我的图片所示,你应该只连接你的点,然后画一条穿过中心的线,与该线段正交。 关于draw - 如何绘制两个不同
我正在尝试在固定地理区域内为一组点创建 Voronoi 多边形(又名 Dirichlet 镶嵌或泰森多边形)。但是,我无法在 R 中找到一种将多边形绑定(bind)在 map 边界内的方法。我的主要目
我是一名优秀的程序员,十分优秀!