S8G7 布豐投針估計(jì)圓周率 Pi

?3/14 是國際數(shù)學(xué)日,又稱?Pi Day 。上次我們用 GGB 的隨機(jī)內(nèi)點(diǎn)來估計(jì) Pi,這次來模擬這個很神奇的 Pi 的估算法:布豐投針。
在 n 條距離 1 的 平行線,隨機(jī)丟入一個 長度為 1 的針 n 次。然后統(tǒng)計(jì)與平行線有相交的次數(shù)有 m 次,當(dāng) n 很大時, 2*n/m 的值會趨近于圓周率 3.1415926... 。?
要完成這個模擬,推薦先去完成 S6G2 。
鏈接:https://www.bilibili.com/video/BV1Mz411v7Hg

任務(wù)一 布置隨機(jī)內(nèi)點(diǎn)

說明:在這節(jié)主要使用 Geogebra 的「隨機(jī)內(nèi)點(diǎn)」功能產(chǎn)生在正方形 Box 內(nèi)的隨機(jī) N 個點(diǎn)。正方形的大小設(shè)定為 s。
操作:
s =?4
N = 500
Box = Polygon((-s,-s),(s,-s),4 )?
Lines = Sequence( Line((-s,k), (s,k)),k,-s,s)
# Lines=序列(直線((-s,k),(s,k)),k,-s,s)
rOS = Sequence( RandomPointIn( Box ),k,1,N)
# rOS=序列(隨機(jī)內(nèi)點(diǎn)(Box),k,1,N)
任務(wù)二?設(shè)定針的角度

說明:要完成隨機(jī)落下的針,除了中心點(diǎn)外,還要設(shè)定隨機(jī)的角度。在此利用 [RandomUniform(均勻分布隨機(jī)數(shù))] 來達(dá)成。有了角度,可再利用? [Zip(映射)]?,來建立線段。
而為了讓點(diǎn)有依次出現(xiàn)的效果,再設(shè)定個滑動條 n ,并使用 First 來取得數(shù)列前? n 個點(diǎn)。
操作:
rAs= Sequence(RandomUniform(0,π),k,1,N)
# rAs=序列(均勻分布隨機(jī)數(shù)(0,π),k,1,N)
rSs = Zip( Segment(o+(0.5;a),o-(0.5;a)), o, rOS,a,rAs? )
# rSs=映射(線段(o+(0.5; a),o-(0.5; a)),o,rOS,a,rAs)
n = 100
nSs = First(rSs,n)
任務(wù)三?判斷相交的情況

說明:產(chǎn)生隨機(jī)落下的針后,就要開始判斷針與平行線是否相交。在這利用 [ KeepIf (條件子列) ] ,判斷的方法是,判斷線段的兩端點(diǎn)的 y 坐標(biāo)的整數(shù)值是否相等,利用 floor 無條件舍去來完成。
而線段的兩端點(diǎn),利用 Corner(S,1), Corner(S,2) 來取得,其中 S?為序列?nSs 內(nèi)的線段。?若相等則表示不相交,若上端點(diǎn)的y的整數(shù)值大于下端點(diǎn)則表示相交。
最后再利用 m 來計(jì)算符合這些條件的線段數(shù)量,接著再利用文本來顯示 pi 的估計(jì)。
操作:
nPs=KeepIf(floor(y(Corner(S,1)))>floor(y(Corner(S,2))),S,nSs)
# nPs=條件子列(floor(y(頂點(diǎn)(S,1)))>floor(y(頂點(diǎn)(S,2))),S,nSs)
m = Length(nPs)

小結(jié)與鏈接
這節(jié)利用 Geogebra 的隨機(jī)功能與條件子列,就可完成這類模擬估計(jì)。至于布豐投針為何可估算 Pi 可參考以下視頻的解說。
鏈接:https://www.bilibili.com/video/BV19E41157QZ

【GGB】https://www.geogebra.org/classic/s2hmxcex
【Bili】https://www.bilibili.com/video/BV1b54y1h7FN?p=2&spm_id_from=pageDriver
【youtube】https://www.youtube.com/watch?v=RjujfzUQXPk