天天看點

多邊形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