程 飛
(安徽電子信息職業(yè)技術(shù)學(xué)院電子工程系,安徽 蚌埠 233000)
當(dāng)前,科技類場(chǎng)館開展科普工作主要通過三種手段:(1)實(shí)物模擬,(2)采用多媒體技術(shù),利用聲光電營造場(chǎng)館環(huán)境,(3)微視頻展示科學(xué)原理,(4)利用虛擬現(xiàn)實(shí)技術(shù)。對(duì)于第一類,觀眾一般不能觸摸實(shí)物模型,第二類技術(shù)對(duì)于傳播科技知識(shí)作用有限,而對(duì)于第三類,觀眾一般情況下僅能通過視頻了解科學(xué)原理和科技知識(shí),被動(dòng)接受得多,主動(dòng)參與得少。第四類則依賴于硬件設(shè)備(如VR頭盔等)??傮w看來,科普平臺(tái)的展示功能較多,而具有交互功能的科普平臺(tái)較為少見。如果結(jié)合計(jì)算機(jī)圖形學(xué)技術(shù),開發(fā)具有交互功能的科普虛擬平臺(tái),可以有效提高科普效果,促進(jìn)科學(xué)知識(shí)的傳播。本文結(jié)合中國科協(xié)科普大賽的命題《輪旋線》為例,結(jié)合軟件工程理論,詳述交互式科普平臺(tái)的設(shè)計(jì)方法。
一個(gè)動(dòng)圓(圓心為O,半徑為r)在一條定曲線L上滾動(dòng)時(shí),與動(dòng)圓圓心O距離為定值c的點(diǎn)P的軌跡稱為輪旋線[1],又稱擺線。OP稱為擺軸,且c=|OP|。一般L為直線或者圓。如果L為直線,稱為普通擺線(如圖1所示)。如果L為定圓,分為兩種情況,稱為內(nèi)圓擺線(如圖2所示)和外圓擺線(如圖3所示)。若c>r,稱為長(zhǎng)軸擺線,若c<r,稱為短軸擺線。圖4從左至右顯示了c>r、c=r、c<r三種內(nèi)圓擺線的形成過程。
圖1 普通擺線
圖2 內(nèi)圓擺線
圖3 外圓擺線
圖4 三種內(nèi)圓擺線
從交互式科普角度考慮,虛擬平臺(tái)應(yīng)能夠動(dòng)態(tài)、交互表達(dá):(1)擺線的形成過程(2)擺線的數(shù)學(xué)表達(dá)式(3)擺線的特殊性質(zhì)(4)擺線的簡(jiǎn)史(5)擺線的應(yīng)用(6)擺線的繪制。由于科普平臺(tái)的作用是激發(fā)科學(xué)研究的興趣,對(duì)于公式的推導(dǎo)和理論一般不做展開。
基于教育心理學(xué)的理論,人類視覺對(duì)于運(yùn)動(dòng)的物體比靜止的物體敏感;此外,在立體的場(chǎng)景中多視圖觀察形體,所獲得的信息量遠(yuǎn)大于固定視角所獲得的信息量。因而,將擺線的動(dòng)態(tài)形成過程置于三維場(chǎng)景中,場(chǎng)景的視角可以變換,其效果如圖5所示。這里視角矢量為(1,1,1),即軸側(cè)觀察。該圖顯示了各種擺線的形成過程。
圖5 各種擺線的形成過程
這里采用底層引擎OpenGL作為開發(fā)工具[2]。這是因?yàn)椋海?)OpenGL具有良好的浮點(diǎn)計(jì)算能力,特別適用于數(shù)學(xué)函數(shù)處理;(2)其動(dòng)態(tài)刷新功能可以保證動(dòng)畫效果的實(shí)現(xiàn);(3)其顯示表功能可以實(shí)現(xiàn)場(chǎng)景中的中英文字標(biāo)注,還可以方便載入圖片說明;(4)合理調(diào)用VC++的sleep函數(shù),可以實(shí)現(xiàn)場(chǎng)景的自動(dòng)變換,可以以微視頻的形式輸出;(5)基于VC++的一檔多視技術(shù)[3],可以增加表單視(FormView),易于實(shí)現(xiàn)設(shè)計(jì)交互式界面,如圖5左半部分所示。
限于篇幅,本文僅以(1)外擺線的形成(2)等時(shí)降線(3)最速降線為例說明詳細(xì)設(shè)計(jì)的思路和方法。
外擺線如圖3所示,其方程為[1]:
其中,a為定圓半徑,b為動(dòng)圓半徑,c為動(dòng)圓圓心O到點(diǎn)P的距離,即c=|OP|,θ對(duì)應(yīng)于動(dòng)圓的自轉(zhuǎn)角度。給定a,b(一般情況下a、b取有理數(shù)),如果a/b可以化為最簡(jiǎn)分式m/n(m、n為互質(zhì)整數(shù)),則動(dòng)圓將會(huì)繞定圓公轉(zhuǎn)m圈,同時(shí)自轉(zhuǎn)n圈(即共計(jì)自轉(zhuǎn)n*2π弧度),回到起點(diǎn)[4]。每自轉(zhuǎn)一圈,形成擺線的一瓣。如圖3所示,a=3,b=1,c=1.5,動(dòng)圓公轉(zhuǎn)1圈,同時(shí)完成三次自轉(zhuǎn),形成擺線的3瓣。OpenGL下,擺線的動(dòng)畫實(shí)現(xiàn)步驟如下:
(1)計(jì)算n.給定a,b,計(jì)算a/b,化為最簡(jiǎn)分式m/n,得到n;
(2)計(jì)算曲線上的各個(gè)數(shù)據(jù)點(diǎn)。因?yàn)棣取蔥0,n*2π],將[0,n*2π]均分1 000份,令,代入(1)式,計(jì)算各個(gè)θi所對(duì)應(yīng)的pi(xi,yi)。
(3)繪制圖形,OpenGL用多段直線描繪曲線。給定一個(gè)整數(shù)t,繪制直線P0P1,…,Pt-1Pt。t初始化為0,每次OpenGL刷新重繪的時(shí)候t增加1,即每次刷新圖形多繪制一段直線,從而實(shí)現(xiàn)擺線繪制動(dòng)畫。當(dāng)t=1 000時(shí),置t=0,重新繪制。關(guān)鍵代碼如下:
為了增加動(dòng)畫效果,定圓繪制完成后,還要繪制動(dòng)圓以及動(dòng)圓上的擺軸OP的運(yùn)動(dòng),如圖3所示。定圓和動(dòng)圓圓周的繪制方法參考相關(guān)文獻(xiàn)[5]。只要知道動(dòng)圓的圓心,就可以通過每次刷新重繪動(dòng)圓,表現(xiàn)動(dòng)圓沿定圓圓周滾動(dòng)。采用下面的語句移動(dòng)動(dòng)圓的圓心:
進(jìn)一步通過動(dòng)圓的自轉(zhuǎn)實(shí)現(xiàn)擺軸OP的運(yùn)動(dòng)效果,關(guān)鍵語句如下:
繪制效果如圖3所示,由圖可見,P點(diǎn)的運(yùn)動(dòng)形成了外擺線。對(duì)于內(nèi)擺線和普通擺線的情形,用同樣的方法繪制,不再贅述。圖1、圖2、圖3顯示了擺軸OP的旋轉(zhuǎn)以及P點(diǎn)的運(yùn)動(dòng)產(chǎn)生擺線的過程。
多個(gè)小球從擺線的不同高度同時(shí)沿?cái)[線下落,會(huì)同時(shí)到達(dá)最低點(diǎn),這就是擺線的等時(shí)降線特性[4]。圖6(a)顯示了位于擺線上不同高度的小球,按下“啟動(dòng)”按鈕后,各個(gè)小球同時(shí)沿?cái)[線下滑,圖6(b)顯示了各點(diǎn)同時(shí)到達(dá)最低點(diǎn)。
圖6 等時(shí)降線和最速降線
為了表現(xiàn)具有真實(shí)感的小球下滑過程,需要依據(jù)物理學(xué)的原理計(jì)算小球沿等時(shí)降線下滑的相關(guān)位置數(shù)據(jù)。思路如下:假設(shè)從初始點(diǎn)下滑到最低點(diǎn)的總時(shí)間為nt,小球在it時(shí)刻的位置即為H(i),(i=0,1,2,3,…,n;特別的,i=0時(shí)記為H,i=1時(shí)記為H’,i=2時(shí)記為H”)。第i次刷新的時(shí)候,在位置H(i)繪制小球。每次刷新重繪的時(shí)間間隔都是相同的,但是小球移動(dòng)的距離 d(i)=|H(i)-H(i-1)|不同,這樣就表現(xiàn)出真實(shí)感的動(dòng)畫效果。下面計(jì)算H(i)(i=1,2,3,…,n),為簡(jiǎn)化問題,這里僅計(jì)算H,H’以及H”。
圖7 小球沿?cái)[線下滑位置計(jì)算
如圖7所示,|AB|=α,擺線的方程為:
小球初始位置位于H,坐標(biāo)表示為H(m,h),t時(shí)刻位于H’(m’,h’),2t時(shí)刻位于H”(m”,h”)。過H作x軸的平行線,交y軸于A1,以O(shè)A1為直徑作輔助圓O1,過H’、H”作x軸的平行線,交輔助圓于A2、A3,則∠A1O1A2=∠A2O1A3=β。即重力作用下小球下落時(shí)各個(gè)位置點(diǎn)的縱坐標(biāo)的值等于一個(gè)小球沿輔助圓O1勻速轉(zhuǎn)動(dòng)(角速度為,g為重力加速度)時(shí)相應(yīng)位置點(diǎn)的縱坐標(biāo)的值。這樣,H’點(diǎn)的縱坐標(biāo)就可以表示為:
代入(2)式的第2式,有
求得
再將(5)式代入(2)式的第1式,求出H點(diǎn)的橫坐標(biāo)。
而H”點(diǎn)的縱坐標(biāo)就可以表示為:
采用和上面相同的方法,可以求出H”點(diǎn)的橫坐標(biāo),以及所有關(guān)鍵點(diǎn)的位置坐標(biāo)。
可以證明,小球下落的時(shí)間與初始位置無關(guān)[4](證明請(qǐng)參閱相關(guān)文獻(xiàn))。小球初始位置不同,沿?cái)[線下滑,最終同時(shí)下落到最低點(diǎn)。等時(shí)降線詳細(xì)設(shè)計(jì)的思路如下:給定初始位置H’(m’,h’),首先在初始位置繪制小球;OpenGL刷新一次(對(duì)應(yīng)于經(jīng)過t時(shí)刻),在H”(m”,h”)位置小球;以此類推,計(jì)算其余關(guān)鍵點(diǎn)的位置數(shù)據(jù)。小球沿?cái)[線下滑的動(dòng)畫效果如圖6(a)、(b)所示。小球到達(dá)最低點(diǎn)以后,由于其具有水平速度,會(huì)沿?cái)[線的左半部分繼續(xù)上升,即動(dòng)畫的效果是小球沿?cái)[線來回震蕩。關(guān)鍵代碼如下:
如圖6(c)(d)所示,在從起點(diǎn)到終點(diǎn)的所有連線中,小球沿?cái)[線下落速度最快,稱為最速降線性質(zhì)[4]。圖6(c)顯示了小球沿直線和擺線同時(shí)下落,圖6(d)顯示小球沿?cái)[線到達(dá)最低點(diǎn)的時(shí)候,沿直線下落尚未到達(dá)最低點(diǎn)。其設(shè)計(jì)方法和數(shù)據(jù)計(jì)算類似4.2,這里不再贅述。
圖8 載入圖片
圖9 顯示表技術(shù)導(dǎo)入字體
OpenGL性能良好的底層圖形庫,結(jié)合VC++的強(qiáng)大的數(shù)學(xué)處理能力,特別適合于基于物理原理的交互式科普軟件設(shè)計(jì),可以反映真實(shí)的物理實(shí)驗(yàn)環(huán)境,給科普參與者以真實(shí)的科普體驗(yàn)。不僅如此,OpenGL還可以導(dǎo)入圖片(如圖8所示,用圖片形式描述擺線簡(jiǎn)史),通過顯示表技術(shù)導(dǎo)入不同字體的文字,并可以通過sleep()自動(dòng)生成科普視頻,滿足特定的科普需求(如圖9所示視頻截圖)?;贠penGL設(shè)計(jì)科普交互式軟件,是實(shí)現(xiàn)真實(shí)感的虛擬科普?qǐng)鼍暗挠行緩健?/p>
西昌學(xué)院學(xué)報(bào)(自然科學(xué)版)2018年4期