用于计算"N"个圆的交集/并集的Sharir或Aurenhammer确定性算法的实现

RGr*_*rey 7 algorithm math geometry computational-geometry

MI Shamos在他1978年的论文中首次提出了在平面上找到'N'圆盘/圆的交点/并集的问题:

Shamos,MI"计算几何学"博士 论文,耶鲁大学,纽黑文,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,用于多圈联盟区域的PG非常快速算法.Rep.98,Dept.Comput.科学院,纽约大学Courant研究所,1983年.


我一直在寻找上面算法的任何实现,专注于计算几何包,我还没有找到任何东西.由于这些都不值得付诸实践,如果有人能指出我正确的方向,那将是非常好的!

也许构造实体几何(CSG)包具有重叠圆基元的表面区域特征?

bra*_*jam 6

我花了一些时间来研究用于计算一组球的并集的算法 - 正如您所提到的,它是通过使用广义Voronoi图来完成的.

CGAL库有一个实现球联合的包.这比您感兴趣的高一维,并且它不处理交叉点.所以可能没有雪茄.

如果您在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中的圆圈.