張亞臣+王根榮
摘 要:傳統(tǒng)雷達模擬器圖像生成多是采用掃描線求交算法,該算法一定程度上會增加計算機CPU的額外運算,浪費系統(tǒng)資源,而且雷達ARPA圖像生成速率低,圖像質(zhì)量差,不便于新功能的添加。為提高雷達ARPA圖像逼真度和方便功能擴展,以掃描的高效性和代碼的易維護性為前提,基于雙緩存技術(shù)對雷達圖像的生成進行了多圖層設(shè)計,并基于多圖層設(shè)計提出了更為簡單的每幀雷達圖像和ARPA符號的生成算法。以不同顯示模式下的雷達圖像進行了仿真,驗證了算法的可行性,相關(guān)算法已經(jīng)成功應(yīng)用到了雷達模擬器中雷達ARPA圖像的仿真。
關(guān)鍵詞:雷達圖像 雙緩存技術(shù) 多圖層設(shè)計 生成算法
1.前言
以前的雷達模擬器圖像的生成多是采用掃描線求交算法,即無論是雷達回波還是ARPA符號都隨著掃描線的旋轉(zhuǎn)與掃描線求交計算后再繪制出來。這種方法雖有其優(yōu)點,但也存在明顯的不足之處。首先ARPA符號是隨著掃描線旋轉(zhuǎn)與掃描線求交后再繪制,這使計算機CPU作了額外的運算,浪費了系統(tǒng)的資源,從而使岸線回波和ARPA符號的生成速率降低。而且掃描線求交算法有時不適合新的功能的添加,如同頻干擾圖像的生成不容易用很好的數(shù)學(xué)方法去描述,使求交點變得很難。其次掃描線求交算法生成的ARPA符號,如固定距標圈、電子方位線等,圖像質(zhì)量差,圓周不連續(xù),直線不平直。由于掃描線掃描一周大概3秒鐘,所以符號顯示的響應(yīng)慢。為了提高圖像的逼真度和方便增加其他的功能,只有采用新的設(shè)計模式,鑒于真實雷達上的ARPA符號的顯示和島岸回波并不在一層上,活動距標圈和電子方位線的拖動并不會擦除固定距標圈。本著在保持掃描性能和代碼的易維護性基礎(chǔ)上盡量采取簡單方便的方法和原則,本文應(yīng)用雙緩存技術(shù)提出了雷達圖像的多圖層顯示模式,將每幀圖像分層繪制。
2.雙緩存技術(shù)應(yīng)用
利用計算機進行圖形繪制時,對圖元進行的任何操作,譬如拉伸、填充、添加或刪除等操作都必須通過刷新屏幕才能顯示出來。傳統(tǒng)的繪圖方法都是寫好專門用來繪圖的函數(shù),然后通過函數(shù)的調(diào)用將圖形顯示在屏幕上。之后每次對圖元進行的修改等操作都必須刷新屏幕才能顯示出來。因此,屏幕的刷新過程是很緩慢的。而且當顯示畫面由于某種原因需要重新繪制時,還需要將原有圖像用背景色進行擦除,之后再通過調(diào)用繪圖函數(shù)進行繪制?;旧侠L圖過程可分為繪制—擦除—重繪三部分。其中擦除窗口顯示區(qū)域是必須的,因為若重繪時沒有對原有圖像進行擦除,那么就會導(dǎo)致原來的圖形和新畫的圖形混疊在一起,使顯示區(qū)域雜亂無章。如果圖形比較復(fù)雜,圖元數(shù)目比較繁多,就會消耗系統(tǒng)大量的內(nèi)存。繪圖時間也會有一定的延長,這樣就可能會產(chǎn)生不斷地交替顯示背景和圖形的閃爍畫面。雷達圖像包含的信息較多,除了雷達回波需要繪制外,所有的ARPA符號都需要繪制,而且隨著船舶的運動和顯示模式的變換,圖像需要實時快速更新,這些都需要重繪顯示區(qū)域,如果采用傳統(tǒng)的繪圖模式必定產(chǎn)生閃爍和雜亂無章的畫面,無法實現(xiàn)雷達圖像的繪制。使用雙緩存技術(shù)可以有效解決上述問題。
實現(xiàn)雙緩存的基本思路是:繪圖之前,在內(nèi)存中開辟一塊區(qū)域,創(chuàng)建一個和顯示區(qū)域同樣大小的內(nèi)存空間作為虛擬的畫布(內(nèi)存位圖),然后將所有的繪圖操作都在這個內(nèi)存位圖上完成。當繪制完一幀完整的圖形后,再一次性將此內(nèi)存位圖中的內(nèi)容復(fù)制到屏幕顯示窗口上。這一過程只需要刷新一次屏幕,而且由于訪問內(nèi)存的速度遠高于實際窗口繪圖,所以繪圖的效率得到大幅度的提高。再加上擦除動作和整個繪圖過程都是在內(nèi)存位圖中以后臺的方式完成的,所以前后兩幀圖像間的擦圖操作被隱藏了,閃爍問題得到了解決。
3.雷達圖像的多圖層設(shè)計
為了更好的仿真雷達圖像,應(yīng)用雙緩存技術(shù)對雷達圖像進行層次化設(shè)計,將每幀圖像分層繪制,將雷達回波、ARPA符號繪制在不同的表面上,之后再逐層繪制在后臺內(nèi)存位圖上,再一次性將此畫布上的內(nèi)容復(fù)制到前臺顯示窗口上。主要分為如下層次:基礎(chǔ)層、視頻層、綜合層、回波層、符號層。這種分層模式很好地實現(xiàn)了雷達回波和ARPA符號的分層顯示,以及各種功能的模擬。各個層的描述如下:
(1)基礎(chǔ)層:用來顯示雷達在不同顯示模式和運動模式下的方位刻度線和刻度值;
(2)視頻層:顯示前臺,當前屏幕顯示窗口中顯示的畫面,即我們最終看到的雷達圖像;
(3)綜合層:顯示后臺,又叫后備緩沖區(qū),被復(fù)制到視頻層的表面,保存即將顯示的下一幀畫面,其它層按次序依次粘貼到該層,即它包含了其他層的所有畫面信息。增加此層是為了防止連續(xù)向視頻層復(fù)制其他層產(chǎn)生閃爍現(xiàn)象。
(4)回波層:用于畫回波,包括島岸回波、活動目標回波、海雜波等;
(5)符號層:用于畫各類ARPA符號,避免與回波沖突(符號表面可以有多個,可待以后根據(jù)需要添加)。
圖1展示了雷達圖像的層次結(jié)構(gòu),圖2展示了雷達圖像各層的大小。
4.每幀雷達圖像的生成
為了實現(xiàn)雷達圖像的實時生成,創(chuàng)建了雷達掃描線程,在啟動后點擊StandBy后就開啟掃描線程,開啟后雷達開始掃描,直到線程銷毀為止。線程創(chuàng)建如下:
m_ScanThread=AfxBeginThread(DrawScanThread,this);
其中DrawScanThread()為線程控制函數(shù),專用來繪制雷達回波。
此外為了將繪制的雷達回波和ARPA符號實時顯示在PPI上,程序中還設(shè)置了繪制每幀雷達圖像的時鐘響應(yīng)函數(shù)。
SetTimer(1,MSECONDS_ PER_BLT,NULL);
由于人眼能識別連續(xù)的兩幀圖像的時間間隔至少為40毫秒,所以定時器應(yīng)在每小于40毫秒的時間內(nèi)觸發(fā)一次。經(jīng)測試MSECONDS _ PER_BLT的值設(shè)置在25-35左右效果最好。此外因為每層內(nèi)存位圖均為方形,所以在PPI內(nèi)顯示的圖像還需要進行圓域裁剪,Windows提供了兩個常用的API函數(shù)CombineRgn和SelectClipRgn,可以用來實現(xiàn)圓域的裁剪。endprint
每幀雷達圖像的生成主要包括以下過程:
開啟雷達掃面線程,雷達開始掃描,在回波層繪制雷達回波,在符號層繪制ARPA符號,基礎(chǔ)層繪制方位刻度和刻度值,暫停掃描線程,觸發(fā)定時器,將回波層以不透明方式拷貝到綜合層,線程暫停結(jié)束,繼續(xù)執(zhí)行掃描線程,在下一次定時器觸發(fā)之前,將符號層以透明的方式拷貝到綜合層,將基礎(chǔ)層和綜合層進行裁剪操作,最后將基礎(chǔ)層和綜合層拷貝到視頻層,即拷貝到顯示屏相應(yīng)的顯示窗口。
執(zhí)行完上述過程后,則一幀雷達圖像繪制完畢。不斷地循環(huán)執(zhí)行上述過程,則雷達圖像將連續(xù)地繪制并顯示在屏幕上。圖3展示了每幀雷達圖像的生成流程。
5.ARPA符號生成算法
雷達模擬器中ARPA符號主要包括電子方位線、固定距標圈、活動距標圈、跟蹤區(qū)域(警戒區(qū))、船首線、船尾線、平行方位線、方位刻度線、跟蹤目標的矢量線和尾跡以及試操船軌跡和符號等。傳統(tǒng)的雷達ARPA符號的繪制多是采用異或運算的方式,在繪制每個ARPA符號時,首先需要用異或操作將當前顯示的電子方位線擦除掉,之后再計算ARPA符號每個控制點新的坐標位置,最后根據(jù)新的坐標位置重新繪制,這樣做雖然速度很快,但是也會產(chǎn)生一個很大的難題,即運動的符號在不同的背景顏色上會呈現(xiàn)出不同的顏色。為解決這一問題,尹勇等提出了分段調(diào)色板技術(shù),但該方法不但操作繁瑣,而且需要犧牲一部分調(diào)色板入口作為代價。本文充分利用了雷達圖像的層次化設(shè)計模式,可以很好地實現(xiàn)ARPA符號的生成,避免了采用異或運算和分段調(diào)色板技術(shù)。
根據(jù)每幀雷達圖像的生成過程,我們可以將所有ARPA符號的繪制控制在一個模塊內(nèi),每個ARPA符號都有其各自屬性和操作行為,當我們對某個ARPA符號執(zhí)行其中某種操作時,重新設(shè)置符號的屬性值,并用和符號層同樣大小的空白層將符號層覆蓋,達到了擦除上一幀ARPA符號的目的,再執(zhí)行ARPA符號的繪制模塊,將ARPA符號繪制在符號層,當定時器觸發(fā)時符號層被透明地覆蓋到綜合層,綜合層再覆蓋到視頻層即完成ARPA符號的顯示,圖4為ARPA符號生成流程。
6.仿真實例與結(jié)論
以中國大連港附近沿海為實例,設(shè)本船為OS01,初始船位(38°46.4491′N,121°36.2647′E),如圖5所示。對北向上真運動顯示模式下的雷達ARPA圖像的進行了仿真。
通過仿真驗證了基于雙緩存技術(shù)雷達圖像的多圖層設(shè)計可以較好地應(yīng)用到雷達ARPA圖像的生成,基于多圖層設(shè)計的每幀雷達圖像和ARPA符號的生成算法簡單,便于添加新的功能,擴展性強,掃描高效且代碼易于維護,可以較好地應(yīng)用于雷達模擬器中。
參考文獻:
[1]尹勇,劉秀文,李志華.采用真雷達顯示器的航海雷達模擬器的關(guān)鍵技術(shù)[J].系統(tǒng)仿真學(xué)報,2007[3]:1014-1017.
[2]劉婷婷,潘彤,陳彬茹.利用雙緩存技術(shù)提高繪圖速率[J].電腦編程技巧與維護,2012,18.
[3]張仁忠,常明志,許德新.利用MFC實現(xiàn)雙緩存機制改善圖形的顯示效果[J].應(yīng)用科技,2005,32(1).
[4]尹勇,金一丞.頁面更新方式雷達/ARPA模擬器圖像生成的研究[J].大連海事大學(xué)學(xué)報,1996,22(4):31-36.endprint