陸韻 江蘇省南京市雨花臺中學
蒲豐投針實驗是一個出現在多本中學數學教材中的經典幾何概型實驗,其實驗過程是在平面上畫一組間距為a的等距平行線,然后向此平面隨機投擲一些長度為l(l≤a)的針,當時,針與平行線相交概率P為。在教學過程中,筆者發現學生對隨機投針之后,針與平行線相交的概率近似為圓周率的倒數這一現象非常感興趣,這一現象背后的原理如下:
如圖1所示,設針的中點為M,M到與之最近的平行線的距離為針與平行線的夾角為α,α∈(0,π),X與α相互獨立。當針的中點與最近的平行線滿足以下條件時兩者相交,即

圖1
蒲豐投針實驗中每一次投針都可以看作是一個點,將針中點到最近的平行線的距離作為橫坐標,將針與平行線的角度作為縱坐標畫出圖像,大量投針所產生的點組成如圖2所示的長度為π、寬度為的矩形。

圖2
當點落在圖中余弦圖像與縱軸圍成的半圓弧內時,針和平行線相交,令矩形面積為S1,小半圓型面積為S2,兩者的比值是:當時,通過化簡可得
網絡畫板是一款幾何構圖軟件。它使用簡單,無需下載,在網頁端使用軟件自帶的坐標系和畫筆工具就可以構造出常見的幾何圖形和坐標系,可以進行2D、3D作圖,也可以做出許多復雜的動畫效果。使用網絡畫板模擬蒲豐投針實驗的步驟包括設置隨機投針過程、針的數量和長度,相交針的數量統計以及π值的估算等環節,具體步驟如下表所示。
圖形化界面能夠讓使用者直觀地進行創作,對于不具備編程基礎的學生和教師來說較為友好,但是存在如下幾個問題。
第一,網絡畫板的編輯調試和運行在同一個界面,制作較為復雜的動畫時界面顯得十分擁擠。例如,在下頁圖3中,如果要將投針實驗對應的幾何概型圖(在圖片右側)同步呈現出來,畫面就會變得凌亂,參數和表達式只能插空放置。

圖3
第二,網絡畫板的編輯和運行在同一個界面,增加了誤操作的幾率。例如,在使用時,學生容易誤以為直接調整變量n的值,就能改變投針的總數量,但實際上,這樣的設置是無效的,變量n只會客觀反映當前被投擲的針的數量,如果要改變總的投針數量必須對投擲動畫進行重新設置,改變它的起止值。
第三,網絡畫板調試糾錯的難度較大,在編輯時,每一步都會創建一個或者多個對象,程序運行順序按照對象創建的順序從上到下逐一進行,對象之間的順序無法隨意調整,如有一步遺漏,則需要刪除多個步驟進行重新編輯。如果想實現較為復雜的投針效果,如對相交與不相交的針分別設置不同顏色就需要學生在創作時進行較為完整的思考,確定每一個環節的先后順序,否則,隨著程序復雜性的提高,糾錯和調試會變得越來越困難。

步驟 功能 備注1 畫出若干間隔為1的平行線段 線段功能 在示例程序中繪制了7條長度為10的平行線,以此為基礎,隨機產生的針的端點坐標范圍應該在(0,0)到(10,7)之間2 設置投針數量和針長兩個變量 變量功能 可以使用快捷鍵Ctrl+shift+P 3 隨機產生每一根針端點A的坐標 計算功能直角坐標點功能橫坐標m000: random(0, 10) * l ^ n縱坐標m001: random(0, 7) * l ^ n注:n為投針的總數量4 隨機產生一個(0,π)的角度 計算功能 M002: random(0, pi) * l ^ n 5 計算每一根針端點B的坐標 計算功能直角坐標點功能橫坐標M003:m000 + l * cos(m002)縱坐標M004:m001 + l * sin(m002)注:l為針的長度6 判斷是否與已有線段相交 變量功能計算功能M006:if(floor(m001) != floor(m004), 1, 0)注:因為平行線對應的函數是y=1、y=2……y=7,如果針的兩個端點縱坐標的整數部分不等于同一個整數,那么這根針必與某條平行線相交7 相交針的數量統計 計算功能 M007:abs(sign(n)) * m006 + m006 8 π值的估算 計算功能 a/M007 9 用線段連接A,B兩點 線段功能 選中A,B兩點,在基礎設置中點選跟蹤10 設置初始化動畫 動畫功能 設置動畫文本為初始化,序列為并行,類型為一次,次數為0,變量為n,起止皆為0,步數和間隔都是1 11 設置投擲動畫 動畫功能 設置動畫文本為初始化,序列為并行,類型為一次,次數為0,變量為n,起為0,止為1000,步數為1000,間隔為1
Python是一種使用廣泛的編程語言,是當前多個版本的高中信息技術教材中的必修內容。NumPy(Numerical Python)是Python語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。Matplotlib是一個用于繪圖的Python擴展程序庫,可以用來繪制各種靜態、動態交互式的圖表。它能讓使用者很輕松地將數據圖形化,并且提供多樣化的輸出格式。使用Python語言并調用NumPy和Matplotlib庫同樣能夠模擬蒲豐投針實驗。
使用Python模擬蒲豐投針實驗并展示幾何概型圖像的程序可分為以下幾個步驟(如圖4):①畫出若干條等距的平行線,本文中的演示代碼以兩條平行線為例;②利用隨機函數random()產生每根針中心點的坐標和角度;③使用第一節中提到的關系式(1)判斷針和平行線是否相交,即當針的中點與最近的平行線的距離小于等于針長的一半乘以針與平行線夾角的余弦值時兩者相交;④根據相交情況畫出投針圖像和幾何概型動圖;⑤根據相交針的數量和投針總數估算π的值。

