1. 程式人生 > >通過CGAL將一個多邊形剖分成Delaunay三角網

通過CGAL將一個多邊形剖分成Delaunay三角網

[toc] # 1. 概述 對於平面上的點集,通過Delaunay三角剖分演算法能夠構建一個具有空圓特性和最大化最小角特性的三角網。空圓特性其實就是對於兩個共邊的三角形,任意一個三角形的外接圓中都不能包含有另一個三角形的頂點,這種形式的剖分產生的最小角最大。 更進一步的,可以給Delaunay三角網加入一些線段的約束條件,使得構建的Delaunay三角網能夠利用這些線段。利用這個特性,可以將一個多邊形剖分成Delaunay三角網,開源工具CGAL就正好提供了這個功能。 # 2. 實現 因為要顯示三角網的效果,所以我在[《使用QT繪製一個多邊形》][linknet1]這篇博文提供的QT介面上進行修改,正好這篇文章提供的程式碼還實現了在QT中繪製多邊形的功能。 關於網格化以及三角網剖分,在CGAL中提供了非常詳盡繁複的解決方案,我這裡選擇了CGAL::refine_Delaunay_mesh_2這個介面,這個介面能夠將多邊形區域構建成一個Delaunay三角網,如果當前的存在三角形不滿足Delaunay,就會在其中補充一些點來滿足Delaunay的相關特性。主要的實現程式碼如下(具體程式碼見文章最後): ```cpp #