梁見斌
為讓學(xué)生通過仿真實(shí)踐,體驗(yàn)使用計(jì)算機(jī)編程解決問題的全過程,掌握分支和循環(huán)等算法結(jié)構(gòu),熟練使用Python內(nèi)置模塊和自定義函數(shù),理解模塊化編程思想,筆者嘗試使用海龜繪圖模塊編程來設(shè)計(jì)簡單的物理仿真程序。從仿真自由落體運(yùn)動(dòng)、平拋運(yùn)動(dòng)和斜拋運(yùn)動(dòng),到實(shí)現(xiàn)漫天煙花效果,項(xiàng)目難度不斷進(jìn)階,最后鼓勵(lì)學(xué)有余力的學(xué)生自主學(xué)習(xí)交互式操作和面向?qū)ο缶幊谭椒ǎ@得更炫目的漫天煙花視覺效果,逐步形成了從易到難的計(jì)算思維的培養(yǎng)。
項(xiàng)目一:繪制自由落體運(yùn)動(dòng)物體徑跡圖
仿真技術(shù)是利用計(jì)算機(jī)并通過建立模型進(jìn)行科學(xué)實(shí)驗(yàn)的一門多學(xué)科綜合性技術(shù)。人們對(duì)現(xiàn)實(shí)系統(tǒng)進(jìn)行簡化和模仿,建立相關(guān)模型,并對(duì)該模型進(jìn)行試驗(yàn),從中得到所需的信息,然后幫助人們更好地理解現(xiàn)實(shí)世界。
在物理課上,由于實(shí)驗(yàn)條件的限制,沒有暗室操作頻閃照片的實(shí)驗(yàn),只能簡單介紹其工作原理,學(xué)生缺乏對(duì)頻閃照片的感性認(rèn)識(shí),不能準(zhǔn)確理解物理過程。教師可以根據(jù)自由落體運(yùn)動(dòng)規(guī)律,使用編程繪圖動(dòng)態(tài)模擬運(yùn)動(dòng)過程,并獲得相應(yīng)的仿真實(shí)驗(yàn)照片,幫助學(xué)生理解物理規(guī)律。
為了讓學(xué)生體驗(yàn)使用計(jì)算機(jī)編程解決問題的全過程,教師可以將實(shí)際實(shí)驗(yàn)獲得的頻閃照片和仿真實(shí)驗(yàn)繪制的粒子徑跡圖展示給學(xué)生,先讓學(xué)生分析如何抽象建模和設(shè)計(jì)算法,再編寫代碼和調(diào)試程序。因?yàn)楸卷?xiàng)目的重點(diǎn)是解析算法的應(yīng)用,如果學(xué)生對(duì)繪圖模塊不是很熟悉,教師可以提供半成品參考代碼,對(duì)繪圖相關(guān)語句進(jìn)行說明,學(xué)生只需填寫計(jì)算坐標(biāo)的核心代碼。
繪制自由落體運(yùn)動(dòng)粒子徑跡圖的算法比較簡單,只需設(shè)置好初始位置坐標(biāo),然后每隔一段時(shí)間獲取t時(shí)刻物體的位置坐標(biāo),并在該位置繪制一個(gè)白色小球即可。根據(jù)自由落體運(yùn)動(dòng)規(guī)律,小球的x坐標(biāo)不變,t時(shí)間內(nèi)下落高度為h=0.5*g*t*t。這是典型的解析算法,只要學(xué)生熟悉物理公式,就可以直接寫出賦值語句。
因?yàn)楹}斣谄聊恢幸苿?dòng)的距離是以像素為單位,所以我們需要為下落高度乘以一個(gè)放大倍數(shù)mult,以獲得合適的距離;同時(shí)考慮海龜?shù)倪\(yùn)動(dòng)方向與y軸正方向相反,故計(jì)算y坐標(biāo)的解析式為y=-0.5*g*t*t*mult。
為了獲得理想的仿真實(shí)驗(yàn)效果,還可以引導(dǎo)學(xué)生對(duì)程序進(jìn)行多次調(diào)試,合理設(shè)置時(shí)間間隔、放大倍數(shù)和重力加速度等參數(shù)值。核心代碼略。
項(xiàng)目二:繪制平拋運(yùn)動(dòng)物體徑跡圖
在自由落體運(yùn)動(dòng)的基礎(chǔ)上,可以讓學(xué)生進(jìn)一步研究平拋運(yùn)動(dòng)。平拋運(yùn)動(dòng)分解為水平方向的勻速直線運(yùn)動(dòng)和豎直方向的自由落體運(yùn)動(dòng),教師可以引導(dǎo)學(xué)生先繪制兩個(gè)分運(yùn)動(dòng)的頻閃照片,再處理合運(yùn)動(dòng),通過對(duì)比分析3個(gè)小球的頻閃照片,可以更好地理解物理模型。
有了模擬自由落體運(yùn)動(dòng)的程序,模擬平拋運(yùn)動(dòng)的代碼不難寫出,只需在原有代碼的基礎(chǔ)上增加一個(gè)表示水平初速度的變量vx,并在循環(huán)體中增加計(jì)算水平位移的賦值語句x=vx*t*mult即可。核心代碼略。
項(xiàng)目三:繪制斜拋運(yùn)動(dòng)物體徑跡圖
學(xué)生掌握仿真平拋運(yùn)動(dòng)的方法后,可以進(jìn)一步擴(kuò)展到斜拋運(yùn)動(dòng),并使用這個(gè)例子來進(jìn)行自定義函數(shù)的教學(xué)。
一些教師在教授自定義函數(shù)時(shí),把重點(diǎn)放在了語法教學(xué)上,筆者認(rèn)為這是不妥當(dāng)?shù)?。Python的自定義函數(shù)語法相當(dāng)復(fù)雜,其形式參數(shù)就有必需參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)、不定長參數(shù)等多種類型,更別說各種實(shí)參的變異寫法和復(fù)雜的閉包語法了。這些復(fù)雜的語法不是光靠死記硬背就能掌握的,需要多次實(shí)踐的積累才能逐步理解。題目是做不完的,知識(shí)也教不完,“師傅領(lǐng)進(jìn)門,修行靠個(gè)人”,教師主要起到引導(dǎo)學(xué)生入門和指明前進(jìn)方向的作用,具體的知識(shí)和技能還是要靠學(xué)生自己去領(lǐng)悟和理解。
筆者認(rèn)為,自定義函數(shù)的教學(xué)重點(diǎn)應(yīng)該是讓學(xué)生理解模塊化編程的作用,初步掌握模塊化編程的方法,能夠根據(jù)需要設(shè)計(jì)自定義函數(shù)(包括明確函數(shù)功能、設(shè)置參數(shù)和返回值、給出樣例演示等)。其中,設(shè)計(jì)自定義函數(shù)是重中之重,需要反復(fù)練習(xí)和比較,力求達(dá)到意義明確、格式規(guī)范、表述簡明的目標(biāo)。
模塊化的目的是降低程序復(fù)雜度,使程序設(shè)計(jì)、調(diào)試和維護(hù)等操作簡單化。利用函數(shù),可以實(shí)現(xiàn)程序的模塊化,使得程序設(shè)計(jì)更加簡單和直觀,從而提高程序的易讀性和可維護(hù)性。那么本案例需要把哪些功能模塊化?又如何設(shè)計(jì)函數(shù)呢?
分析斜拋運(yùn)動(dòng)粒子徑跡圖,發(fā)現(xiàn)它是由一個(gè)個(gè)處在特定位置的白色小球排列而成,因此可以把繪制一組白色的斜拋運(yùn)動(dòng)粒子作為基本功能模塊。那么,要把斜拋運(yùn)動(dòng)粒子徑跡圖繪制出來,需要明確它的哪些屬性呢?(其實(shí)這里已經(jīng)暗含面向?qū)ο蟮乃枷肓耍徊贿^時(shí)機(jī)未到,暫時(shí)不點(diǎn)破)
教師可以引導(dǎo)學(xué)生從函數(shù)功能、函數(shù)名、參數(shù)表和返回值的角度逐個(gè)分析,最后整理出一份完整的函數(shù)頭說明文檔。參考示例略。
項(xiàng)目四:同時(shí)繪制多個(gè)粒子(單個(gè)煙花)斜拋運(yùn)動(dòng)徑跡圖
自定義函數(shù)oblique_throw()只能繪制單個(gè)粒子斜拋運(yùn)動(dòng)徑跡圖,為了實(shí)現(xiàn)漫天煙花的效果,先要學(xué)會(huì)同時(shí)繪制多個(gè)粒子斜拋運(yùn)動(dòng)徑跡圖的方法。
在繪制單個(gè)粒子徑跡圖時(shí),只需使用一重循環(huán),計(jì)算出粒子在各時(shí)刻的位置坐標(biāo),并在該位置繪制一個(gè)代表該粒子的圓點(diǎn)即可。為了同時(shí)繪制多個(gè)粒子的徑跡圖,需要使用二重循環(huán),其中外層循環(huán)控制時(shí)間,內(nèi)層循環(huán)依次繪制各個(gè)粒子。
為了對(duì)不同的粒子進(jìn)行區(qū)分,需要設(shè)置3個(gè)列表v、a、c分別表示各粒子的初速度、角度和顏色信息,并通過使用隨機(jī)數(shù)模塊來為各個(gè)粒子設(shè)置不同的顏色和初速度等屬性。
為了實(shí)現(xiàn)煙花效果,需要設(shè)置合理的粒子數(shù)量、放大倍數(shù)和重力加速度值,并為每一朵煙花(粒子群)設(shè)置一支畫筆,刷新每一幀畫面。在繪制完該粒子群的所有圖像后,還要清除畫筆,讓煙花消失,才能繪制另一朵煙花。
同樣,教師可以引導(dǎo)學(xué)生分析函數(shù)功能、函數(shù)名、參數(shù)表和返回值,整理出函數(shù)頭說明文檔。參考示例略。
項(xiàng)目五:交互式操作和面向?qū)ο螅c(diǎn)放漫天煙花效果)編程方法
自定義函fireworks()雖然通過同時(shí)繪制多個(gè)粒子斜拋運(yùn)動(dòng)徑跡圖的方法,實(shí)現(xiàn)了放煙花的動(dòng)態(tài)效果,但是它每次只能繪制一朵煙花,而且顏色不能動(dòng)態(tài)變化,與實(shí)際的煙花效果還有一段距離。要想獲得更絢麗的漫天煙花效果,需要使用面向?qū)ο蟮木幊碳夹g(shù),構(gòu)造一個(gè)煙花類,可以同時(shí)生成多個(gè)煙花實(shí)例,四處綻放,還可以采用交互方式,實(shí)現(xiàn)在鼠標(biāo)點(diǎn)擊處生成煙花的功能。
面向?qū)ο缶幊趟枷敫先祟惖淖匀凰季S方式,學(xué)生理解起來比較自然,可以把源代碼和相關(guān)資料提供給學(xué)生,鼓勵(lì)學(xué)有余力的學(xué)生課后自學(xué),通過調(diào)整參數(shù)、修改代碼,實(shí)現(xiàn)更為炫目的煙花效果。
綜合以上分析,上述項(xiàng)目從最簡單的“繪制自由落體運(yùn)動(dòng)物體徑跡圖”開始,逐次增加難度,學(xué)生面對(duì)的每一次挑戰(zhàn)都是建立在之前經(jīng)驗(yàn)的基礎(chǔ)上,并不顯得突兀,遵循“最近發(fā)展區(qū)”教學(xué)規(guī)律。項(xiàng)目一和項(xiàng)目二,主要學(xué)習(xí)解析算法和使用繪圖模塊編寫物理仿真程序的基本原理,相對(duì)簡單,可以在一個(gè)課時(shí)里完成教學(xué)任務(wù);項(xiàng)目三和項(xiàng)目四,主要學(xué)習(xí)自定義函數(shù)的構(gòu)造和使用方法,其中項(xiàng)目四還運(yùn)用了列表和二重循環(huán)等難度較大的知識(shí)點(diǎn),綜合度較高,預(yù)計(jì)需要兩個(gè)課時(shí);項(xiàng)目五需要用到交互式操作和面向?qū)ο缶幊谭椒?,已?jīng)超出了高中信息技術(shù)必修課的教學(xué)要求,但是趣味性比較高,而且難度也不大,可以引導(dǎo)學(xué)有余力的學(xué)生通過自學(xué)實(shí)現(xiàn)相關(guān)功能。
蒼山點(diǎn)題
計(jì)算思維作為信息技術(shù)學(xué)科核心素養(yǎng)之一,是信息化社會(huì)中數(shù)字公民所應(yīng)具備的基本素養(yǎng)?,F(xiàn)在普遍的觀點(diǎn)是在編程教學(xué)中更容易培養(yǎng)計(jì)算思維,計(jì)算思維培養(yǎng)的模式、實(shí)踐與案例也是新課程教學(xué)研究中最受關(guān)注的焦點(diǎn)。
第一篇文章,對(duì)計(jì)算思維內(nèi)涵及其對(duì)學(xué)生發(fā)展的意義進(jìn)行分析,提出計(jì)算思維的培養(yǎng)應(yīng)夯實(shí)學(xué)生信息技術(shù)學(xué)科思想和方法基礎(chǔ),培養(yǎng)學(xué)生運(yùn)用計(jì)算思維解決問題的關(guān)鍵能力,以簡明、實(shí)操性強(qiáng)的教學(xué)模式來指引教師在教學(xué)中落實(shí)計(jì)算思維,并提出“不插電的計(jì)算思維”等直觀教學(xué)、基于問題解決的計(jì)算思維培養(yǎng)以及在教學(xué)中的應(yīng)用等教學(xué)策略和方法。
第二篇文章,通過對(duì)“繪制自由落體運(yùn)動(dòng)物體徑跡圖、繪制平拋運(yùn)動(dòng)物體徑跡圖、繪制斜拋運(yùn)動(dòng)物體徑跡圖、繪制多個(gè)粒子(單個(gè)煙花)斜拋運(yùn)動(dòng)徑跡圖、交互式操作和面向?qū)ο螅c(diǎn)放漫天煙花效果)編程方法”五個(gè)項(xiàng)目的進(jìn)階設(shè)計(jì),基本可以讓學(xué)生熟悉解析算法的基本特征,掌握自定義函數(shù)的基本方法,理解模塊化編程和面向?qū)ο缶幊痰幕舅枷?。在編程?shí)踐過程中,學(xué)生還加深了對(duì)物理規(guī)律的理解,掌握了物理仿真技術(shù)的基本方法,從而可以使用編程繪圖等工具去實(shí)現(xiàn)更多更復(fù)雜的物理仿真模型,提升計(jì)算思維水平。