天天看点

多边形bool操作效率对比 PolyBoolean和gpc是比较高效的算法。但是严格意义上并不能用他们。 PolyBoolean

http://www.complex-a5.ru/polyboolean/comp.html 一文比较了2维多边形bool操作的效率。

根据benchmark,

PolyBoolean和gpc是比较高效的算法。但是严格意义上并不能用他们。

PolyBoolean

以有符号整数的形式表示点坐标,这样当然高效,对于浮点型点坐标,通过把浮点scale到整型进行计算。

目前 Polyboolean有c++和c#版本。地址:http://www.complex-a5.ru/polyboolean/index.html

以下是一些数据:

Library name Principal author Language
Boolean (v. 1.34) Klaas Holwerda C++
Boolean Operations On Polygons (v. 2.0) (BOPS) Matej Gombosi C++
CGAL (r. 1.1) Joint project of 7 sites C++
Clippoly (pl. 7) Klamer Schutte C++
Constructive Planar Geometry (CPG) Dave Eberly C++
GPC (v. 2.22) Alan Murta C
LEDA (v. R-3.6.1) Max-Planck-Institut fuer Informatik C++
PolyBoolean v0.0 Michael Leonov, Alexey Nikitin C++

Capabilities

Library AND SUB OR XOR HOLES KH I SI DV KH O
Boolean + + + + + + - + +
BOPS + - + - + - - - +
CGAL + + + - - - - - -
Clippoly + + - - - - - - -
CPG + + + + + - - + -
GPC + + + + + + + + -
LEDA + + + + + - - + -
PolyBoolean + + + + + + - +

Speed

vc6.0编译,PC机器, Pentium II (233 MHz) and 96Mb RAM。多边形数据有字体的等高线生成。测试程序运行5次每个bool操作。测试结果如下:

N:所有多边形的顶点。时间单位为妙(s),粗体位最佳数据。

Library N=3885 N=7076 N=20190 N=69839 N=174239
Boolean 1.084 1.773 5.923 23.219 65.927
Clippoly 15.482 51.965 487.942 ... ...
GPC 0.160 0.381 8.570 64.463 133.670
LEDA 0.806 1.422 3.801 16.636 ...
PolyBoolean 0.158 0.255 0.721 3.532 16.011