江 略,丁益民
(湖北大學(xué),湖北武漢 430062)
基于OpenGL的三維電場(chǎng)線(xiàn)模擬
江 略,丁益民
(湖北大學(xué),湖北武漢 430062)
在Visual C++環(huán)境下,設(shè)計(jì)了一種基于OpenGL的三維電場(chǎng)線(xiàn)模擬軟件。該軟件采用微分方程法來(lái)生成電場(chǎng)線(xiàn),可以準(zhǔn)確地模擬不同觀察視角下,靜止點(diǎn)電荷的三維電場(chǎng)線(xiàn)。用戶(hù)可以拖動(dòng)鼠標(biāo)隨意轉(zhuǎn)動(dòng)觀察視角,并可隨意設(shè)置電荷個(gè)數(shù)、分布以及大小。
電場(chǎng)線(xiàn);計(jì)算機(jī)模擬;OpenGL
電場(chǎng)線(xiàn)是電磁學(xué)中的一個(gè)重要的物理概念,由于它既看不見(jiàn)又摸不著,理解起來(lái)不太容易,因此將其形象地展示出來(lái)對(duì)電場(chǎng)線(xiàn)的學(xué)習(xí)具有重要的作用。目前,電場(chǎng)線(xiàn)的繪制有多種方法,如手工描繪法、實(shí)驗(yàn)?zāi)M法以及計(jì)算機(jī)模擬法等。其中計(jì)算機(jī)模擬法具有描繪準(zhǔn)確、操作方便等優(yōu)點(diǎn)。目前已經(jīng)有各種各樣的模擬軟件[1-2]。但是這些軟件要么是預(yù)先算好的,不能由用戶(hù)設(shè)定擺放位置,要么只是局限在二維。為了克服以上的不足,我們?cè)赩isual C++環(huán)境下,通過(guò)調(diào)用Open GL設(shè)計(jì)了一種可以任意改變參數(shù)并可隨意轉(zhuǎn)動(dòng)觀察視角的三維電場(chǎng)線(xiàn)模擬軟件。
1.1 電場(chǎng)線(xiàn)
點(diǎn)電荷在周?chē)臻g產(chǎn)生的電場(chǎng)由庫(kù)侖定律和疊加原理決定[3-4]。根據(jù)電磁理論有
1.2 尋找電場(chǎng)線(xiàn)起點(diǎn)
起點(diǎn)必須平均分布在以電荷為中心的一個(gè)半徑極小的球面上。但事實(shí)上,不是任意一個(gè)數(shù)目的點(diǎn),都可以在球面上均勻分布的。僅有所熟知的五個(gè)正多面體的頂點(diǎn)才是嚴(yán)格意義上的均勻分布。文章采用E·B·Saff和A·B·J·Kuijlaars(1997)[5]對(duì)此提出了一種算法,能夠產(chǎn)生較均勻的分布。
1.3 電場(chǎng)線(xiàn)終止情況判定
電場(chǎng)線(xiàn)終止情況有三種,一是終止于無(wú)窮遠(yuǎn),二是終止于另一個(gè)電荷,三是終止于一個(gè)電場(chǎng)強(qiáng)度為零的點(diǎn)。對(duì)第一種的處理,給一個(gè)限定范圍,超出范圍就不再步進(jìn)。對(duì)第二種的處理,每次步進(jìn)完后判斷一下是否落入另一個(gè)電荷同心小球域即可。對(duì)第三種,每次步進(jìn)之前判斷一下電場(chǎng)是否為零即可。
軟件的操作界面,見(jiàn)圖1。
圖1 軟件操作界面
本程序采用MFC編制,Open GL繪圖[6],界面十分簡(jiǎn)潔,用戶(hù)點(diǎn)擊添加電荷,輸入坐標(biāo)和大小,便可在一定范圍內(nèi)任意添加多個(gè)電荷,點(diǎn)擊清空電荷即可還原。用鼠標(biāo)拖動(dòng)顯示區(qū)便可旋轉(zhuǎn)觀察角度。還可滑動(dòng)鼠標(biāo)滾輪任意縮放。另外本軟件設(shè)立四個(gè)典型的情況對(duì)應(yīng)四個(gè)按鈕,一鍵便可觀察電場(chǎng)模型,這對(duì)于教師展示提供了很大方便。這四個(gè)典型情況分別是單個(gè)電荷,同等異號(hào)電荷,同等同號(hào)電荷,以及只有在三維情況下才有的四面體頂點(diǎn)分布的電荷。
OpenGL是一個(gè)開(kāi)源的三維繪圖SDK。從其官方網(wǎng)站下載庫(kù),頭文件以及源文件,在程序中即可方便地調(diào)用。
使用方法:進(jìn)入Visual C++之后選擇MFC的對(duì)話(huà)框模式,此對(duì)話(huà)框作為母框架。新建一個(gè)類(lèi)GLWnd,從CWnd類(lèi)繼承,在對(duì)話(huà)框類(lèi)中添加一個(gè)它的對(duì)象,這個(gè)對(duì)象作為主要的繪圖區(qū)。在對(duì)話(huà)框初始化的時(shí)候,像普通CWnd類(lèi)一樣生成窗口。然后,在GLwnd初始化的時(shí)候?qū)pen GL初始化。最后只要重載OnPaint()函數(shù),將需求繪圖內(nèi)容添加進(jìn)去即可。
由于視角必須由用戶(hù)調(diào)整,因此必須在鼠標(biāo)移動(dòng)事件中添加消息響應(yīng)函數(shù),記錄鼠標(biāo)移動(dòng)方向,根據(jù)方向設(shè)定Open GL參數(shù),以調(diào)整視角。
電場(chǎng)線(xiàn)的繪制中用紅色表示電勢(shì)高的點(diǎn),藍(lán)色表示電勢(shì)低的點(diǎn),以方便觀察。
首先模擬等量異種電荷的三維電場(chǎng)線(xiàn)。在軟件操作界面上選擇“等量異號(hào)電荷”,再添加電荷的坐標(biāo)值及電量值,單擊確定,在軟件圖形顯示區(qū)中將會(huì)顯示模擬結(jié)果,見(jiàn)圖2。
圖2 雙極子正視圖
用鼠標(biāo)拖動(dòng)顯示區(qū)可旋轉(zhuǎn)觀察視角,當(dāng)設(shè)定視角為45°斜視時(shí),模擬結(jié)果,見(jiàn)圖3。
圖3 雙極子斜視圖
還可以模擬雙桿的電場(chǎng)線(xiàn)分布情況,桿是由七個(gè)等量的電荷排成直線(xiàn)組成,兩桿的電荷是異號(hào)的,觀察角度設(shè)定為45°,模擬結(jié)果,見(jiàn)圖4。
圖4 擬雙桿斜視圖
結(jié)果分析:軟件繪制的電場(chǎng)線(xiàn)由于是根據(jù)電磁學(xué)理論通過(guò)解方程得出,模擬結(jié)果與理論結(jié)果相符合,具有較強(qiáng)的科學(xué)性。該軟件突破了二維限制,能夠展現(xiàn)較為復(fù)雜的三維電場(chǎng)線(xiàn)。但是由于等勢(shì)面在三維條件下不好表示,因此沒(méi)有設(shè)計(jì)此功能。
[1] 姚曉玲,趙萍,劉力.點(diǎn)電荷對(duì)的電力線(xiàn)和等勢(shì)面的計(jì)算機(jī)模擬[J].后勤工程學(xué)院院報(bào),2005(1):72-74.
[2] 錢(qián)懿華,董慎行.用計(jì)算機(jī)模擬點(diǎn)電荷在二維平面上的靜電場(chǎng)[J].大學(xué)物理,2003,22(1)::31-39.
[3] 梁燦彬,秦光戎,梁竹兼.電磁學(xué)[M]2版.北京:高等教育出版社,2004:1-25.
[4] R.P.Feynman,R.B.Leighton,M.Sands.費(fèi)恩曼物理學(xué)講義[M].2卷.上海:上海科學(xué)技術(shù)出版社,2005.
[5] E.B.Saff,A.B.J.Kuijlaars.Distributing many points on the sphere[J].Mathematical Intelligencer,1997,9(1):5-11.
[6] Open GL Architecture Review Board,Dave Shreiner,Mason Woo,Jackie Neider,Tom Davis.OpenGL編程指南[M].6版.北京:機(jī)械工業(yè)出版社,2009.
Three-Dimensional Simulation of Electric Field Lines Based on OpenGL
JIANG Lue,DING Yi-min
(Hubei University,Hubei Wuhan 430062)
In Visual C++environment,we designed a three-dimensional OpenGL-based simulation software of electric field lines.The software generates the electric field line by differential method.It can accurately simulate the static point charge of the three-dimensional electric field lines in different viewport.Users can easily drag the mouse to rotate viewing angle,and change the number of charge point,position and size.
electric field line;computer simulation;Open GL
O 411.3
A
1007-2934(2011)05-0079-03
2011-04-01