本發(fā)明涉及一種基于三維地形的風(fēng)的動態(tài)可視化方法。
背景技術(shù):
本發(fā)明涉及一種如何將預(yù)測計算后的風(fēng)向和風(fēng)速數(shù)據(jù)在計算機中根據(jù)實景構(gòu)建的三維地形上動態(tài)可視化顯示的方法。該方法不僅有助于直觀獲取研究區(qū)域中整體的風(fēng)的走向,同時也可掌握更小尺度和更高精度下的風(fēng)在起伏地形上的速度和方向,例如30米*30米網(wǎng)格內(nèi)風(fēng)的大小和方向。這種直觀的展示風(fēng)場的風(fēng)速和風(fēng)向的方法不僅可以用于風(fēng)力發(fā)電管理與選址、森林火災(zāi)輔助決策、污染源擴散控制等工業(yè)領(lǐng)域,還可以應(yīng)用于影視、游戲中風(fēng)效果的展示中。
目前對地形風(fēng)場的研究主要集中在風(fēng)速和風(fēng)向模擬計算上,側(cè)重點是如何提高模擬的精度,如專利cn103514328b、cn102435409b等,都是一種提高模擬精度的方法。而在如何高效、直觀的將風(fēng)速和風(fēng)向的動態(tài)效果在虛擬地理環(huán)境中展示的專利較少。對風(fēng)場的數(shù)值模擬固然重要,但缺乏相應(yīng)的可視化方案,從眾多的數(shù)據(jù)中很難整體上把握風(fēng)的走向和速度,缺少直觀性,給緊急決策、風(fēng)場選址及其他應(yīng)用帶來一定困難。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種基于三維地形的風(fēng)的動態(tài)可視化方法,在輸入的高程數(shù)據(jù)、風(fēng)場計算模型所計算出研究區(qū)域的風(fēng)速和風(fēng)向數(shù)據(jù)的基礎(chǔ)上,在計算機的三維地形上動態(tài)模擬出風(fēng)的流動。
為實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于三維地形的風(fēng)的動態(tài)可視化方法,其特征在于:包括數(shù)據(jù)的輸入及虛擬場景的構(gòu)建、三維風(fēng)矢量場的構(gòu)建和動態(tài)風(fēng)場的顯示三部分;
所述數(shù)據(jù)的輸入及虛擬場景的構(gòu)建包括以下步驟:
步驟s1:輸入點陣形式的地形高程數(shù)據(jù)、風(fēng)速和風(fēng)向的數(shù)據(jù)文件,
步驟s2:構(gòu)建三維網(wǎng)格地形,包括劃分三角面片和地形貼圖,
步驟s3:構(gòu)建風(fēng)節(jié)點;
所述三維風(fēng)矢量場的構(gòu)建包括以下步驟:
步驟s4:旋轉(zhuǎn)平行xy平面的風(fēng)節(jié)點使其表示正確的二維風(fēng)向,計算地形法向矢量,最終根據(jù)羅德里格旋轉(zhuǎn)公式獲取旋轉(zhuǎn)矩陣r;
所述動態(tài)風(fēng)場的顯示包括以下步驟:
步驟s5:計算單位三維風(fēng)矢量表示該網(wǎng)格的三維風(fēng)向,乘以風(fēng)速得到下一位置點,
步驟s6:定時器時間控制模擬速度,風(fēng)節(jié)點移動到下一位置點,更新風(fēng)節(jié)點的風(fēng)矢量、旋轉(zhuǎn)矩陣r、顏色和大小,
步驟s7:重復(fù)上個步驟,風(fēng)節(jié)點在結(jié)束位置時下一步移動到起始位置。
進一步的,所述數(shù)據(jù)的輸入及虛擬場景的構(gòu)建具體內(nèi)容如下:
二維點陣形式的地形高程數(shù)據(jù)、風(fēng)速和風(fēng)向的數(shù)據(jù)文件的輸入:每個點陣數(shù)據(jù)用于計算每個網(wǎng)格屬性,每一點的風(fēng)速、風(fēng)向和高程數(shù)據(jù)一一對應(yīng);
三維網(wǎng)格地形的構(gòu)建:根據(jù)不同位置點的地形高程數(shù)據(jù),高程數(shù)據(jù)間地形插值圓滑,前后左右連成網(wǎng)格,再根據(jù)統(tǒng)一方向?qū)⒚總€四邊形劃分成兩個三角面片,并且將研究區(qū)域的正攝航拍或遙感影像數(shù)據(jù)以紋理形式貼在地形上;
風(fēng)節(jié)點的構(gòu)建:將帶有透明通道的箭頭圖片,通過uv坐標以紋理形式與創(chuàng)立的二維面片疊加,添加顏色和縮放屬性用于區(qū)分風(fēng)速。
進一步的,所述三維風(fēng)矢量場的構(gòu)建的具體內(nèi)容如下:
網(wǎng)格單位風(fēng)矢量的計算:采用歐拉法的原理,根據(jù)地形高程數(shù)據(jù)、風(fēng)向角度和風(fēng)速,計算網(wǎng)格的單位風(fēng)矢量,獲取風(fēng)場研究區(qū)域整體的變化規(guī)律;
地形法向矢量計算:計算三角面片的兩條直角邊所在的單位矢量,將兩條單位矢量叉乘,根據(jù)z方向值的正負,獲得地形的法向矢量;
獲取旋轉(zhuǎn)矩陣r:從z軸方向的單位矢量旋轉(zhuǎn)到地形法向矢量,這其中的旋轉(zhuǎn)矩陣則根據(jù)羅德里格旋轉(zhuǎn)公式,計算出特定網(wǎng)格地形的旋轉(zhuǎn)矩陣r;
單一網(wǎng)格內(nèi)風(fēng)屬性保存:保存每一網(wǎng)格的標識與對應(yīng)網(wǎng)格的地形高程數(shù)據(jù)、風(fēng)速、風(fēng)向、風(fēng)矢量、風(fēng)節(jié)點顏色及大小。
進一步的,所述獲取旋轉(zhuǎn)矩陣r的具體內(nèi)容如下:
首先獲取旋轉(zhuǎn)角度θ,旋轉(zhuǎn)前向量
兩個旋轉(zhuǎn)角度為:
然后獲取旋轉(zhuǎn)軸,旋轉(zhuǎn)角所在的平面為向量
把
其中,e是3階單位矩陣。
進一步的,所述動態(tài)風(fēng)場的顯示的具體內(nèi)容如下:
風(fēng)節(jié)點單步移動:采用拉格朗日法的原理,以模擬單個風(fēng)節(jié)點為基礎(chǔ),綜合所有風(fēng)節(jié)點,構(gòu)成整個風(fēng)場運動,單位風(fēng)矢量乘以風(fēng)速得到x、y、z方向的偏移,再加上原來位置,就是風(fēng)節(jié)點單步移動后的位置;
模擬速度控制:采用定時器加回調(diào)的處理方式控制模擬速度,減少定時器的時間則加快模擬速度,增加定時器時間則減小模擬速度;
更新風(fēng)節(jié)點:風(fēng)節(jié)點到達下一個位置前,預(yù)先獲取該位置點所在網(wǎng)格的風(fēng)矢量、旋轉(zhuǎn)角度、顏色和大小,然后更新到該風(fēng)節(jié)點;
風(fēng)節(jié)點起始和結(jié)束位置:起始位置位于風(fēng)向和地面第一次相交的邊緣,結(jié)束位置位于風(fēng)節(jié)點最后一次與地形邊緣相交的位置,結(jié)束位置的下一個單步移動位置就是起始位置。
本發(fā)明與現(xiàn)有技術(shù)相比具有以下有益效果:本發(fā)明根據(jù)實景的數(shù)字高程(dem)數(shù)據(jù),用網(wǎng)格算法在計算機中構(gòu)建三維地形,并在此虛擬地理環(huán)境中,通過四元組的圖形變換方法,以箭頭的大小、顏色及材質(zhì)來體現(xiàn)不同大小的風(fēng)速,箭頭的方向代表風(fēng)的方向,用戶可以調(diào)整時間步長和時間維度的縮放比例,就可以在計算機中的虛擬環(huán)境中動態(tài)的顯示風(fēng)場的流動。用戶還可以從不同的角度和遠近,切換觀察視角,即可以整體把握研究區(qū)域中風(fēng)場在未來一定時間內(nèi)的流動變化,又可以查詢指定研究區(qū)域的任意位置或網(wǎng)格內(nèi)小尺度的風(fēng)速和風(fēng)向。本發(fā)明還可以與其他應(yīng)用方案組合,比如與火場蔓延模擬系統(tǒng)組合,觀察風(fēng)場對火災(zāi)蔓延趨勢是否有影響。也可以與氣象系統(tǒng)結(jié)合,觀察不同氣候因子下風(fēng)場的變化等等。本方案的輸入簡單,只需高程文件,風(fēng)速和風(fēng)向文件,同時又具有擴展性。
附圖說明
圖1是本發(fā)明的整體方法流程圖。
圖2是本發(fā)明一實施例的二維風(fēng)速風(fēng)向矢量場。
圖3是本發(fā)明一實施例的三維地形上的風(fēng)矢量場。
圖4是風(fēng)向角度示意圖。
圖5是網(wǎng)格地形示意圖。
圖6是三維風(fēng)矢量計算示意圖。
圖7至圖9是某時刻不同角度三維地形上風(fēng)場的動態(tài)運動圖。
具體實施方式
下面結(jié)合附圖及實施例對本發(fā)明做進一步說明。
請參照圖1,本發(fā)明提供一種基于三維地形的風(fēng)的動態(tài)可視化方法,總的來說包括:數(shù)據(jù)的輸入及虛擬場景的構(gòu)建、三維風(fēng)矢量場的構(gòu)建和動態(tài)風(fēng)場的顯示三部分;
所述數(shù)據(jù)的輸入內(nèi)容和要求如下:輸入數(shù)據(jù)包括地形高程數(shù)據(jù)、風(fēng)速和風(fēng)向的數(shù)據(jù)文件,這三個數(shù)據(jù)應(yīng)都包含相同的公有信息:左下角的經(jīng)度、緯度、行數(shù)、列數(shù)、行間距及列間距。所采用的輸入文件精度不限定,若精度擴大1倍,一個文件數(shù)據(jù)量和計算量擴大4倍,高程、風(fēng)速、風(fēng)向三個文件,則需要處理的數(shù)據(jù)量擴大12倍。選取輸入數(shù)據(jù)時,要兼顧地形精度和計算復(fù)雜度,也可以選用精度不是很高的數(shù)據(jù),通過插值可以形成較理想的地形。對于風(fēng)速和風(fēng)向數(shù)據(jù),本發(fā)明方法支持線性模擬、診斷風(fēng)場模型、計算流體力學(xué)模型(cfd)三種風(fēng)場的模擬計算結(jié)果。
所述三維風(fēng)矢量場的構(gòu)建部分首先采用歐拉法計算出二維風(fēng)的運動矢量場數(shù)據(jù)如圖2,根據(jù)地形的高程、風(fēng)速及風(fēng)向信息計算出三維地形上的運動矢量場如圖3,以上內(nèi)容的具體步驟如下:
步驟s1:輸入二維點陣形式的地形高程數(shù)據(jù)、風(fēng)速和風(fēng)向的數(shù)據(jù)文件,每個點陣數(shù)據(jù)用于計算每個網(wǎng)格屬性,每一點的風(fēng)速、風(fēng)向和高程數(shù)據(jù)一一對應(yīng)。風(fēng)向的表示方法,如圖4所示,用角度表示風(fēng)向,北風(fēng)(n)是0度(即360度),東風(fēng)(e)是90度,南風(fēng)(s)是180度,西風(fēng)(w)是270度,其余的風(fēng)向都可以由此計算出來。
步驟s2:構(gòu)建三維網(wǎng)格地形,包括劃分三角面片和地形貼圖,在實際情況下,可根據(jù)不同位置點的地形高程數(shù)據(jù),高程數(shù)據(jù)間地形進行插值平滑,前后左右連成網(wǎng)格,再根據(jù)統(tǒng)一方向?qū)⒚總€四邊形劃分成兩個三角面片,如圖5所示,圖中所示的pn、pn+1等橫豎交點即為高程文件內(nèi)的點陣數(shù)據(jù),u為高程數(shù)據(jù)間的固定間距,數(shù)據(jù)之間上下左右連成網(wǎng)格,再將每個四邊形以對角線劃分為兩個三角面片。劃分方式不止一種,也可以按另一種對角線劃分,但需要所有網(wǎng)格按同一方向劃分。將研究區(qū)域的正攝航拍或遙感影像數(shù)據(jù)以紋理形式貼在地形上;
步驟s3:構(gòu)建風(fēng)節(jié)點,風(fēng)節(jié)點在三維場景里表現(xiàn)為一個具有顏色、大小、位置屬性的箭頭。帶有透明通道的長方形箭頭圖片,圖片上除了箭頭部分不設(shè)置為透明,其它的部分均設(shè)為透明,然后將圖片以紋理的形式通過uv坐標映射到一個長方形面片上。在風(fēng)節(jié)點運動過程中,動態(tài)改變這些屬性用來表現(xiàn)不同位置風(fēng)的屬性。風(fēng)節(jié)點顏色的改變可以通過改變材質(zhì)實現(xiàn),風(fēng)的大小可以通過乘以縮放矩陣,xy方向可以通過乘以旋轉(zhuǎn)矩陣,與地面平行的旋轉(zhuǎn)通過乘以旋轉(zhuǎn)矩陣r,地理位置變化通過乘以轉(zhuǎn)移矩陣改變。矩陣之間相乘的變換關(guān)系不能改變順序,要先縮放,再旋轉(zhuǎn),再平移,縮放涉及兩次乘矩陣。
步驟s4:旋轉(zhuǎn)平行xy平面的風(fēng)節(jié)點使其表示正確的二維風(fēng)向,計算地形法向矢量,最終根據(jù)羅德里格旋轉(zhuǎn)公式獲取旋轉(zhuǎn)矩陣r;其具體內(nèi)容如下:
網(wǎng)格單位風(fēng)矢量的計算:采用歐拉法的原理,根據(jù)地形高程數(shù)據(jù)、風(fēng)向角度和風(fēng)速,計算網(wǎng)格的單位風(fēng)矢量,獲取風(fēng)場整體的變化規(guī)律;以圖6所示為例,已知風(fēng)向角α和高程數(shù)據(jù)點固定間隔u,pn、pn+1點對應(yīng)的高程值(即z方向值)記為c、d,坐標系方位如圖,以o點為原點,計算pm點坐標并進行單位化即為所在網(wǎng)格的單位風(fēng)矢量。pm點x值為u,y值為tan(90°-α)*u,z值根據(jù)y方向和z方向的比例計算出為
地形法向矢量計算:計算三角面片的兩條直角邊所在的單位矢量,將兩條單位矢量叉乘(又稱外積、叉積、矢積),得到地形法向矢量,進一步判斷地形法向矢量z方向的值,根據(jù)z方向模的正負,獲得地形的法向矢量;若小于0,則表示方向朝下,z方向取反為做為地形法向;若大于0,表示方向朝上,直接做為地形的法向。
獲取旋轉(zhuǎn)矩陣r:從z軸方向的單位矢量旋轉(zhuǎn)到地形法向矢量,這其中的旋轉(zhuǎn)矩陣是根據(jù)羅德里格旋轉(zhuǎn)公式,計算出特定網(wǎng)格地形的旋轉(zhuǎn)矩陣r;具體內(nèi)容如下:
首先獲取旋轉(zhuǎn)角度θ,旋轉(zhuǎn)前向量
可推出兩個旋轉(zhuǎn)角度為:
然后獲取旋轉(zhuǎn)軸,旋轉(zhuǎn)角所在的平面為向量
把
其中,e是3階單位矩陣,公式中的第二項不是點積,而是張量積,得到的是一個3行3列的矩陣。
單一網(wǎng)格內(nèi)風(fēng)屬性保存:保存每一網(wǎng)格的標識與對應(yīng)網(wǎng)格的地形高程數(shù)據(jù)、風(fēng)速、風(fēng)向、風(fēng)矢量、風(fēng)節(jié)點顏色、大小。
所述動態(tài)風(fēng)場的顯示如圖7至圖9所示,為相同時刻下不同角度觀察風(fēng)場,若干風(fēng)節(jié)點同時運動形成如圖所示的風(fēng)流場,所有風(fēng)節(jié)點單步運動流程相同。采用拉格朗日法的原理,以模擬單個風(fēng)節(jié)點為基礎(chǔ),綜合所有風(fēng)節(jié)點,構(gòu)成整個風(fēng)場運動,單位風(fēng)矢量乘以風(fēng)速得到x、y、z方向的偏移,加上原來位置,就是風(fēng)節(jié)點單步移動后的位置,單個風(fēng)節(jié)點的模擬步驟如下:
步驟s5:計算單位三維風(fēng)矢量表示該網(wǎng)格的三維風(fēng)向,乘以風(fēng)速得到下一位置點,根據(jù)該位置點判斷本次移動所在的網(wǎng)格,判斷方法則根據(jù)所在位置除以網(wǎng)格精度,得到行列數(shù)。獲取該網(wǎng)格屬性,包括顏色、大小、方向、旋轉(zhuǎn)矩陣r、位置信息。
步驟s6:更新風(fēng)節(jié)點屬性,先乘以縮放矩陣進行縮放,然后乘以xy方向的旋轉(zhuǎn)矩陣,再乘以旋轉(zhuǎn)矩陣r,最后乘以轉(zhuǎn)移矩陣移動到下一個位置,縮放、旋轉(zhuǎn)、平移的順序不能改變,顏色的改變可以在任意階段。定時器控制模擬速度,采用定時器加回調(diào)的處理方式控制模擬速度,減少定時器的時間加快模擬速度,增加定時器時間減小模擬速度;風(fēng)節(jié)點每次更新屬性都以定時器控制時間,到達定時器預(yù)定的時間后執(zhí)行回調(diào)方法,風(fēng)節(jié)點更新屬性。若定時器設(shè)定時間為1,則顯示的風(fēng)速與實際風(fēng)速完全相同,定時器設(shè)定為n(n為大于零的實數(shù)),模擬風(fēng)速乘以1/n,定時器定時控制風(fēng)速模擬的快慢。
步驟s7:重復(fù)上個步驟,起始位置位于風(fēng)向和地面第一次相交的邊緣,結(jié)束位置位于風(fēng)節(jié)點出地形邊緣的位置,結(jié)束位置的下一個單步移動位置就是起始位置。
鼠標可點擊查看地理位置的風(fēng)屬性,在鼠標點擊的位置垂直向屏幕內(nèi)發(fā)射一條射線,與地形相交于一點,則可獲取該點的地理位置,計算出所在網(wǎng)格,讀取網(wǎng)格屬性并顯示出來。通過條件控制來控制模擬的開始與暫停。
以上所述僅為本發(fā)明的較佳實施例,凡依本發(fā)明申請專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。