劉 峰,陳 媛,范 偉
(重慶理工大學計算機科學與工程學院,重慶 400054)
虛擬實驗是使用計算機技術實現的一種虛擬實驗環境,操作者可以像在真實的實驗環境中一樣完成各種實驗項目[1-3]。虛擬實驗有實驗開設不受時間、地點限制,能降低實驗設備運行及維護成本投入,緩解高校招生規模不斷擴大與實驗室建設相對滯后的矛盾等特點。同時利用計算機系統強大的數據存儲和處理能力,虛擬實驗還可以擴展出許多現場實驗無法完成的功能,進一步提高實驗管理和實驗效果評價的效率。
目前,國內外很多高校和科研機構都在進行虛擬實驗方面的探索性應用研究[4-7]。經過多年發展,虛擬實驗的應用還未到成熟及普及的階段。虛擬實驗主流開發多采用“建模+交互”的方式,即先用3dMax、Pro/E、VRML、Flash等軟件建立模型,然后使用編程工具(如Java、VRML EAI等)讀取、控制模型,完成場景和模型的控制與交互功能[8-10]。這種開發方式存在對第三方軟件依賴性大、不同軟件間數據融合導致模型讀取效率低等缺點。即便使用了三維模型和場景,但如果沒有虛擬現實系統輔助反饋設備的支持,設計完成的虛擬實驗系統仍然存在參與感不強、現場感缺失等缺點。
本文提出了一種基于“.NET”框架下的虛擬實驗系統的開發方法,以對象的方式來存儲及處理實驗場景中的虛擬器件。器件模型使用二維矢量圖繪制,在本虛擬實驗系統中創建和管理,避免了與第三方建模軟件或系統的交互,具有運行效率高的特點。
虛擬實驗系統是一個基于網絡的實驗教學及技術交流平臺,由系統管理、器件庫管理、實驗控制調度、實驗輔助管理等功能模塊構成,如圖1所示。系統管理模塊完成操作用戶定義及權限分配等功能。操作用戶分管理教師和學生2類角色,分別有不同的操作權限。器件庫管理模塊完成虛擬實驗圖形庫及參數庫的管理,并完成實驗中需要的多種虛擬實驗設備外觀圖形的定制,器材接口參數(個數、類型)定義,非幾何屬性定義等功能。實驗控制與調度模塊完成具體實驗的定義功能,是虛擬實驗系統的核心,包括從器件庫中選取器件來搭建實驗環境、設置各器件間的關聯參數及控制表達式、為虛擬設備綁定及注冊相應事件等功能。實驗輔助管理模塊提供實驗相關幫助、實驗重現及回放、實驗成績評價、成績查詢等功能。

圖1 虛擬實驗系統功能
面向對象(object oriented,OO)是一種編程技術,對象和類是面向對象編程技術的核心。面向對象組件式虛擬實驗系統將需要管理的實驗設備(虛擬器件或元件)抽象為對象模型,以“對象”的方式來管理。
從圖形、描述屬性和輸入輸出(IO)參數3方面可以完整地表述一個虛擬實驗器件。圖形描述表達了實驗器件的外觀信息。描述屬性指虛擬實驗器件所具有的如編號、名稱、分類等描述性信息。輸入輸出參數是虛擬實驗場景中器件間關聯的控制參數。描述屬性和輸入輸出參數也稱虛擬實驗器件的非圖形屬性。
定義1 虛擬設備圖形描述。定義為:Obj=(Id,n,{E1,E2,…,En}),其中:Id 為設備編號,具有全局唯一性;n為該虛擬設備的構成圖元個數;En為具體圖元的定義信息,En=(Eid,Etype,Line-Type,LineWidth,LineColor,HatchColor,Feature-Poins),Eid為子圖元序號,Etype為圖元類型(含點、直線、折線、圓形、圓弧、橢圓、矩形、多邊形等),LineType為線型(實線、點劃線、虛線),Line-Width為線條寬度,LineColor為線條顏色,Hatch-Color為填充顏色,FeaturePoins為序列特征點。
定義2 虛擬設備非圖形屬性。定義為:D=(P,S),其中 P=I∪O∪T,P 為設備接口參數集合,I={I1,I2,…,In}為虛擬設備的輸入參數,O={O1,O2,…,Om)為虛擬設備的輸出參數;T={t1,t2,...tk},為虛擬設備的臨時參數(為了簡化控制表達式的書寫需定義臨時參數);S是虛擬設備的描述屬性,對于任意一個屬性Si,有Si={SName,SKind,SValue},SName為屬性名,SKind為屬性類型,SValue為屬性值。
虛擬實驗場景中,某些設備之間是有關聯的。一個虛擬設備屬性的變化會引起關聯設備屬性的變化,這種關聯可通過虛擬對象綁定事件來驅動,當“對象的屬性值改變”事件發生時,執行相應的行為。
定義3 虛擬設備行為。定義為A=(Aname,Asender,Areceiver,Aparam),其中:Aname為行為名;Asender為行為的發送者;Areceiver為行為的接受者;Aparam為行為相關參數。
虛擬設備庫是實驗場景定義時器件取用的資源庫。虛擬器件分類保存在庫中,圖形屬性信息和非圖形屬性信息分開存儲。虛擬實驗設備圖形信息以二進制流的方式記錄了如線段端點坐標、圓弧半徑、起始角度、線條顏色、背景色等特征信息。器件復用時,系統為實例化的器件指定唯一的設備ID編號。在虛擬實驗場景中,按該設備編號綁定該虛擬器件所具有的非圖形屬性類信息,讀取虛擬場景中圖形對象的特征數據。采用“.NET”框架下GDI+Graphics對象提供的繪圖方法,在Graphics畫布上繪圖完成虛擬場景的圖形展現。處理Graphics畫布的鼠標事件,使用“點在直線上”、“點在區域內”等判斷算法[11],實現虛擬場景中器件的選擇等操作。
各虛擬器件輸入、輸出參數之間存在復雜的控制邏輯,這些控制邏輯在定義虛擬實驗場景時,由操作者以表達式的方式定義。表達式分為邏輯表達式和算術表達式。其中對算術表達式的解析求值是一項復雜且關鍵的任務[12]。中綴表達式因為書寫直觀、符合傳統習慣,在表達式定義和存儲時被采用。后綴表達式求值過程編程實現簡單,因此可先將中綴表達式轉成后綴表達式,再進行后綴表達式的解析計算。將中綴表達式轉成后綴表達式的流程如圖2所示。設置操作符棧,用來暫存操作符。按從左至右順序掃描中綴表達式,當遇到操作數時直接輸出。如遇到操作符,則比較該操作符與棧頂操作符的優先級(當前操作符優先級記為mcp,棧頂操作符優先級記為msp),若mcp大于msp,則當前操作符入棧,否則操作符棧退棧輸出,再進行比較,如此循環直到當前操作符得到處理。當掃描完畢并且操作符棧為空,則轉換完成。