圖4
網絡畫板必須按照“畫坐標系和平行線——隨機產生針的端點坐標——判斷點是否與平行線相交”這一順序進行設置。在編寫Python程序時,以上步驟可以分別設置為一個函數(如圖5),在確定需要用到的變量、函數名和參數格式后,學生可自由選擇函數編寫的先后順序,甚至可以多人合作編寫,最后再將多人合作的成果組合起來,通過調用各個函數完成模擬投針程序的制作。

圖5
使用Python對蒲豐投針實驗進行模擬解決了上文提到的編輯調試和運行處于同一個頁面從而使用戶可能會誤操作的問題。Python中代碼編輯和運行分開,使用input()函數接收用戶輸入。在程序開始運行后,用戶在shell命令行中能夠看到明確的提示,根據提示輸入想要模擬投針的數量和針的長度,即可開始運行程序。
在編寫程序時,各個步驟中要實現的效果均可在函數中詳細定義,不需要在界面的各處進行設置(這樣容易出現遺漏)。Python的報錯信息詳細,可以據此進行程序調試,但是在網絡畫板中只能通過觀察圖像出現的異常推測可能出現的錯誤。
無論是網絡畫板還是Python都能對蒲豐投針實驗進行較高程度的模擬,通過模擬投針過程,特別是利用程序判斷針與平行線是否相交這一步驟,能夠讓學生深入理解該實驗背后的數學原理,學生在修改針的數量和長度、觀察估算值變化的過程中,能夠更加直觀地理解幾何概型。
從程序編寫的角度來說,網絡畫板更好上手,幾乎不需要使用者具有編程基礎,而使用Python進行實驗就需要使用者具有一定的編程功底。從使用體驗上來說,網絡畫板更加直觀,但是如果要實現較為復雜的效果,編寫和調試就會變得非常困難。Python在交互上更友好,將程序編寫和運行界面分開,投針效果更加逼真,重點突出,而且在程序開始運行之后,能夠根據程序給出的提示設置投針數量和長度。另外,Python有良好的開發生態,功能更加強大,通過使用第三方庫能夠實現很多網絡畫板沒有的功能。根據廣東教育出版社教材中已有的項目案例,利用Matplotlib能夠對散點進行擬合,從而幫助學生發現坐標點之間的隱藏規律。最后,作為信息技術課程必修教材中的一個實驗,使用Python能夠激發學生對算法、程序設計語言以及數據可視化學習的興趣,與后續章節的學習內容緊密相聯。
在進行廣東教育出版社必修一第二章“蒲豐實驗”的教學時,建議教師先使用網絡畫板讓初次接觸該實驗的學生快速進行模擬投針,體驗數字化創新學習的過程。在完成算法、程序設計語言、數據可視化部分的學習之后,教師可以將基于Python的蒲豐投針實驗作為一次項目化學習主題,從觀察投針現象入手,運用多種途徑探究現象背后的原理,在理解原理的基礎上引導學生思考構建這樣一個投針的程序需要哪些步驟,最后以小組為單位完成部分代碼的編寫,從而模擬蒲豐投針的過程。在這個項目中,先后使用兩種數字化工具完成同一個實驗能讓學生充分體驗數字化學習工具和途徑的多樣性,提升學生數字化學習與創新的能力。
使用數字化工具模擬蒲豐投針實驗只是在培養學生數字化學習與創新這一核心素養時能夠使用的案例之一,在高中數學、物理、化學等多個學科中都可以使用Python、網絡畫板等數字化工具幫助學生探索規律,加深對知識的理解。