一種局部精度約束的三維地形生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種三維地形生成方法,特別是一種局部精度約束的三維地形生成方法,屬于三維可視化技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]在數(shù)字化和信息化的今天,隨著地理信息應(yīng)用領(lǐng)域的不斷拓展,傳統(tǒng)的二維地圖已不能滿足人們的需要,人們開始逐漸關(guān)注具有豐富地形地貌信息的三維地形圖。但由于自然地形復(fù)雜多樣,計(jì)算機(jī)處理能力有限,在這個(gè)領(lǐng)域存在著可視化處理精度有限、三維顯示效果缺乏真實(shí)感等問題。
[0003]目前三維可視化領(lǐng)域普遍應(yīng)用3D MAX、VUE和VTB等成熟商用建模軟件實(shí)現(xiàn)三維地形生成。上述商業(yè)建模軟件在三維地形的實(shí)際生成過程中,普遍存在生成地形整體精度受限和局部地形精度無法修改的不足,如3D MAX軟件主要利用高程數(shù)據(jù)影像結(jié)合精細(xì)紋理處理技術(shù)生成地形,生成地形高程受限于高程數(shù)據(jù)的影像,無法動(dòng)態(tài)修改;VUE軟件生成地形數(shù)據(jù)的分辨率一般低于2048X2048,生成的地形高程在后期采用濾波方式改變局部地形的形態(tài),無法針對局部地形的分辨率進(jìn)行精細(xì)化二次處理;VTB軟件只對地形數(shù)字高程模型文件進(jìn)行三維構(gòu)建和顯示,地形的高程依賴于原始數(shù)據(jù),無法進(jìn)行二次修改。
【發(fā)明內(nèi)容】
[0004]本發(fā)明解決的技術(shù)問題是:針對上述地形生成方法精度的不足,提供一種針對局部精度約束的三維地形生成方法,通過對菱形正方形算法的優(yōu)化,實(shí)現(xiàn)約束控制,使生成地形形態(tài)更接近自然形態(tài),通過局部約束條件,引入固定形態(tài)數(shù)據(jù)產(chǎn)生高度逼真的自然效果,并通過提取中間部分網(wǎng)格,進(jìn)行中心約束,極大提高了地形精度;本發(fā)明生成數(shù)據(jù)量大,可以根據(jù)要求生成整體高分辨率數(shù)據(jù),且滿足局部精度要求;在存儲(chǔ)時(shí)通過使用較為復(fù)雜的鏈表結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)點(diǎn),降低了物理內(nèi)存大區(qū)域連續(xù)分配的問題。
[0005]本發(fā)明所采用的技術(shù)方案是:一種局部精度約束的三維地形生成方法,步驟如下:
[0006](I)根據(jù)預(yù)先給定地形點(diǎn)的個(gè)數(shù)創(chuàng)建數(shù)據(jù)存儲(chǔ)網(wǎng)格模型,將預(yù)先給定地形點(diǎn)的高程數(shù)據(jù)和該數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中;所述預(yù)先給定地形點(diǎn)為待生成三維地形的邊點(diǎn)和中心點(diǎn),且相鄰預(yù)先給定地形點(diǎn)的連線構(gòu)成矩形網(wǎng)格;
[0007](2)將當(dāng)前地形點(diǎn)在當(dāng)前數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)更新為當(dāng)前地形點(diǎn)在一次三維地形細(xì)分后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù);
[0008](3)利用矩形網(wǎng)格中最小網(wǎng)格單元的四個(gè)頂點(diǎn)高程數(shù)據(jù)求得每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),更新數(shù)據(jù)存儲(chǔ)網(wǎng)格模型,并將求得的每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù)和該數(shù)據(jù)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)存儲(chǔ)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中;
[0009](4)以最小網(wǎng)格單元的頂點(diǎn)和中心點(diǎn)為菱形的頂點(diǎn),以最小網(wǎng)格單元邊線的中心點(diǎn)為菱形的中心構(gòu)建菱形,并利用菱形各頂點(diǎn)的數(shù)據(jù)計(jì)算每個(gè)最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù),并將求得的每個(gè)最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù)和該數(shù)據(jù)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)存儲(chǔ)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中;
[0010](5)利用最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù)更新每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),將求得的每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù)和該數(shù)據(jù)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)存儲(chǔ)在更新后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中,完成一次三維地形細(xì)分;
[0011](6)重復(fù)步驟(3)?步驟(5),直到三維地形整體精度達(dá)到要求;
[0012](7)選取目標(biāo)區(qū)域,并將目標(biāo)區(qū)域內(nèi)步驟⑴預(yù)先給定的地形點(diǎn)和步驟(3)?步驟
(6)求得的最小網(wǎng)格單元邊線中心點(diǎn)以及最小網(wǎng)格單元中心點(diǎn)中相鄰的點(diǎn)連接,構(gòu)成新的矩形網(wǎng)格,代替步驟(I)中的矩形網(wǎng)格,將dHeight變?yōu)樵瓟?shù)值的1/(2%重復(fù)步驟(2)?步驟(5),直至所選取的三維地形局部精度符合預(yù)設(shè)的要求;所述r為凹凸度常數(shù);
[0013](8)重復(fù)步驟(2)?步驟(7),直至所形成三維地形的所有局部精度符合預(yù)設(shè)的要求;
[0014](9)引入外部約束數(shù)據(jù),對步驟(8)中獲得的三維地形進(jìn)行修正,獲得最終的三維地形。
[0015]所述步驟(3)中利用矩形網(wǎng)格中最小網(wǎng)格單元的四個(gè)頂點(diǎn)高程數(shù)據(jù)求得每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),具體由公式:
[0016]E= (A+B+C+D) /4+random(-dHeight/2, dHeight/2)
[0017]給出,其中,A,B,C,D分別表示最小網(wǎng)格單元的四個(gè)頂點(diǎn)高程數(shù)據(jù),E表示最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),dHeight表示最小網(wǎng)格單元的四個(gè)頂點(diǎn)中某一個(gè)頂點(diǎn)的高程數(shù)據(jù)。
[0018]所述步驟(4)中利用菱形各頂點(diǎn)的數(shù)據(jù)計(jì)算每個(gè)最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù),具體為:
[0019]若最小網(wǎng)格單元邊線中心點(diǎn)位于步驟⑴中矩形網(wǎng)格的邊線上,則最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù)由公式:
[0020]H= (B+D+2E) /4+random (-dHeight/2, +dHeight/2)
[0021]給出,其中,H表示最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù),B,D分別表示構(gòu)建菱形的各頂點(diǎn)中兩個(gè)最小網(wǎng)格單元頂點(diǎn)的高程值,若預(yù)先設(shè)定的三維地形邊界不為水平面,則E為最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),否則,E = O ;dHeight表示最小網(wǎng)格單元的四個(gè)頂點(diǎn)中某一個(gè)頂點(diǎn)的高程數(shù)據(jù);
[0022]否則,最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù)由公式:
[0023]Q= (E+F+J+K) /4+random(-dHeight/2, dHeight/2)
[0024]給出,其中,Q表示最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù),E,F(xiàn)分別表示構(gòu)建菱形的各頂點(diǎn)中兩個(gè)最小網(wǎng)格單元頂點(diǎn)的高程值,J和K分別構(gòu)建菱形的各頂點(diǎn)中兩個(gè)為最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù)。
[0025]所述步驟(5)中利用最小網(wǎng)格單元邊線中心點(diǎn)的高程數(shù)據(jù)更新每個(gè)最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),具體由:
[0026]E= (F+G+H+I)/4+random(-dHeight/2, dHeight/2)
[0027]給出,其中,E為最小網(wǎng)格單元的中心點(diǎn)高程數(shù)據(jù),F(xiàn), G, H, I分別表示最小網(wǎng)格單元四個(gè)邊線中心點(diǎn)的高程數(shù)據(jù),dHeight表示最小網(wǎng)格單元的四個(gè)頂點(diǎn)中某一個(gè)頂點(diǎn)的高程數(shù)據(jù)。
[0028]所述步驟(8)中引入外部約束數(shù)據(jù),對步驟(7)中獲得的三維地形進(jìn)行修正,獲得最終的三維地形,每一點(diǎn)的修正具體由公式:
[0029]Height = hinXrandom[0, l/2n] XWin+hori X (1-random[0, l/2n]) Xffori
[0030]給出,其中,Height表示修正后的高程值,hin表示輸入數(shù)據(jù)中的高程值,Win表示外部輸入的權(quán)重,hOTi表示原始高程值,W OTi表示原始高程值的權(quán)重。
[0031]所述數(shù)據(jù)存儲(chǔ)網(wǎng)格模型采用鏈表結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。
[0032]所述步驟(2)中將當(dāng)前地形點(diǎn)在當(dāng)前數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù)更新為當(dāng)前地形點(diǎn)在一次三維地形細(xì)分后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行列數(shù),具體由公式:
[0033]ri+1 (li+1) = T1 (Ii) X 2-1
[0034]給出,其中,1^表示當(dāng)前地形點(diǎn)在當(dāng)前數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行數(shù),I i表示當(dāng)前地形點(diǎn)在當(dāng)前數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的列數(shù),ri+1表示當(dāng)前地形點(diǎn)在一次三維地形細(xì)分后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的行數(shù),li+1表示當(dāng)前地形點(diǎn)在一次三維地形細(xì)分后的數(shù)據(jù)存儲(chǔ)網(wǎng)格模型中所處的列數(shù)。
[0035]本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:
[0036](I)本發(fā)明使用DEM表示方法中的規(guī)則網(wǎng)格模型,地形圖由一個(gè)帶有高程值的二維矩陣所表示,其不僅數(shù)據(jù)排列規(guī)則,且結(jié)構(gòu)簡單,用其計(jì)算分析每一點(diǎn)的高程值具有較好的實(shí)時(shí)性,也便于計(jì)算坡度、坡向、陰影和輪廓等;
[0037](2)本發(fā)明使用浮點(diǎn)類型存儲(chǔ)高程數(shù)據(jù)點(diǎn),數(shù)據(jù)結(jié)構(gòu)使用鏈表結(jié)構(gòu),可避免不必要的精度存儲(chǔ),解決物理連續(xù)大內(nèi)存空間的分配問題;
[0038](3)本發(fā)明使用AT算法,特殊標(biāo)定生成地形周圍點(diǎn)坐標(biāo)小于0,或大于i X 2,jX2,通過對坐標(biāo)的巧妙篩選,避免了在置零時(shí)對邊點(diǎn)及角點(diǎn)的繁復(fù)判斷;
[0039](4)本發(fā)明在菱形算法后增加一步錯(cuò)位菱形算法,重新對坐標(biāo)點(diǎn)進(jìn)行中心點(diǎn)構(gòu)建過程,更新原有的最小單元中心點(diǎn)高程數(shù)據(jù),有效避免尖刺地形生成,保證生成地形形態(tài)更接近自然形態(tài);
[0040](5)本發(fā)明采取了局部處理策略:若輸入外部約束數(shù)據(jù),則輸入的外部約束條件對計(jì)算得到的高程數(shù)據(jù)進(jìn)行修正,該方法可處理邊界接縫問題,產(chǎn)生高度逼真的自然效果,該策略生成數(shù)據(jù)量大,可以根據(jù)要求生