M. I. Shamos在他1978年的论文中首次提出了在平面上找到'N'圆盘/圆的交点/并集的问题:
Shamos,M。I.“计算几何学”博士论文,耶鲁大学,纽黑文,CT 1978。
从那时起,1985年,Micha Sharir提出了O(n log2n)时间和O(n)空间确定性算法,用于光盘交叉/并集问题(基于修改的Voronoi图):Sharir,M。交叉点和最近 - 对一组平面光盘配对问题。 SIAM .J Comput。 14(1985),pp.448-468。
1988年,Franz Aurenhammer使用功率图(Voronoi图的概括)提出了一种更有效的O(n log n)时间和O(n)空间算法用于圆交叉/并联算法:Aurenhammer,F。改进的光盘算法和球使用电源图。 Journal of Algorithms 9(1985),pp.151-161。
1983年早些时候,Paul G. Spirakis还提出了一种O(n ^ 2)时间确定性算法和一种O(n)概率算法:Spirakis,P.G。多圈联盟区域的快速算法。 Rep.98,Dept。Comput。科学,纽约大学Courant研究所,1983年。
我一直在寻找上述算法的任何实现,专注于计算几何包,我还没有找到任何东西。由于这些都不值得付诸实践,如果有人能指出我正确的方向,那将是非常好的!
也许构造实体几何(CSG)包具有重叠圆基元的表面区域特征?
答案 0 :(得分:6)
我花了一些时间来研究用于计算一组球的并集的算法 - 正如你所提到的,它是通过使用广义的Voronoi图来完成的。
CGAL图书馆有a package that implements a union of balls。这比您感兴趣的高一维,并且它不处理交叉点。所以可能没有雪茄。
如果您在2维工作,问题相当于在3维中找到凸包。您可以使用CGAL或其他包装中的凸包外壳。
如果您正在寻找您提到的特定算法的实现,我无法帮助您。但是,如果您只是想找到能够轻松计算联合和交叉点的功率图,那么使用3D凸包算法可能比您想象的更容易。
很抱歉半个问题,但我们也可以从某个地方开始,看看你有多大的灵活性。
编辑:还有一个用于2D电源图的CGAL包:http://www.cgal.org/Manual/last/doc_html/cgal_manual/Apollonius_graph_2/Chapter_main.html。
此外,@ RGrey找到了一个CGAL库,用于计算广义多边形的2D布尔值,包括http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/Boolean_set_operations_2/Chapter_main.html处的圆圈。
答案 1 :(得分:1)
CGAL中没有2D功率图实现。上面建议的链接(http://www.cgal.org/Manual/last/doc_html/cgal_manual/Apollonius_graph_2/Chapter_main.html)用于加法加权Voronoi图,它使用euclid + weight,而不是euclid ^ 2 +重量(如Power Diagrams那样)。