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 |