如何根據離散點自動繪製等值線(等高線)之 三角形法

轉自:http://blog.csdn.net/lifei/article/details/3563

自動繪製等值線的方法從技術方向上看可以分爲兩大類,插值和曲線擬合.其中曲線擬合總的來說效果不如插值算法經典和應用廣泛,效果也較遜色.這裏着重介紹插值算法.

其中插值算法中,按照方式不同分爲離散點客觀化和三角網方式.兩者區別在於三角網計算主要在生成三角網過程,省去了插值到格點的過程.而客觀分析過程則是將離散點分析到格點後再內插到細網格,然後大多利用追蹤法生成等值線,也有在這裏再使用曲線擬合.

1、三角形算法

a、首先生成delaunay三角形,這一點在我的帖子”delaunay triangulation之豐衣足食“內有源程序,大家可以參考。

b、隨後需要在三角形的邊上插補等值點。要確定某個三角形的邊上是否有等值點,需要進行判斷和處理。注意:如果某原始數據點和等值線值相同,將該點改變一個微量。如果一個三角形三頂點的值相同則各邊無等值點。如果一個三角形的任意邊兩端點(A、B〕的Z值(Za、Zb)滿足滿足(Zd-Za)*(Zd-Zb)<0,其中Zd代表等值線的值,則該邊必有等值點,其平面位置是Xd=Xa+(Xb-Xa)*(Zd-Za)/(Zd-Za) ,  Yd=Ya+(Yb-Ya)*(Zd-Za)/(Zb-Za)。每個三角形上不可能三邊都有同值的等值點,另一邊上必定有同值的等值點。

c、等值點的追蹤。

爲了能將內插的等值點順序追蹤排列,繪出等值線,還必須找出相互重疊的環形網內所計算的等值點間的平面位置關係。因每個環形網都是由多個三角形組成的,我們先簡單分析一下單個三角形中存在等值點的情況。由於不必考慮等值線穿過端點,如果一個三角形的邊上存在等值點的話,只可能在某兩條邊上存在等值點,而不可能三條邊上同時都有。也就是說,只要三角形一邊上存在等值點,則其餘的兩條邊中必有一邊存在等值點。
  根據上面的約定,我們再研究等值線穿過任一環形網中兩條及兩條以上相鄰的徑邊時,可能出現的幾種情形:
  ① 等值線不通過環形網的界邊。在這個環形網中,必然所有的徑邊上都存在等值點,如果這個環形網由非邊界點聯結而成,內插的等值點就可順序連接爲一條閉合曲線(圖5(a));若此環形網由邊界點聯成,那麼這些等值點則連成一條開口曲線(圖5(b))。
  ② 等值線通過環形網的界邊,且次數不超過兩次。這是最常見的一種情形,如圖5(c)、5(d)所示。相鄰徑邊上內插的等值點順序排列,點數至少爲兩個,其起點爲環形網的入口點,終點爲環形網的出口點。
  ③ 等值線四次通過環形網的界邊。環形網中內插的等值點分爲兩部分順序排列,每個部分都包括一個入口點和一個出口點,這個網所在的位置應該是地形的鞍部

由於離散點環形聯網是沿同一方向(逆時針)進行的,環形網中相鄰徑邊上內插的等值點所排列的順序,也相應圍繞中心點位逆時針旋轉。從對圖形的分析中,我們還注意到,如果等值點不是位於邊界上的話,那麼一個環形網的入口點,必然是另一個環形網的入口點;一個環形網的出口點,也必然是另一個環形網的出口點;而內插入口點(或出口點)的徑邊的兩個端點,就是聯結這兩個環形網的中心點。利用這個原理,我們就可以成功地設計出等值線的追蹤方案,且在追蹤等值線時,只需將各環形網中內插的等值點進行單向比較,即入口點對入口點比較,出口點對出口點比較。  聯網結束後,凡是沒能聯成閉合環形網的離散點,即爲繪圖區域的邊界點,而在兩個邊界點連接的邊上內插的等值點,就是開曲線的線頭。找到線頭後,根據上述原理,就可順序追蹤出各條開曲線的全部等值點。對於閉曲線來說,任一環形網中內插等值點中的起點都可作爲線頭,按上述方法追蹤,直至又回到該點爲止。等值線追蹤完成後,即可進行曲線的光滑輸出。目前,常用的是樣條插值。這方面的例子很多,不再詳述。

發佈了2 篇原創文章 · 獲贊 34 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章