圖2 中綴表達式轉后綴表達式處理流程
后綴表達式求值流程:①初始化2個實型數據棧,一個是操作數棧,用于暫時存放操作數,另一個是參數棧,用于暫存計算函數時的函數參數。②從左至右順次掃描后綴表達式各項,根據取得的符號類型作相應操作。若為操作數,則將其壓入操作數棧;若為算術運算操作符,則從操作數棧取相應操作數作相應的運算,再將結果壓入操作數棧;若是逗號,則從操作數棧彈出一個數據壓入參數棧;若為函數操作符,則從操作數棧中取第1個參數,從參數棧依次取其余的參數作相應的函數計算,并壓棧。③表達式掃描完成,棧頂數為最終計算結果。
從器件庫中取出虛擬器件,由操作用戶按照一定的連接規則,在虛擬實驗場景中搭建出實驗場景。使用“.NET”框架下的委托和事件機制來實現關聯實驗器件間控制參數及狀態值的傳遞時機和行為[13],處理方法為:


基于“.NET”框架,按照面向對象的設計方法,使用GDI+圖形圖像編程等技術,實現了一個組件式虛擬實驗系統。在不使用其他建模工具及虛擬現實支撐軟件的情況下,完成了虛擬實驗器件的二維建模、實驗調度及控制等功能。該系統有一定的實用性,其設計與實現過程對虛擬實驗系統的開發有一定的參考及借鑒意義。
[1]宋象軍.虛擬實驗室在高校實驗教學中的應用前景[J].實驗技術與管理,2005,22(1):35-37.
[2]汪紅波,劉智強,張棉好.模具機構設計虛擬實驗系統研究與開發[J].激光雜志,2010(6):66-67.
[3]郭建,熊云霞,陳康.基于數碼照片的虛擬現實建模技術[J].激光雜志,2011(6):50-51.
[4]陸飛,郭建中.基于虛擬儀器的超聲換能器阻抗分析儀設計[J].壓電與聲光,2011(3):425-428.
[5]單寧,劉霞.激光超聲探傷虛擬儀器設計研究[J].壓電與聲光,2011(4):654-656.
[6]張兢,李成勇,李雪梅,等.基于虛擬儀器技術的數字電路實驗系統的設計與實現[J].重慶理工大學學報:自然科學版,2011(6):33-37.
[7]楊亞讓,劉時進,魏繼濤.VRML在網絡實驗教學中的應用研究[J].軟件導刊,2008,7(12):207-209.
[8]蘇學軍,唐建華,李文,等.基于VRML技術的物理虛擬實驗室的設計[J].實驗技術與管理,2009,26(9):67-69.
[9]劉華偉.V R ML三維實體的參數化建模[J].北京石油化工學院學報,2007,15(3):26-29.
[10]陳斌,陸宇,張愛軍.3DS MAX模型在VRML中的數據簡化[J].北京化工大學學報,2008,35(4):86-89.
[11]徐長青,許志聞.計算機圖形學[M].2版.北京.機械工業出版社,2010.
[12]李文新,慕德俊,馬動濤,等.表達式求值在通用數據模擬器設計中的應用[J].計算機工程與設計,2011,32(6):2187-2192.
[13]胡開明.基于.NET的發卷交卷系統設計[J].重慶工商大學學報:自然科學版,2010(3):252-256.