韓立文+竇立君+沈麗蓉+高宙宇+王之舜+郭勇
摘要:林分結(jié)構(gòu)指標(biāo)的精確計(jì)算可給生態(tài)、經(jīng)濟(jì)、社會(huì)、學(xué)術(shù)等帶來(lái)巨大的價(jià)值。然相較人工計(jì)算的繁雜低效,簡(jiǎn)便高效的計(jì)算機(jī)極大地減少了人力物力財(cái)力的浪費(fèi)。系統(tǒng)使用的Java語(yǔ)言技術(shù),是時(shí)下最流行的計(jì)算機(jī)編程開(kāi)發(fā)技術(shù),其高效穩(wěn)定性為系統(tǒng)的開(kāi)發(fā)提供了可靠的保障。此外,系統(tǒng)利用SQL和Excel的強(qiáng)大功能,并結(jié)合不斷優(yōu)化的算法使得系統(tǒng)的功能逐漸強(qiáng)大并趨近成熟。
關(guān)鍵詞:Voronoi圖; Delaunay三角網(wǎng); Bowyer-Watson算法; 林分空間結(jié)構(gòu); 軟件系統(tǒng)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)06-0099-03
Abstract:Stand structure indexes of precise calculation can bring ecological, economic, social, academic and other great value. However, compared with manual calculation of multifarious inefficient, simple and highly effective computer greatly reduces the waste of manpower and financial resources. The system uses Java language technology, which is the most popular computer programming technology, providing a reliable guarantee for the development of the system of its efficient stability. In addition, the system uses the powerful functions of the SQL and the Excel, and combined with continuous optimization of the algorithm ,which making the function of the system gradually reaching strong and maturity.
Key words:voronoi diagram; delaunay tin; bowyer-watson algorithm; spatial structure ; software system
林分結(jié)構(gòu)是林分在未遭受破壞的情況下,林分內(nèi)部存在的一些比較穩(wěn)定的結(jié)構(gòu)規(guī)律。林分空間結(jié)構(gòu)決定了林木之間的競(jìng)爭(zhēng)優(yōu)勢(shì),空間結(jié)構(gòu)的內(nèi)部穩(wěn)定決定著林分成長(zhǎng)的健康與否。目前,一般采用三個(gè)方面的指標(biāo)來(lái)描述林分結(jié)構(gòu)的狀況,分別是:反映樹(shù)種空間隔離程度的混角度[2],反映個(gè)體成長(zhǎng)的大小比數(shù)[3],反映個(gè)體在二維布局上的分布格局的角尺度[4]。此外,相關(guān)的專業(yè)人士又提出兩個(gè)指標(biāo)——描述隨機(jī)樣點(diǎn)光環(huán)境測(cè)定指數(shù)的開(kāi)敞度和描述相鄰木對(duì)目的樹(shù)干擾指數(shù)的單株受壓。
1 林分空間結(jié)構(gòu)指標(biāo)
1.1 傳統(tǒng)混交度
混交度是目標(biāo)樹(shù)木與周圍林木不屬于同一樹(shù)種的數(shù)學(xué)測(cè)度,其表達(dá)式為:
1.2 多樣性混交度
多樣性混交度描述了目的樹(shù)與相鄰樹(shù),相鄰樹(shù)與相鄰樹(shù)之間的隔離程度,其在傳統(tǒng)混交度的基礎(chǔ)之上加入了相鄰樹(shù)之間混交度的考量,其表達(dá)式為:
其代碼實(shí)現(xiàn)如下:
static double To_NotriMingling(int root,int n,int near_tree[])
{Set s = new HashSet();//使用集合統(tǒng)計(jì)樹(shù)種個(gè)數(shù)
for(int i=0;i {Tree ti=new Tree(near_tree[i]); if(!to.name.equals(ti.name)) ……} return (1.0*s.size()*Vij/(n*n));} 1.3 角尺度 角尺度是用來(lái)表述目的樹(shù)周圍相鄰樹(shù)分布的勻稱性的測(cè)度。其表達(dá)式為: 1.4 大小比數(shù) 大小比數(shù)反映目的樹(shù)與相鄰樹(shù)在比較量上的差異。其表達(dá)式為: 1.5 其他指標(biāo) 2 林分關(guān)鍵處理 2.1 相鄰木處理 傳統(tǒng)處理相鄰木是在整個(gè)林分中尋出距離目的樹(shù)最短的4棵樹(shù)作為相鄰木,這種方法既耗費(fèi)資源,也限制了結(jié)果的準(zhǔn)確性。為此需要一個(gè)既保證資源又更加準(zhǔn)確的處理方法,而Voronoi圖的最近性和鄰接性,使其成為解決這一問(wèn)題的可能。 趙春燕也通過(guò)Voronoi圖確定相鄰木計(jì)算指標(biāo),并用實(shí)驗(yàn)數(shù)據(jù)證明Voronoi圖生成的相鄰木數(shù)據(jù)對(duì)指標(biāo)的計(jì)算準(zhǔn)確度沒(méi)有影響。張彩彩在其學(xué)位論文中則采用加權(quán)的Voronoi圖計(jì)算指標(biāo),并同樣用數(shù)據(jù)證明其準(zhǔn)確性。 關(guān)于算法的實(shí)現(xiàn),參考了Bowyer-Watson算法,使用了Delaunay三角剖分生成Voronoi圖的對(duì)偶圖Delaunay三角網(wǎng)。Bowyer-Watson算法的核心是規(guī)則最大化最小角,使網(wǎng)內(nèi)關(guān)聯(lián)的任意四點(diǎn)不共圓。三角剖分需要滿足兩個(gè)準(zhǔn)則:空?qǐng)A特性和最大化最小角特性;由此形成的三角網(wǎng)擁有最近性、唯一性、最優(yōu)性和區(qū)域性[1]。其中最近性是處理相鄰木的關(guān)鍵,生成的三角網(wǎng)是以最近的三個(gè)點(diǎn)形成三角形,使得點(diǎn)與點(diǎn)之間關(guān)聯(lián)的都是與之最近的點(diǎn),可理解為最相鄰的樹(shù)。 使用Voronoi圖處理相鄰木的優(yōu)點(diǎn)在于不必要去計(jì)算繁雜的距離,同時(shí)確定相鄰木的數(shù)量,而不是固定的4棵,是視情況而定。具體實(shí)現(xiàn)是構(gòu)造三角形鏈表,劃定涵蓋所有點(diǎn)的點(diǎn)集,將點(diǎn)逐一插入三角形之中,使用準(zhǔn)則修正三角形,直到完成所有點(diǎn)。
建模實(shí)現(xiàn)中,使用Java面向?qū)ο蠹夹g(shù),建立Tree類構(gòu)造樹(shù)木對(duì)象,從Tree類衍生出Point類,將樹(shù)木二維抽象化,使用Point類構(gòu)造點(diǎn)對(duì)象參與算法運(yùn)算,組建三角網(wǎng)。Triangle類構(gòu)造生成的三角形對(duì)象,樹(shù)木鄰接關(guān)系便清晰可見(jiàn)。
代碼實(shí)現(xiàn)如下:
flag=Judge_is_in_triangle(t,p);/*判斷點(diǎn)在哪個(gè)三角形中*/…………
flag2=Judge_is_in_circle(new Triangle(t2),new Point(i));/*判斷點(diǎn)與外接圓的關(guān)系*/…………
if(flag2==-1)/*如果點(diǎn)在外接圓內(nèi)*/
{………./*擦除三角形第三邊,點(diǎn)連接三角形三頂點(diǎn)形成新三角形*/}
If(flag2==1)/*如果點(diǎn)在外接圓上和圓外*/
{……/*點(diǎn)連接三角形兩頂點(diǎn)添加一個(gè)三角形*/}
2.2 邊界處理
邊界的樹(shù)木由于其環(huán)境的特殊,使得其作為參照樹(shù)計(jì)算出的指標(biāo)不具價(jià)值,因而必要的邊界校正必不可少。傳統(tǒng)的處理方式有距離緩沖區(qū)法、8鄰域大樣地法、第4鄰體判定法。緩沖區(qū)的寬度難以確定,8鄰域大樣地法成倍的增加計(jì)算負(fù)荷,只有第4鄰體判定法能在不影響結(jié)果的基礎(chǔ)上解決問(wèn)題,同時(shí)還一定程度上減輕計(jì)算負(fù)荷。但在判定邊界木的問(wèn)題上適用條件不靈活。
綜上考慮,使用角度判定邊界木,再使用第4鄰體判定法處理邊界木便讓問(wèn)題簡(jiǎn)單很多。當(dāng)一棵樹(shù)的一側(cè)沒(méi)有樹(shù)時(shí),便可認(rèn)定其處于邊界,固其夾角的特征便可反映其所處的環(huán)境。邊界木作為其他樹(shù)的相鄰木但不作為目的樹(shù),這便是第4鄰體判定法處理邊界的核心。算法實(shí)現(xiàn)借用了角尺度的計(jì)算函數(shù),一舉兩得的實(shí)現(xiàn),此處不再贅述。
3 系統(tǒng)設(shè)計(jì)
3.1 數(shù)據(jù)設(shè)計(jì)
合理的軟件設(shè)計(jì)離不開(kāi)合理的數(shù)據(jù)模型?;贘ava強(qiáng)大的面向?qū)ο蠹夹g(shù)可以系統(tǒng)條理的構(gòu)建數(shù)據(jù)。軟件計(jì)算林分指標(biāo)需要林木的相關(guān)數(shù)據(jù),林木的相關(guān)數(shù)據(jù)需要載體;將林木抽象成樹(shù)木對(duì)象,將計(jì)算所必要的數(shù)據(jù)作為對(duì)象的屬性,豐滿樹(shù)這個(gè)對(duì)象。樹(shù)木之間的關(guān)系具象化成三角形,由樹(shù)木做節(jié)點(diǎn)的大量三角形便形象表達(dá)其中關(guān)系。
具體數(shù)據(jù)設(shè)計(jì)可參看下面的類圖:
圖1中各類之間的關(guān)系為:Point類依賴Tree類,Point與Triangle類是聚合關(guān)系,Point類是Triangle類的局部,F(xiàn)unction類與Tree、Triangle類之間都是關(guān)聯(lián)關(guān)系。
系統(tǒng)是遵照以上類圖設(shè)計(jì)。使用了一個(gè)Tree類構(gòu)建基礎(chǔ)的樹(shù)對(duì)象,其中存儲(chǔ)必要的屬性和方法;從Tree類中局部抽象出Point類,專用于構(gòu)建三角網(wǎng);Triangle類用來(lái)構(gòu)建組網(wǎng)的三角形對(duì)象,同時(shí)也是樹(shù)與樹(shù)之間的關(guān)系實(shí)例;Function類是一個(gè)方法類,在Tree對(duì)象和關(guān)系Triangle對(duì)象基礎(chǔ)上實(shí)現(xiàn)各種指標(biāo)計(jì)算。
3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)的設(shè)計(jì)上保持與類圖的結(jié)構(gòu)基本一致,使用的是關(guān)系型數(shù)據(jù)庫(kù)。Tree表和Triangle表都設(shè)置了實(shí)體完整性規(guī)則,使用主鍵約束保證數(shù)據(jù)的正確性;同時(shí)三個(gè)表都設(shè)置了參照完整性規(guī)則,確保了表格之間的關(guān)系約束。使用數(shù)據(jù)庫(kù)和類圖的設(shè)計(jì),實(shí)現(xiàn)系統(tǒng)的核心元件。
Tree表、Triangle表中的ID屬性是唯一且特殊的,表內(nèi)的ID不允許出現(xiàn)相同的,保證數(shù)據(jù)的準(zhǔn)確性。Result表中的ID依賴于Tree表中ID屬性,Tree表中不存在的ID不允許在Result表中使用。Triangle表中的A、B、C三個(gè)點(diǎn)同樣依賴于Tree表中的ID,不再贅述。
4 系統(tǒng)功能
系統(tǒng)是基于Java技術(shù)實(shí)現(xiàn)的,界面使用的是Java的Swing技術(shù),運(yùn)用外部美化函數(shù)優(yōu)化界面視覺(jué)。數(shù)據(jù)以Excel表格的形式錄入到系統(tǒng)之中,系統(tǒng)將基礎(chǔ)數(shù)據(jù)錄入SQL數(shù)據(jù)庫(kù),算法使用Java面向?qū)ο蠹夹g(shù)實(shí)現(xiàn)三角網(wǎng)組網(wǎng)。用戶可以選擇需要計(jì)算的指標(biāo)(角尺度、大小比數(shù)、混交度、開(kāi)敞度、單株受壓),系統(tǒng)通過(guò)計(jì)算將結(jié)果反饋到界面上;用戶還可以使用自定義功能自己定義公式計(jì)算指標(biāo)。報(bào)表數(shù)出功能能將之前計(jì)算的所有結(jié)果整理成Excel表格儲(chǔ)存在原表格目錄下方便日后使用。
程序分為三個(gè)階段:第一階段,程序獲取數(shù)據(jù);第二階段,三角網(wǎng)組網(wǎng);第三階段指標(biāo)計(jì)算。原始數(shù)據(jù)導(dǎo)入程序后,程序先將數(shù)據(jù)按照程序格式導(dǎo)入數(shù)據(jù)庫(kù)中,而后程序運(yùn)用算法和數(shù)據(jù)庫(kù)操作進(jìn)行三角網(wǎng)組網(wǎng)。此時(shí),基礎(chǔ)數(shù)據(jù)初始化完成,程序可根據(jù)需求計(jì)算相應(yīng)指標(biāo)并以表格形式輸出結(jié)果。以下是實(shí)驗(yàn)數(shù)據(jù)所計(jì)算出的結(jié)果,經(jīng)過(guò)驗(yàn)證,指標(biāo)結(jié)果均正確。
5 結(jié)束語(yǔ)
計(jì)算機(jī)的快速發(fā)展不僅推動(dòng)了社會(huì)的發(fā)展,同時(shí)也給很多傳統(tǒng)行業(yè)帶來(lái)了新的解決方法。軟件是計(jì)算機(jī)得以服務(wù)社會(huì)的關(guān)鍵,將傳統(tǒng)的方法替換成適應(yīng)時(shí)代的新思路是每個(gè)時(shí)代人的責(zé)任。時(shí)下最流行的Java編程技術(shù)使得這種實(shí)現(xiàn)變得簡(jiǎn)單高效。林學(xué)的很多方面非常需要計(jì)算機(jī)的支持,搭上計(jì)算機(jī)的高速列車將給林業(yè)的發(fā)展帶來(lái)不可想象的進(jìn)步。當(dāng)然,全新的數(shù)學(xué)支持,算法的架構(gòu)都是必不可少的。數(shù)字的時(shí)代,要用數(shù)字的方法解決問(wèn)題。
參考文獻(xiàn):
[1] 趙春燕,李際平,李建軍.基于Voronoi圖和Delaunay三角網(wǎng)的林分空間結(jié)構(gòu)量化分析[J].林學(xué)科學(xué),2010(6).
[2] 湯孟平,唐守正,雷相東.等.兩種混交度的比較[J].林業(yè)科學(xué),2004(5).
[3] 惠剛盈.一個(gè)新的林分空間結(jié)構(gòu)參數(shù)——大小比數(shù)[J].林業(yè)科學(xué) 1998(8).
[4] 惠剛盈.角尺度——一個(gè)描述林木個(gè)體分布格局的結(jié)構(gòu)參數(shù)[J].林業(yè)科學(xué),1998(7).
[5] 惠剛盈.角尺度——一個(gè)描述林木個(gè)體分布格局的結(jié)構(gòu)參數(shù)[J].林業(yè)科學(xué),1998(7).