C++ 如何在多边形内部构造voronoi图?
我需要一个算法来填充二维非凸多边形,该多边形可能有随机点的孔,然后在其上构建voronoi图。该图应以多边形为边界,算法应在C++ 如何在多边形内部构造voronoi图?,c++,algorithm,boost,voronoi,C++,Algorithm,Boost,Voronoi,我需要一个算法来填充二维非凸多边形,该多边形可能有随机点的孔,然后在其上构建voronoi图。该图应以多边形为边界,算法应在O(n logn)中运行 我的想法是通过测试多边形边界框内的随机点并仅获取多边形内的点来填充多边形,然后在这些点上构建voronoi,然后剪切退出多边形的图的边 问题是,测试随机点并剪裁边是O(n^2) 这可以在boost中实现吗,或者是否有另一个小库,或者其他什么东西?我想,通过“洞”,你可以实现单个闭合多边形的自相交 首先对多边形进行Delaunay三角剖分: 计算线
O(n logn)
中运行
我的想法是通过测试多边形边界框内的随机点并仅获取多边形内的点来填充多边形,然后在这些点上构建voronoi,然后剪切退出多边形的图的边
问题是,测试随机点并剪裁边是O(n^2)
这可以在boost中实现吗,或者是否有另一个小库,或者其他什么东西?我想,通过“洞”,你可以实现单个闭合多边形的自相交
首先对多边形进行Delaunay三角剖分:
- 计算线段之间的截面点;添加这些点,分割线段并重新排列输入,以便在遍历多边形的点时,“内部”始终位于边的同一侧
- 变换多边形中的所有点
- 删除位于多边形外部的三角形。这些将是由自相交创建的凹面和孔。可以通过沿多边形行走并删除位于边外部的所有三角形来识别它们。需要边的连通性,但这是三角剖分的副产品
- 选择一个随机三角形,其中每个三角形被选择的概率与其面积成正比
- 通过在[0,1]中选择
s,在[0,1]
中选择
s+t<1`,在该三角形内选择一个随机位置。你的新观点是:t,并使用
{P} = s * ({N2} - {N1}) + t * ({N3} - {N1})
- 添加您的点并重新调整父三角形和其外接圆包含新点的其他三角形的角度
- 要拾取的三角形集现在已更改