在尝试为 Voronoi 和Laguerre 图实现算法的过程中,我意识到我需要使用带有已知 Voronoi(或幂)图的点(或圆)配置来验证我的实现是否正常工作。
我在寻找具有已知图表的数据集方面没有成功。有谁知道这些图表的好来源?
在尝试为 Voronoi 和Laguerre 图实现算法的过程中,我意识到我需要使用带有已知 Voronoi(或幂)图的点(或圆)配置来验证我的实现是否正常工作。
我在寻找具有已知图表的数据集方面没有成功。有谁知道这些图表的好来源?
最简单的点集是规则的点网格。它们看起来很无辜,但在 Voronoi/Laguerre 代码中最难处理,因为 Delaunay 三角剖分不是唯一的,因此它们可用于检测代码中的错误。它们可以通过改编的几何谓词来处理(参见我关于几何谓词的出版物 [6] 和此处的参考资料)。
为了在 2D 和 3D [1] 中检测我的 Voronoi/Laguerre 图表代码中的错误,我使用了以下方法:
计算一组点集(随机)的 Voronoi/Laguerre 图,并测试您的代码输出是否满足空球属性。对于 Voronoi,这意味着每个 Delaunay 三角形的外接圆 (2d) 或球体 (3d) 不包含任何点。对于拉盖尔来说,也有类似的情况。
使用您信任的代码 [1](如果您信任我)、[2]、[3](我信任他们)计算随机点集的 Voronoi/Laguerre 图,并与您的代码输出进行比较;
添加到点集困难的列表中。困难的数据集是那些具有同圈(2d)/同球(3d)点的数据集,例如我之前提到的规则网格。请注意,当您获得同圈/同圈点时,Delaunay 三角剖分是非唯一的(那么与其他代码相比,您的代码的输出可能会有所不同);
当所有权重都设置为零时,拉盖尔图是一个 Voronoi 图,然后您可以比较算法的输出(如果它们不匹配,那么两者可能都是错误的,就像发生在我身上一样)。
我强烈建议使用持续集成平台 [4] 进行自动非回归测试。Voronoi/Laguerre 代码不是很复杂(大约 300 行代码),但有一些陷阱/微妙之处,特别是在处理共循环点的谓词中。自动日常测试(进行 1.、2.、3.、4. + Valgrind [5] 内存测试)允许检测我自己代码中的几个错误。
[1] 地理:http: //alice.loria.fr/software/geogram/doc/html/index.html
[2] CGAL:http ://www.cgal.org
[3] 泰根: http ://wias-berlin.de/software/tetgen/