王 勇,洪 進(jìn),杜蘭蘭,王圣波
(空軍預(yù)警學(xué)院,武漢 430019)
標(biāo)圖課程包括在標(biāo)圖桌和標(biāo)圖軟件中標(biāo)示目標(biāo)航跡,標(biāo)圖軟件標(biāo)示目標(biāo)航跡也可以叫做計(jì)算機(jī)標(biāo)圖,兩者的核心教學(xué)內(nèi)容為找點(diǎn)、連線,最終掌握標(biāo)示多批目標(biāo)航跡的技能。標(biāo)圖桌上是手寫標(biāo)注位置和連接多個(gè)目標(biāo)點(diǎn),最終在標(biāo)圖板上呈現(xiàn)完整的航跡。計(jì)算機(jī)標(biāo)圖是通過鼠標(biāo)點(diǎn)擊完成找點(diǎn),由軟件自動連接目標(biāo)點(diǎn),最終在電腦屏幕上呈現(xiàn)完整的航跡,但無論是在標(biāo)圖桌還是計(jì)算機(jī)上標(biāo)示航跡,首先都需要找到目標(biāo)點(diǎn)的位置,然后才能標(biāo)注目標(biāo)屬性、高度、發(fā)現(xiàn)時(shí)間等其它相關(guān)信息,進(jìn)而連線形成航跡,這就意味著找點(diǎn)訓(xùn)練是基礎(chǔ)。
在標(biāo)圖桌上組織找點(diǎn)訓(xùn)練比較容易,找到航跡點(diǎn)并進(jìn)行標(biāo)注,不連線即可。但是當(dāng)前計(jì)算機(jī)標(biāo)圖采用的軟件不具備單獨(dú)標(biāo)示目標(biāo)位置的找點(diǎn)訓(xùn)練功能,所以教學(xué)進(jìn)程安排通常是先進(jìn)行標(biāo)圖桌上的找點(diǎn)訓(xùn)練,達(dá)到要求后推進(jìn)到標(biāo)圖桌上連續(xù)航跡的標(biāo)示訓(xùn)練,熟悉標(biāo)圖桌連續(xù)航跡標(biāo)示之后直接進(jìn)入計(jì)算機(jī)標(biāo)示連續(xù)航線的訓(xùn)練。從標(biāo)圖桌到計(jì)算機(jī),手工標(biāo)示到軟件標(biāo)示是一個(gè)比較大的跨越,需要熟悉軟件各功能所在區(qū)域,掌握軟件操作技巧,靈活使用鼠標(biāo)在屏幕中快速找到航跡點(diǎn),補(bǔ)充其它相關(guān)信息。另外,跨到計(jì)算機(jī)標(biāo)圖后只能從難度較大的標(biāo)示航跡入手,缺少了找航跡點(diǎn)這一基礎(chǔ)訓(xùn)練環(huán)節(jié),計(jì)算機(jī)標(biāo)圖的兩大跨越對于很多基礎(chǔ)薄弱的學(xué)員來說門檻高、起步難、訓(xùn)練受阻、倍受打擊,畏難情緒與日俱增,后續(xù)的提升訓(xùn)練越發(fā)力不從心、惡性循環(huán),學(xué)員成績不理想,不能完成培養(yǎng)目標(biāo),教員壓力增加。所以,無論是教學(xué)考核要求還是個(gè)人技能提升,不管是從教員還是學(xué)員的角度,降低計(jì)算機(jī)標(biāo)圖的門檻,縮小標(biāo)圖桌標(biāo)圖到計(jì)算機(jī)標(biāo)圖的跨度,對學(xué)員掌握標(biāo)圖技能至關(guān)重要。
本文旨在設(shè)計(jì)開發(fā)計(jì)算機(jī)標(biāo)圖找點(diǎn)訓(xùn)練軟件,為計(jì)算機(jī)標(biāo)示目標(biāo)航跡提供基礎(chǔ)訓(xùn)練,在軟件找點(diǎn)訓(xùn)練中熟悉計(jì)算機(jī)操作。此外,找點(diǎn)訓(xùn)練簡單、易上手,學(xué)員學(xué)習(xí)的積極性得到提升,掌握之后再過渡到計(jì)算機(jī)標(biāo)示目標(biāo)航跡也不至于手足無措。
Java Swing技術(shù)主要是用于構(gòu)建跨平臺桌面窗口程序,它是在AWT(abstract window tookit)基礎(chǔ)上采用Java語言編寫的一種圖形組件庫技術(shù)。Java Swing組件除了是輕量級的,即在運(yùn)行時(shí)不需要產(chǎn)生相應(yīng)的“對等(Peer)”組件,實(shí)際由自身外觀類支持,沒有本地代碼,不依賴操作系統(tǒng),而且它的外觀是可插拔的(pluggable look-and-feel)。Swing組件包括各種容器和基本組件,容器主要用來容納和布置基本組件,也可以包含相應(yīng)的容器。常見的容器有JFrame、JDialog、JPanel等;常見的基本組件包括按鈕JButton、標(biāo)簽JLabel、單選按鈕JRadio-Button。組件之間的關(guān)系如圖1所示。
圖1 組件關(guān)系圖
圖2所示為本軟件的系統(tǒng)架構(gòu)圖,分為功能界面層、基礎(chǔ)組件層、數(shù)據(jù)存儲層,每一層的實(shí)現(xiàn)都依賴下一層提供的支持,用戶交互界面使用Swing提供的豐富基礎(chǔ)組件來構(gòu)建,通過監(jiān)聽控件的鼠標(biāo)事件來完成具體功能的業(yè)務(wù)處理。鑒于軟件沒有網(wǎng)絡(luò)請求的需求,可以做成單機(jī)版,因此持久化數(shù)據(jù)采用本地文件進(jìn)行存儲,訪問本地文件系統(tǒng)避免了網(wǎng)絡(luò)傳輸?shù)暮臅r(shí),運(yùn)行速度更快。
圖2 找點(diǎn)軟件系統(tǒng)架構(gòu)圖
以雷達(dá)位置為圓心,通過編程繪圖模擬雷達(dá)掃描區(qū)域,半徑是雷達(dá)最大探測距離,軟件語音播報(bào)表示目標(biāo)坐標(biāo)位置的方位距離數(shù)據(jù),根據(jù)掃描區(qū)域大小將方位距離的數(shù)值按比例轉(zhuǎn)換成坐標(biāo)點(diǎn),學(xué)員在模擬的掃描區(qū)域內(nèi)找到該坐標(biāo)點(diǎn)的大致位置,鼠標(biāo)點(diǎn)擊即可放大點(diǎn)擊位置附近的區(qū)域,放大區(qū)中顯示方位距離輔助線,在放大區(qū)中找到并點(diǎn)擊方位距離的準(zhǔn)確位置。
在放大區(qū)中點(diǎn)選目標(biāo)位置之后,放大區(qū)消失,將放大區(qū)中點(diǎn)選的坐標(biāo)點(diǎn)經(jīng)過等比縮小變換后回顯到極坐標(biāo)中。
軟件找點(diǎn)訓(xùn)練需要實(shí)時(shí)顯示找到的點(diǎn)跡和對應(yīng)的正確點(diǎn)跡,找點(diǎn)過程是動態(tài)的,所以繪制點(diǎn)跡也是動態(tài)的。Swing組件繪圖會先把組件中之前的內(nèi)容清空,然后開始繪制傳入的新內(nèi)容,所以每次繪制標(biāo)記目標(biāo)的坐標(biāo)值后都需要保存當(dāng)前內(nèi)容用于下一次重繪。
該功能在Java項(xiàng)目中引入第三方依賴jacob.jar,其內(nèi)部使用JNI封裝了對動態(tài)鏈接庫jacob-1.18-x86.dll中C++操作系統(tǒng)語音功能接口的方法調(diào)用,所以首先需要將dll文件拷貝到C:\Windows\System32目錄,文件拷貝代碼如圖3所示,將該段代碼的執(zhí)行放在軟件入口處,軟件一經(jīng)啟動就完成dll文件拷貝。另外,還需要把dll文件放到Java環(huán)境的jrein目錄下,在制作.exe文件時(shí)會將jre內(nèi)置進(jìn)去。
圖3 拷貝dll文件代碼
想定報(bào)底中的方位距離是阿拉伯?dāng)?shù)碼,軍事通信都使用軍用數(shù)碼,所以需要將其轉(zhuǎn)換成軍用數(shù)碼,阿拉伯?dāng)?shù)碼與軍用數(shù)碼的對應(yīng)發(fā)音見表1。轉(zhuǎn)換之后,表示目標(biāo)位置的“084,290”就變成了“洞八四兩溝洞”。另外,為適應(yīng)雷達(dá)兵部隊(duì),語音播報(bào)要使用男聲,因此在運(yùn)行軟件之前還需要安裝專門的語音包,避免使用系統(tǒng)自帶的默認(rèn)女聲,安裝文件TTS\NextUp.com-NeoSpeech Chinese Wang16 Voice.msi,選擇語音包和進(jìn)行其它配置都可以通過在播報(bào)內(nèi)容中添加xml標(biāo)簽進(jìn)行設(shè)置,比如指定語音包之后播報(bào)內(nèi)容就是“”,Name的取值對應(yīng)語音包在系統(tǒng)注冊表中的Name屬性值。
表1 軍用數(shù)碼對應(yīng)表
根據(jù)教學(xué)進(jìn)程、學(xué)習(xí)情況、熟練程度需要對想定播報(bào)的速度進(jìn)行調(diào)整,播放速度通過兩個(gè)參數(shù)進(jìn)行控制,一個(gè)是報(bào)讀文本本身內(nèi)容的速度,實(shí)現(xiàn)方式為“”,speed的取值為-10到10,一個(gè)是報(bào)讀每個(gè)目標(biāo)位置之間的間隔時(shí)間,實(shí)現(xiàn)方式為“
→
有時(shí)找點(diǎn)訓(xùn)練結(jié)束后會對軟件判定結(jié)果有所懷疑,所以每次訓(xùn)練都會把找點(diǎn)結(jié)果保存到文件中,這樣可以通過校對結(jié)果與想定報(bào)底來進(jìn)行驗(yàn)證,但是界面上找到的點(diǎn)跡是鼠標(biāo)位置在坐標(biāo)系中相對坐標(biāo)原點(diǎn)在軸、軸方向上的偏移量,而報(bào)底中的數(shù)據(jù)都是方位距離格式,為了便于校對,需要把坐標(biāo)值轉(zhuǎn)換成方位距離數(shù)據(jù)。此外,當(dāng)鼠標(biāo)在界面中移動時(shí),實(shí)時(shí)顯示鼠標(biāo)位置對應(yīng)的方位距離信息,有助于更好地找點(diǎn),這種情況也需要把坐標(biāo)值轉(zhuǎn)換成方位距離。
圖4 坐標(biāo)值轉(zhuǎn)換成方位距離
、的計(jì)算公式如下:
→
在找點(diǎn)訓(xùn)練中,為了在軟件界面上直觀顯示找到的點(diǎn)跡與正確報(bào)底之間的偏差,除了在界面上顯示找到的點(diǎn)跡,還要把想定報(bào)底標(biāo)注在界面上。但由于想定報(bào)底用方位距離表示目標(biāo)位置,軟件界面用坐標(biāo)系中的坐標(biāo)值表示位置,因此需要把方位距離轉(zhuǎn)換成坐標(biāo)值。
圖5 方位距離轉(zhuǎn)換成坐標(biāo)值
Δ、Δ、、的計(jì)算公式如下:
通過三角和反三角函數(shù)將方位距離數(shù)據(jù)轉(zhuǎn)換成屏幕坐標(biāo)值以及坐標(biāo)轉(zhuǎn)換計(jì)算的結(jié)果都是浮點(diǎn)數(shù)類型,而Swing獲取的鼠標(biāo)位置都是整數(shù)類型,浮點(diǎn)數(shù)強(qiáng)制轉(zhuǎn)換成整數(shù)會丟失小數(shù)部分的精度,所以會導(dǎo)致找到的點(diǎn)跡與想定中的對應(yīng)的目標(biāo)位置存在一定誤差。
對于找到的點(diǎn)跡集合中的每一個(gè)數(shù)據(jù),循環(huán)遍歷想定中的目標(biāo)位置集合,逐個(gè)計(jì)算與點(diǎn)跡坐標(biāo)之間的距離,距離小于2 km的都算正確,以此消除找點(diǎn)誤差。
如圖6所示,軟件界面布局分為左右兩部分,左側(cè)是模擬的雷達(dá)掃描界面,同心圓的中心是雷達(dá)所在位置,四個(gè)同心圓分別為與雷達(dá)相距100 km、200 km、300 km、400 km的距離圈,每偏轉(zhuǎn)30°繪制一條方位輔助線。右側(cè)最上面是鼠標(biāo)移動時(shí)在屏幕中的坐標(biāo)實(shí)時(shí)轉(zhuǎn)換成方位距離之后的信息和系統(tǒng)當(dāng)前時(shí)間,想定屬性選擇區(qū)用來指定生成想定時(shí)的參數(shù),包括生成的方位數(shù)據(jù)的要求、距離數(shù)據(jù)的要求、想定個(gè)數(shù),想定播報(bào)區(qū)可以調(diào)整想定播放的速度和選擇訓(xùn)練模式,貫徹由易到難、循序漸進(jìn)的教育訓(xùn)練方針,功能區(qū)提供使用者操作的功能按鈕。
圖6 軟件主界面
聽到語音播報(bào)的方位距離信息之后,在模擬掃描界面可以大致定位其位置,點(diǎn)擊該位置就會顯示放大區(qū)。如圖7所示,放大區(qū)中1~360°每一度都有輔助線,間隔10 km就有距離圈輔助線,按住鼠標(biāo)在放大區(qū)中拖動時(shí),放大區(qū)中黑色數(shù)據(jù)是鼠標(biāo)在屏幕上的坐標(biāo)值實(shí)時(shí)轉(zhuǎn)換成的方位距離,隨鼠標(biāo)同步移動,便于快速準(zhǔn)確找點(diǎn)。
圖7 局部放大
在放大區(qū)中準(zhǔn)確找到目標(biāo)位置后,鼠標(biāo)點(diǎn)擊,放大區(qū)消失,放大區(qū)中的坐標(biāo)等比縮小轉(zhuǎn)換后顯示在模擬掃描界面,如圖8所示。圖中紅色等邊三角形表示找到的點(diǎn)跡,藍(lán)色表示目標(biāo)真實(shí)的位置。找點(diǎn)訓(xùn)練結(jié)束后,左下角面板中顯示正確、錯(cuò)誤、遺漏點(diǎn)數(shù)。
圖8 結(jié)果顯示
采用Java Swing技術(shù)開發(fā)的找點(diǎn)訓(xùn)練軟件,涵蓋了生成想定、載入和語音播報(bào)想定、找點(diǎn)、誤差計(jì)算等主要功能,貫穿計(jì)算機(jī)找點(diǎn)訓(xùn)練的整個(gè)過程,為計(jì)算機(jī)標(biāo)示目標(biāo)完整航跡提供基礎(chǔ)訓(xùn)練。但是語音播報(bào)線程與結(jié)果顯示線程不能異步進(jìn)行,不能同步通信,存在界面顯示的當(dāng)前目標(biāo)點(diǎn)與播報(bào)點(diǎn)不一致問題,另外,當(dāng)前使用的語音包只支持Win7 32位系統(tǒng),這限制了軟件的使用范圍,下一步考慮更換引入DLL播報(bào)語音的方式。