使用在该程序中找到的Voronoi/Delaunay图生成库,它基于Fortune原始实现的算法。将随机点集作为输入数据后,我能够得到以下输出数据:
- 来自Delaunay三角剖分的边列表,这意味着对于每个输入点,我可以看到哪些输入点是其邻居。它们似乎没有特定的顺序。
- 来自Voronoi图的顶点对列表,我可以使用它们一条接一条地绘制Voronoi图。同样,似乎没有特定的顺序。
- 一组未命名的点对,它似乎只是与2相同的列表,但顺序不同。
- Voronoi图中形成的顶点列表,也似乎没有特定的顺序。
以下是使用此库进行测试运行时的数据示例:
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顶点形成的多边形字典,其中每个多边形都以形成它的输入点为索引。最好的情况是,对于每个多边形,这些点将按顺时针顺序排序。有了上述信息,我可以隐式地为每个区域分配数据,如有必要,为每个角分配数据,告诉哪些区域共享边(使用Delaunay边),并相应地进行分析。
简而言之,如何利用可用数据组合一个字典,在其中键是输入点之一,由该键索引的数据是形成周围多边形的Voronoi顶点列表?或者说,这些信息是否在我所获得的数据中某些地方隐含着?