徐曉
Box2D是一個可以自動管理物體的不同狀態(tài)(碰撞、彈跳等)、模擬2D剛體物體的物理引擎,其通過創(chuàng)建各種剛體來實現(xiàn)不同效果。在中學(xué)階段,物理學(xué)科中動量守恒定律的內(nèi)容涉及物體運動、物體碰撞等狀態(tài),教師可以通過物理引擎Box2D來進行模擬與控制。筆者利用Flash制作了中學(xué)物理動量守恒定律課件,并運用Box2D物理引擎更好地實現(xiàn)了物理過程,希望學(xué)生能夠更直觀、具體地認識物理知識,以及深層次地理解和應(yīng)用。
● Box2D簡介
最初,Box2D是用C++語言編寫的一個開源的二維物理仿真引擎,因很受歡迎所以衍生出ActionScript3的版本。目前Box2D源文件有兩個版本——2.0.2與2.1a,2.0.2為早期版本,文檔較詳細,在2.0.2基礎(chǔ)上,2.1a做了修改,是新版本,本文介紹的是Flash版。
Box2D具有簡單、有效、實用的特點,可以設(shè)置物體的質(zhì)量、彈性、摩擦力、添加鉸鏈及彈性約束等狀態(tài)。關(guān)于物理中碰撞類、運動規(guī)律類、剛體動力等實驗物理,教師可通過Box2D構(gòu)建實現(xiàn)。
● 基于Box2D的動量守恒定律課件制作分析
1.動量守恒定律教學(xué)中的問題分析
(1)對碰撞問題的理解不透徹
中學(xué)階段的學(xué)生擁有一定的邏輯推理和科學(xué)想象能力,但實驗操作能力不成熟,雖善于觀察周邊的生活,但往往是從感性的角度總結(jié)歸納物理知識,缺乏理性的思考,容易得到一些與科學(xué)背道而馳的觀點。同時,學(xué)生對動量概念理解不透,對碰撞問題的理解比較單一,無法進行系統(tǒng)分析。從機械能損失分類來看物理中的碰撞問題,三種碰撞之間的動量守恒與否,以及動能損失情況對學(xué)生來說是難點,他們的邏輯推理、科學(xué)想象能力還有待提高。
(2)缺乏知識遷移與實際運用能力
學(xué)生在中學(xué)階段已建立良好的感性認識,通過知識建構(gòu),可以順利過渡到物理學(xué)習(xí)中的最近發(fā)展區(qū)。但在實際生活中,缺少物理知識的學(xué)習(xí)情境,學(xué)生在知識遷移、實際運用解決問題等方面有些薄弱。
例如,在動量守恒定律內(nèi)容上,對于子彈打木塊類問題,學(xué)生無法對某個系統(tǒng)動量守恒與否進行準確判斷,在應(yīng)用動量守恒條件時感到困惑,不能順利進行遷移,并解決問題。在動量守恒定律內(nèi)容的應(yīng)用中,在人船模型問題中,速度v和質(zhì)量m,拓展到位移s、質(zhì)量m上面,這個問題的解決對大部分學(xué)生來說,相當棘手。
2.動量守恒定律課件的功能分析
從系統(tǒng)的角度來說,在子彈打木塊類碰撞問題上,子彈、木塊與彈簧三者作為整體,子彈射入木塊到彈簧縮至最短,這個過程中固定端的墻壁對彈簧有外力作用,因此動量不守恒;子彈射入木塊過程中存在摩擦,有部分能量轉(zhuǎn)為內(nèi)能,因此機械能不守恒。若分階段來分析,子彈射入木塊的一瞬間,子彈與木塊二者為一個系統(tǒng),則認為動量守恒;子彈射入木塊中間的壓縮過程,機械能守恒,動量不守恒。通過對階段進行分析,得出一定的物理規(guī)律。在物理學(xué)習(xí)中,對問題分析劃分、過程選取,需要進行二次判斷從而正確進行分析。
● 動量守恒定律課件的實現(xiàn)設(shè)計
1.碰撞管理
在碰撞中,發(fā)生碰撞的兩個物體在碰撞前后的區(qū)域是不限定的,這樣的情況下,物體的初始和碰后移動的區(qū)域就發(fā)生了變化,而畫面的極速跳轉(zhuǎn)不利于學(xué)生觀察動畫,影響其思維轉(zhuǎn)換。在基于Box2D的動量守恒定律課件中,利用Box2D的Box2D.Collision(碰撞、監(jiān)測類)中的b2AABB坐標類來實現(xiàn)區(qū)域的限定,對碰撞進行管理,可使碰撞的效果更佳。
在這個限定區(qū)域兩個物體發(fā)生碰撞,通過這種設(shè)置使得物體的碰撞前后的位移能夠得到精確的計算,在分析碰撞后的動量是否守恒、動能是否有損失、有多大損失方面進行探討,通過分析,學(xué)生對彈性、非彈性以及完全非彈性碰撞三類問題進一步加深理解。
2.碰撞檢測
通過對一般動量守恒定律課件的分析,在兩個物體碰撞時并沒有進行碰撞檢測和管理,這樣物體經(jīng)常被卡住不能前進或者穿越了障礙。在動量守恒定律課件制作中,Box2D物理引擎的碰撞檢測要求為:在一般場景內(nèi),物體可以平行移動;遇到臺階(一定高度內(nèi)),可自動上去,若臺階過高,則需要把人擋住;遇到斜坡(斜率較?。?,可順利上去,否則把物體擋住。需要注意的是,當被擋住前進方向時,應(yīng)盡量讓人物沿合理方向下滑,不能被迫停住。整個過程需要做到穩(wěn)定、精確,防止物體因為特殊情況,穿出或掉出場景。在Box2D物理引擎中,通過Box2D.Dynamics(動態(tài)類)中的b2ContactListener(用來獲取碰撞結(jié)果類)來完成,代碼中,首先需要寫一個繼承自b2ContactListener的類(如圖1)。
3.碰撞實現(xiàn)
基于Box2D實現(xiàn)動量守恒定律課件的功能設(shè)計分析,為Box2d的b2World對象加入listener(代碼如圖2),來實現(xiàn)碰撞。最后,對myListener的isWin和isLost屬性進行判斷即可。
將Box2D物理引擎引入物理實驗的設(shè)計活動中,可簡單、高效地進行物理實驗教學(xué)課件的開發(fā),使得物理實驗效果更加真實。同時,這種方法可在其他多媒體課件中應(yīng)用。
● 研究總結(jié)
基于Box2D實現(xiàn)模擬物理實驗,如游弋在一個與現(xiàn)實世界截然不同且又能很好地理解的物理世界,Box2D在動量守恒定律課件制作中的應(yīng)用研究,就是人們對物理引擎在物理課件中應(yīng)用的不斷深入認知與創(chuàng)新。筆者也相信,目前物理引擎應(yīng)用于物理學(xué)課件中的方法會被更好的方法取代。