本發(fā)明涉及石油勘探技術(shù)領(lǐng)域,特別涉及一種生成等值線多邊形的方法。
背景技術(shù):
等值線是用于連接各類等值點(如高程、溫度、降雨量、污染或大氣壓力)的線。線的分布顯示表面值的變化方式。值的變化量越小,線的間距就越大。值上升或下降得越快,線的間距就越小。
以一組相等數(shù)值的連線表示制圖對象數(shù)量、特征的地圖。簡稱等值線圖。如年平均氣溫圖、年降水量圖。它是專題地圖的重要圖型,最先用于描述地形。常見的有表現(xiàn)地勢起伏和地貌結(jié)構(gòu)的等高線圖與等深線圖;表現(xiàn)氣溫、水溫、地溫變化的等溫線圖;表現(xiàn)大氣降水量變化的等降水量線圖;表現(xiàn)地磁、地震變化的等磁偏線圖、等磁力線圖、等震線圖。另外,還有等壓線、等風(fēng)速線、等日照線、等云量線、等濕度線、等密度線、等透明度線、等鹽分含量線、等時線等圖。
從計算機(jī)圖形學(xué)的角度講,等值線圖具有以下性質(zhì):
1)等值線通常是一條光滑連續(xù)曲線;
2)對于給定的某個高度值Zc,相應(yīng)的等值線數(shù)量不止一條;
3)由于定義域是有界的,等值線可能是閉合的,也可能是不封閉的;
4)等值線一般不相互交錯。
其中,不封閉的等值線成為開放等值線。對于指定邊界區(qū)域,開放等值線與邊界線相交。
等值線地圖的編制,通常是在地理底圖上標(biāo)出制圖對象的相對點位(測站)的數(shù)值,然后把數(shù)值相等的點聯(lián)成圓滑曲線,勾畫出制圖對象的空間結(jié)構(gòu)特征。等值線地圖通常輔以分層設(shè)色,以提高地圖的直觀效果。如通常等高線圖以紅色表現(xiàn)地勢高點如山峰丘陵、藍(lán)色或綠色表示地勢低點如河流湖泊,中間等值線填充過渡顏色突出地勢起伏及其間的漸變關(guān)系,更形象地表現(xiàn)地形的區(qū)域變化。
除此之外,根據(jù)工作需要,等值線圖還要進(jìn)行一些面積統(tǒng)計,如計算某相鄰等值線區(qū)域面積,統(tǒng)計指定值范圍[Zc1,Zc2]內(nèi)所有相關(guān)區(qū)域分布。
目前實現(xiàn)上述兩種需求的技術(shù)主要有:
1.背景網(wǎng)格法。對等值線散點網(wǎng)格化,每一個矩形網(wǎng)格單元根據(jù)結(jié)點平均值填充對應(yīng)顏色,生成帶顏色的網(wǎng)格曲面??梢詫崿F(xiàn)等值線間的顏色過渡。通過統(tǒng)計等值線間區(qū)域的網(wǎng)格數(shù)量,計算該區(qū)域面積。
該方法的缺陷在于:1)網(wǎng)格與原始等值線不完全吻合。由于網(wǎng)格化算法本身的特點,原始點與網(wǎng)格相同位置的插值點存在一定的誤差,造成統(tǒng)計結(jié)果不準(zhǔn)確。
2)邊界處形成鋸齒,影響圖形效果。
2.等值線間多邊形法。相鄰兩條或多條等值線間生成多邊形,對多邊形顏色填充,計算多邊形面積。
方法2不足:
1)需要人工連接相鄰等值線端點,與邊界一起組成區(qū)域多邊形,操作繁瑣。
2)對于相鄰開放等值線組成的多邊形區(qū)域中包含閉合等值線,或多個閉合等值線互相嵌套的情況,每次填充顏色時要與其它關(guān)聯(lián)多邊形比較,先填充外圈,再填充內(nèi)圈;計算面積時也要由外部區(qū)域面積減去閉合等值線面積。多邊形不具有獨立性,計算和編輯復(fù)雜。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的旨在至少解決所述技術(shù)缺陷之一。
為此,本發(fā)明的目的在于提出一種生成等值線多邊形的方法。
為了實現(xiàn)上述目的,本發(fā)明的實施例提供一種生成等值線多邊形的方法,包括如下步驟:
步驟S1,選取等值線圖G,其中,所述等值線圖G包括:邊界曲線集、閉合等值線集、開放等值線集;
步驟S2,從所述等值線圖G中,求取所有開放等值線與邊界線的交點,存入交點鏈表C,并根據(jù)交點到邊界起點的距離進(jìn)行排序;
步驟S3,根據(jù)排序結(jié)果,以每一個交點與其后一個交點的線段為起始,追蹤包括該線段在內(nèi)的多邊形,生成多邊形鏈表P;
步驟S4,將所述多邊形鏈表P中的元素依次與閉合等值線集中的元素進(jìn)行比較,查找包含關(guān)系,構(gòu)建包含關(guān)系樹T;
步驟S5,利用所述關(guān)系樹T生成多個孔洞型多邊形或常規(guī)多邊形;
步驟S6,輸出所述多邊形,并根據(jù)多邊形區(qū)域?qū)傩灾祵Σ煌瑢傩远噙呅芜M(jìn)行區(qū)分。
進(jìn)一步,在所述步驟S2中,將交點存入所述交點鏈表C,其中,所述每個交點在所述交點鏈表C中存儲有以下信息:對每個交點標(biāo)記當(dāng)前等值線序號,交點沿邊界線到邊界起點的距離,該交點為等值線的頭部或尾部。
進(jìn)一步,在所述步驟S3中,根據(jù)排序結(jié)果,依次求取相鄰兩個交點的線段為邊界的單個多邊形,并將上述計算得到的多個多邊形存入多邊形鏈表P。
進(jìn)一步,在所述步驟S4中,將所述多邊形鏈表P中的元素依次與步驟S1中的閉合等值線集中元素比較,查找如下包含關(guān)系:如果所述多邊形鏈表中的一個多邊形內(nèi)部包含所述閉合等值線集中的一個或多個閉合等值線,則構(gòu)建包含關(guān)系樹T。
進(jìn)一步,所述關(guān)系樹T為多叉樹,其根節(jié)點為對應(yīng)的多邊形,其他結(jié)點分別代表一根閉合等值線,根節(jié)點外,每一個結(jié)點等值線均包括在其父節(jié)點多邊形內(nèi)部。
進(jìn)一步,在所述步驟S5中,所述利用關(guān)系樹T生成多個孔洞型多邊形或常規(guī)多邊形,包括:
首先由根結(jié)點與其子節(jié)點生成多邊形pk1,然后遍歷其子節(jié)點,如果任一節(jié)點包含子節(jié)點,則該節(jié)點與其所有子節(jié)點生成孔洞型多邊形pki,若該節(jié)點不包含子節(jié)點,則直接返回該節(jié)點上的多邊形,依次類推,生成該樹中所有多邊形。
進(jìn)一步,在所述步驟S6中,所述根據(jù)多邊形區(qū)域?qū)傩灾祵Σ煌瑢傩远噙呅芜M(jìn)行區(qū)分,包括如下步驟:對不同屬性的多邊形采用不同的顏色進(jìn)行填充,以示區(qū)別。
根據(jù)本發(fā)明實施例的生成等值線多邊形的方法,由邊界與開放等值線,閉合等值線共同生成一系列相互完全獨立的實心或具有孔洞的多邊形,每一個多邊形代表相鄰等值線之間的唯一區(qū)域,不存在多邊形內(nèi)部包含其他閉合線的情況。由于生成的每個多邊形都具有獨立性,在顯示填充和計算面積時,無需考慮其它多邊形,只需對當(dāng)前多邊形進(jìn)行操作。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1為根據(jù)本發(fā)明實施例的生成等值線多邊形的方法的流程圖;
圖2a和圖2b為根據(jù)本發(fā)明實施例的某等值線分布圖;
圖3為根據(jù)本發(fā)明實施例的將曲線的隊列連接成完整多邊形的示意圖;
圖4為根據(jù)本發(fā)明實施例的多邊形關(guān)系樹構(gòu)建及孔洞多邊形生成的示意圖;
圖5為根據(jù)本發(fā)明實施例的關(guān)系樹的示意圖;
圖6為根據(jù)本發(fā)明實施例的孔洞型多邊形的形態(tài)與填充效果的示意圖;
圖7為根據(jù)本發(fā)明實施例生成的等值線多邊形結(jié)果的示意圖。
具體實施方式
下面詳細(xì)描述本發(fā)明的實施例,實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
如圖1所示,本發(fā)明實施例的生成等值線多邊形的方法,包括如下步驟:
步驟S1,選取等值線圖G。
其中,等值線圖G包括:邊界曲線B{b1,b2,…,bm},閉合等值線集O{o1,o2,…,or},開放等值線集L{l1,l2,…,ln}。其中,m為邊界點的個數(shù),r為閉合等值線的條數(shù),n為開放等值線條數(shù)。
步驟S2,從等值線圖G中,求取所有開放等值線與邊界線的交點,存入交點鏈表C,并根據(jù)交點到邊界起點的距離進(jìn)行排序。
具體地,求取每條開放等值線與邊界的交點,存入交點鏈表C{c1,c2,…,c2n}。其中,每個交點在交點鏈表C中存儲有以下信息:每一個交點ck中中都標(biāo)記了當(dāng)前等值線序號ck.k,交點沿邊界線到邊界起點的距離ck.s,該交點為等值線的頭部還是尾部ck.bTail。
然后,按照交點到邊界起點的距離ck.s由小到大對鏈表C進(jìn)行排序。
步驟S3,根據(jù)排序結(jié)果,以每一個交點與其后一交點的線段為起始,追蹤包括該線段在內(nèi)的多邊形,生成多邊形鏈表P。
具體地,根據(jù)排序結(jié)果,依次求取相鄰兩個交點的線段為邊界的單個多邊形,并將上述計算得到的多個多邊形存入多邊形鏈表P。以(c1,c2)線段為起點,追蹤序號為c1.k,c2.k的等值線之間的多邊形。
按照交點鏈表中的順序依次求取以c2-c3),…,(c2n-1,c2n),(c2n,c1)線段為邊界的單個多邊形,存入多邊形鏈表P{p1,p2,…,pw},w為開放等值線多邊形個數(shù)。對每一個追蹤過的線段(ck,ck+1),標(biāo)記為已查找,ck.bTraced=true。
步驟S4,將多邊形鏈表P中的元素依次與閉合等值線集中的元素進(jìn)行比較,查找包含關(guān)系,構(gòu)建包含關(guān)系樹T。
具體地,將多邊形鏈表P中的元素依次與步驟S1中的閉合等值線集O中元素比較,查找如下包含關(guān)系:如果多邊形鏈表中的一個多邊形內(nèi)部包含閉合等值線集中的一個或多個閉合等值線,則構(gòu)建包含關(guān)系樹T。
多邊形鏈表P中的元素依次與閉合等值線集O中元素比較,查找包含關(guān)系。若多邊形pk內(nèi)部包含閉合等值線OK{ok1,ok2,…,okr},則構(gòu)建包含關(guān)系樹T。
在本發(fā)明的一個實施例中,T為多叉樹,其根節(jié)點為pk,其他結(jié)點分別代表OK中一根閉合等值線。除根節(jié)點外,每一個結(jié)點等值線都包含在其父節(jié)點多邊形內(nèi)部。
步驟S5,利用關(guān)系樹T生成多個孔洞型多邊形或常規(guī)多邊形。
具體地,首先由根結(jié)點pk與其子節(jié)點{ok1,ok2,..,okj}生成多邊形pk1,然后遍歷其子節(jié)點{ok1,ok2,..,okj},若任一結(jié)點oki包含子節(jié)點,則oki與它的所有子節(jié)點生成孔洞型多邊形pki,若oki不包含子節(jié)點,則直接返回oki上的多邊形。依次類推,生成該樹中所有多邊形。
步驟S6,輸出多邊形,并根據(jù)多邊形區(qū)域?qū)傩灾祵Σ煌瑢傩远噙呅芜M(jìn)行區(qū)分。
具體地,根據(jù)多邊形區(qū)域?qū)傩灾祵Σ煌瑢傩远噙呅芜M(jìn)行區(qū)分,包括如下步驟:對不同屬性的多邊形采用不同的顏色進(jìn)行填充,以示區(qū)別。
下面參考圖2至圖7對本發(fā)明實施例的生成等值線多邊形的方法進(jìn)行詳細(xì)說明。
(1)追蹤開放等值線與邊界組成的多邊形
圖2a示出了等值線的分布圖,開放等值線與邊界存在一系列交點C1,C2,…,C16。。
參考圖2b,以C2-C3為例,執(zhí)行如下步驟:
1.清空曲線段隊列D,設(shè)定C2為當(dāng)前起點;
2.取出邊界上C2-C3之間的曲線段,存入當(dāng)前曲線隊列D;
3.由C3中包含的等值線信息,追蹤C(jī)3與C4之間的等值線,并存入曲線隊列D;
4.獲取C4-C5之間邊界子曲線,存入曲線隊列D;
5.由C5中包含的等值線序號信息,追蹤C(jī)5與C6之間的等值線,存入曲線隊列D;
6.獲取C6-C7之間邊界子曲線,存入隊列D;
7.由C7中包含的等值線序號信息,追蹤C(jī)7與C2之間的等值線,存入曲線隊列D;
8.由于C2為初始起點,所以此次追蹤完成。將曲線追的隊列連接成一個完整多邊形,如圖3所示。
(2)多邊形關(guān)系樹構(gòu)建及孔洞多邊形生成
參考圖4,以上一步驟生成的多邊形為例,P0是開放等值線與邊界形成的多邊形,p1,p2,p3,p4,p5為原始閉合多邊形。
1.我們判斷{p1,p2,p3,p4,p5}中哪些是包含在P0內(nèi)部的。方法為逐一去閉合多邊形pi上一點x0,y0,判斷該店是否在p0內(nèi)部,若在,則pi為多邊形p0內(nèi)部多邊形,反之,則為外部多邊形。通過比較,可得{p1,p2,p3,p4}為包含在p0內(nèi)部的多邊形。
2.兩兩比較{p1,p2,p3,p4},構(gòu)建包含關(guān)系樹,如圖5所示。
3.逐層生成多邊形。
如圖6所示,根節(jié)點p0包含子節(jié)點p1,則p0與p1生成孔洞型多邊形p0_1,p1包含子節(jié)點p2,p3,則p1與p2,p3生成孔洞型多邊形p1_2_3,依次類推,將新生成的多邊形存入輸出鏈表P_NEW。P3,p4不包含子節(jié)點,則直接存入P_NEW。
一個多邊形p1和它內(nèi)部包含的多邊形p2生成孔洞型多邊形具體方法為:
1)查找p1與p2之間最近點,pt1(x11,y11),pt2(x22,y22),pt1在p1上,pt2在p2上;
2)追蹤p1起點到pt1所有點,存入曲線點鏈表L;
3)若p1曲線為順時鐘方向,則p2以pt2為起點沿著逆時鐘方向獲取該曲線上所有點,存入L;
4)將pt1到p1尾部所有點存入L;
5)由L生成新曲線。
圖7示出了孔洞型多邊形p1_p2_p3形態(tài)與填充效果。
根據(jù)本發(fā)明實施例的生成等值線多邊形的方法,由邊界與開放等值線,閉合等值線共同生成一系列相互完全獨立的實心或具有孔洞的多邊形,每一個多邊形代表相鄰等值線之間的唯一區(qū)域,不存在多邊形內(nèi)部包含其他閉合線的情況。由于生成的每個多邊形都具有獨立性,在顯示填充和計算面積時,無需考慮其它多邊形,只需對當(dāng)前多邊形進(jìn)行操作。
本發(fā)明利用開放等值線與邊界交點追蹤多邊形,由多邊形包含關(guān)系樹逐層生成多邊形技術(shù),具有以下有益效果:
1.操作簡單,用戶選擇數(shù)據(jù)即可,無需過多交互。
2.生成效果好,每一個多邊形代表相鄰等值線之間的唯一區(qū)域,不存在多邊形內(nèi)部包含其他閉合線的情況。
3.在顯示填充和計算面積時,無需考慮其它多邊形,只需對當(dāng)前多邊形進(jìn)行操作。
在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對上述實施例進(jìn)行變化、修改、替換和變型。本發(fā)明的范圍由所附權(quán)利要求及其等同限定。