1. 程式人生 > >用割圓術計算π

用割圓術計算π

在中國古代,魏晉時期的數學家劉徽於公元263年就提出了“割圓術”的方法,來計算圓的周長,進而可以計算出圓周率。

其實,割圓術的原理並不複雜,它通過圓內接正多邊形細割圓周,從而使正多邊形的周長無限接近圓周長,進而來求得較為精確的圓周率。

割圓術從圓內接六邊形出發,每一次倍增多邊形的邊數,並計算新的多邊形邊長。每一次的計算如下圖所示(以六邊形為例):

設圓半徑為r,已知圓內接正n邊形的邊長為a,即AB=a。如果取正n邊形每兩個相鄰頂點間的弧的中點,和已有的頂點一起,依次相連,就可以獲得圓內接正2n邊形。圖中C即為一個新增的頂點,則正2n邊形的邊長就是AC的長度。由於△OAB和△CAB均為等腰三角形,所以AD

=BD=a/2,OCABD,所以△ADO和△ADC均為直角三角形,利用勾股定理,OD2=OA2-AD2=r2-(a/2)2,可以求出OD,而CD=OC-OD=r-OD,再根據AC2=AD2+CD2=CD2+(a/2)2即可求出AC的長度,以此迴圈,就可以使用割圓術估算圓的周長,進而計算出圓周率π。

在割圓術的處理中,圓的半徑是不變的,為了簡便可以設為1,而正六邊形的邊長和外接圓半徑是一樣的也是1,根據上面的思路,在esProc中可以通過迴圈計算2n邊形的周長,從而計算出π。以迴圈10次為例,如下圖所示:

ABCD
16/sides1/sides length
2for 10=C1/2/AD
3=sqrt(1-B2*B2)/OD
4=1-B3/CD
5>C1=sqrt(B2*B2+B4*B4)/AC,new side length
6>A1=A1*2/new sides
7=A1*C1/circumference
8=A7/2

在程式中,用A1儲存多邊形的邊數,C1儲存多邊形邊長,由A2迴圈計算,以迴圈10次為例,在每次迴圈中,通過計算重新設定多邊形的邊數和邊長。迴圈結束後,在A7中通過計算多邊形的周長來擬合圓周長,在A8中計算π。
A8中的計算結尾為: