直接摘自百度百科,但願你們能根據下面的介紹稍微理順思路,按需使用,加油!算法
解釋一下:點集的三角剖分(Triangulation),對數值分析(好比有限元分析)以及圖形學來講,都是極爲重要的一項預處理技術。尤爲是Delaunay三角剖分,因爲其獨特性,關於點集的不少種幾何圖都和Delaunay三角剖分相關,如Voronoi圖,EMST樹,Gabriel圖等。Delaunay三角剖分有最大化最小角,「最接近於規則化的「的三角網和惟一性(任意四點不能共圓)兩個特色。
Delaunay三角剖分算法定義
【定義】三角剖分
[1] :假設V是二維實數域上的有限點集,邊e是由點集中的點做爲端點構成的封閉線段, E爲e的集合。那麼該點集V的一個三角剖分T=(V,E)是一個平面圖G,該平面圖知足條件:
1.除了
端點,平面圖中的邊不包含點集中的任何點。
2.沒有相交邊。
3.平面圖中全部的面都是三角面,且全部三角面的合集是散點集V的
凸包。
在實際中運用的最多的三角剖分是Delaunay三角剖分,它是一種特殊的
三角剖分。先從Delaunay邊提及:
【定義】Delaunay邊:假設E中的一條邊e(兩個端點爲a,b),e
若知足下列條件,則稱之爲Delaunay邊:存在一個圓通過a,b兩點,圓內(注意是圓內,圓上最多三點共圓)不含點集V中任何其餘的點,這一特性又稱空圓特性。
【定義】Delaunay三角剖分:若是點集V的一個三角剖分T只包含Delaunay邊,那麼該三角剖分稱爲Delaunay三角剖分。
優化處理:
理論上爲了構造Delaunay
三角網
[2] ,Lawson提出的局部優化過程LOP(Local Optimization Procedure),通常三角網通過LOP處理,便可確保成爲Delaunay三角網,其基本作法以下所示:
1.將兩個具備共同邊的三角形合成一個多邊形。
2.以最大空圓準則做檢查,看其第四個頂點是否在三角形的
外接圓以內。
3.若是在,修正對角線即將對角線對調,即完成局部優化過程的處理。
Delaunay剖分的算法
Delaunay剖分是一種三角剖分的標準,實現它有多種算法。
Delaunay三角剖分算法準則特性
準則:
要知足Delaunay三角剖分的定義,必須符合兩個重要的準則:
一、空圓特性:Delaunay
三角網是惟一的(任意四點不能共圓),在Delaunay三角形網中任一三角形的外接圓範圍內不會有其它點存在。以下圖所示:
二、最大化最小角特性:在
散點集可能造成的三角剖分中,Delaunay三角剖分所造成的三角形的最小角最大。從這個意義上講,Delaunay三角網是「最接近於規則化的「的三角網。具體的說是指在兩個相鄰的三角形構成
凸四邊形的對角線,在
相互交換後,六個內角的最小角再也不增大。以下圖所示:
特性:
如下是Delaunay剖分所具有的優異特性:
1.最接近:以最近的三點造成三角形,且各
線段(三角形的邊)皆不相交。
2.惟一性:不論從區域何處開始構建,最終都將獲得一致的結果。
3.最優性:任意兩個相鄰三角形造成的
凸四邊形的對角線若是能夠互換的話,那麼兩個三角形六個內角中最小的角度不會變大。
4.最規則:若是將
三角網中的每一個三角形的最小角進行升序排列,則Delaunay三角網的排列獲得的數值最大。
5.區域性:新增、刪除、移動某一個頂點時只會影響臨近的三角形。
6.具備
凸多邊形的外殼:三角網最外層的邊界造成一個凸多邊形的外殼。
Delaunay三角剖分算法計算方法
a)Lawson算法
逐點插入的Lawson算法
[3] 是Lawson在1977年提出的,該算法思路簡單,易於編程實現。基本原理爲:首先創建一個大的三角形或多邊形,把全部數據點包圍起來,向其中插入一點,該點與包含它的三角形三個頂點相連,造成三個新的三角形,而後逐個對它們進行空外接圓檢測,同時用Lawson設計的局部優化過程LOP進行優化,即經過交換對角線的方法來保證所造成的
三角網爲Delaunay三角網。
上述基於
散點的構網算法理論嚴密、惟一性好,網格知足空圓特性,較爲理想。由其逐點插入的構網過程可知,遇到非Delaunay邊時,經過刪除調整,能夠構造造成新的Delaunay邊。在完成構網後,增長新點時,無需對全部的點進行從新構網,只需對新點的影響三角形範圍進行局部聯網,且局部聯網的方法簡單易行。一樣,點的刪除、移動也可快速動態地進行。但在實際應用當中,這種構網算法當點集較大時構網速度也較慢,若是點集範圍是非凸區域或者存在內環,則會產生非法三角形。
如左圖所示:當離散點集構成圓環時,Lawson算法產生的非法三角形
離散點集合
Lawson算法產生的三角剖分
正確的三角剖分
b)Bowyer-Watson算法(推薦)
Watson算法的基本步驟是:
一、構造一個超級三角形,包含全部散點,放入三角形鏈表。
二、將點集中的散點依次插入,在三角形鏈表中找出外接圓包含插入點的三角形(稱爲該點的影響三角形),刪除影響三角形的公共邊,將插入點同影響三角形的所有頂點鏈接起來,完成一個點在Delaunay三角形鏈表中的插入。
三、根據優化準則對局部新造成的三角形優化。將造成的三角形放入Delaunay三角形鏈表。
四、循環執行上述第2步,直到全部散點插入完畢。
這一算法的關鍵的第2步圖示以下: