關於圓周率 π 有許多好玩的事。每年三月十四日訂為圓周率日,因為圓周率 π 的值為3.14,這一天大家聚在一起開派對,吃圓形的派餅(pie與pi諧音),玩一種用棍棒打破裝滿糖果的紙糊造型容器,稱之為「皮納塔(pinata)」的遊戲。印度有個人能夠背出圓周率 π小數點後70,000個數字,創下出界紀錄。電腦計算可以精確到圓周率 π小數點後二十二兆位,也是一個世界紀錄。這一章我們就來介紹這個充滿歡樂趣味的圓周率 π,用 Scratch計算圓周率 π 的值。
數學關鍵字: 化圓為方、圓周率、代數數、超越數。
數學家:阿基米德、林德曼。
Scratch程式:
化圓為方
圓周率的定義是圓的周長和直徑的比值,圓周長和圓面積的計算公式大家都耳熟能詳:當一個圓的半徑為r,則圓周長為2πr,圓面積則為πr2。
古希臘人有一個破解不出答案的尺規作圖難題叫做「化圓為方」,題目是說給定一個圓形,然後以直尺和圓規在有限步驟內畫出另一個面積相等的正方形。
當一個圓的半徑等於1,圓的面積為π,「化圓為方」的問題就是畫出一個邊長為 √n 的正方形。
這個問題困擾了世人兩千多年,直到1882年德國數學家林德曼(Lindemann)提出了無理數可以分為兩種,一種可以表示成方程式解的數稱為代數數(algebraic number),而另一種無法表示成方程式根的數則稱為超越數(transcend number),而尺規作圖無法畫出長度等於超越數的線段。
√2 是一個無理數,它無法表示成兩個整數的比值。但我們可以找到一個方程式,使得 √2 為方程式的一個解,
因此我們說 √2 是一個代數數,由於 √2 的小數形式會是無限不循環小數,我們也稱 √2 這種數為不盡根。在前篇文章「無理的道理(三)」裡我們曾經寫過一個scratch的程式,就是用尺規作圖的方法畫出一個長度為 √2 的線段。
圓周率π是一個無理數,它無法表示成兩個整數的比值。同時圓周率π也是一個超越數,我們找不到一個方程式的根為圓周率π。尺規作圖無法畫出長度等於圓周率π的線段。
圓周率π在實數系裡的位置
一條數線是由無限多個點構成,每個點都對應到一個數。圓周率π值也會對應到數線裡的一個點。
但古希臘數學家畢達哥拉斯的時代數字系統只有整數和有理數,他無法確定圓周率π在數線上的準確位置,也無法用整數和有理數填滿這條數線。隨著數學知識的完備,數學家在數字系統中歸納出無理數的存在。如果將無理數寫成小數形式,小數點之後會有無限多個的數字,並且不會循環,即無限不循環小數。林德曼的發現進一步將無理數分為代數數和超越數。
以下圖的數線為例,可以看到數字系統分為,
- 整數,像是 -1,0,1,2…,其中正整數1,2…又可以被歸類為自然數。
- 有理數,也就是可以表示成整數比的數,像是0.5,可以表示為 1/2 。
- 不盡根,無法表示成整數比的數,但會是一個方程式的解。像是 √2 、 √3 。
- 超越數,無法表示成整數比的數,同時也不是任何方程式的解。像是圓周率π。
到這裡我們可以將實數的數字系統整理為下面的表格,清楚地表示出實數數系的分類,
圓周率π存在於超越數這個特別的分類。除了圓周率π,數學家已經證明出還有其他的超越數,但仍有非常非常多的數我們不知道是代數數或是超越數。
圓周率π的歷史
人類計算圓周率的歷史久遠,在許多遠古的史蹟或典籍都記載了圓周率的近似值,
- 巴比倫人在西元前1900年的石板上刻有圓周率 π 等於 25/8 。
- 埃及古籍阿美斯紙草書的時代和巴比倫人石板相近,其中有圓周率π等於 256/81 的記載。
- 中國在周代即有圓周率等於3的史書記載。
這些遠古的記載並沒有說明實際的圓周率估算方法。
西元前三世紀,希臘數學家阿基米德(Archimedes)以多邊形逼近法計算圓周長和直徑的比例。阿基米德運用兩個正多96邊形,一個外切於圓,另一個內接於同一個圓。
下圖是用正多邊形外切和內接來逼近圓周長的示意圖,以最左邊的正五邊形為例,可以看到圓周長會介於外切正五邊形和內接正五邊形的周長之間。而正多邊形的邊數越多,就可更精確地逼近圓周長。
藉由一些幾何學和算術運算的幫助,阿基米德估算出兩個正96邊形的周長,他估算出外切於圓的正96邊形周長和圓半徑的比值為 22/7 ,內接於同一個圓的正96邊形周長和圓半徑的比值為 223/71 。也就是說阿基米德估算出的圓周率為:
化為小數點的形式可以更清楚地看到,阿基米德估算的上下界限和π值已經準確到小數點後第二位,
動手做5–1 多邊形逼近法估算圓周率π
[程式設計需求規格]
以固定半徑畫正多邊形,計算正多邊形的周長。當正多邊形的邊數增加,正多邊形的周長會近似相同半徑的圓周長。
將計算得到的正多邊形周長除以二倍半徑,估算圓周率π值。
[程式設計角色和舞台]
在這個程式裡有兩個造形相同的角色,以畫新角色的方法畫出小黑點。舞台維持空白即可。
[程式設計解決方案]
製作這個程式基本分為兩部分,
- 第一部分是利用點1和點2由圓心往圓周方向移動,再依序順時針旋轉,漸次畫出正多邊形。
- 當點1和點2都移動到圓周上,量測並累加點1到點2的距離。最後可以求得正多邊形的周長。
上圖例子設定切割角度為30⁰,左上角的圖顯示先將點1和點2由圓心往外移動半徑的距離,然後量測並累加點1和點2之間的距離。之後將點1和點2移動回原點,順時針旋轉30⁰,再重複相同的移動動作,直到畫出完整的多邊形。
[程式檢視]
這個程式是以圓內接多邊形的方法估算圓周率π,在已知半徑的情況下,最重要的部分就是如何估算正多邊形的周長來近似圓周長。
阿基米德利用了幾何學裡三角形的相似和內外角關係,進行了一系列的運算得到正多邊形周長。
在我們的程式裡則是用了測量距離的方塊指令累加邊長得到了正多邊形周長。基本上這可以視為對點1和點2在二維座標裡的距離計算,可以將較複雜的幾何計算用簡單的距離公式求出來。
下表列出不同切割角度估算的圓周率π值。正96邊形得到的圓周率π值為3.141032,和阿基米德計算出的值3.140845相近。而當切割角度為0.10時,分割為正3600邊形估算的圓周率π值已經準確到小數點後6位了。
動手做5–2 畫圓估算圓周率π
[程式設計需求規格]
圓周率π的定義是圓周長除以直徑的比值,
動手做5–1中,在固定半徑的前提下,計算正多邊形的周長來逼近圓周長。
在動手做5–2中,嘗試在固定圓周長的情況下,估算圓的直徑,然後計算出圓周率π值。
[程式設計角色和舞台]
以畫新角色的方法畫出角色黑點,建議使用向量模式。舞台維持空白即可。
[程式設計解決方案]
程式先畫一個圓周為360的圓,再求出直徑長度,就可以計算出圓周率π值。
[程式檢視]
程式裡的第一部分是畫圓,每次移動黑點1步,順時針旋轉1度,重複360次後就可以畫出一個圓。如此我們訧畫出一個已知圓周長為360的圓。
畫完圓黑點的位置在圓的上緣,調整方向讓黑點向下移動,直到碰觸到圓的下緣。累加出的全部移動距離就是圓的直徑,於是就可以求出圓周率π。
量測出的圓直徑等於114.51。將圓周長360除以直徑,求得圓周率π值為3.14383。
延伸閱讀:
Scratch & Math: 天花板上的蜘蛛(一) Scratch & Math: 天花板上的蜘蛛(二)
Scratch & Math: 直線裡的宇宙觀(一) Scratch & Math: 直線裡的宇宙觀(二)
Scratch & Math: 不能說的祕密(一) Scratch & Math: 不能說的祕密(二)
Scratch & Math: 無理的道理(一) Scratch & Math: 無理的道理(二) Scratch & Math: 無理的道理(三)