用割圆术计算π

在中国古代,魏晋时期的数学家刘徽于公元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中的计算结尾为:

阅读更多
文章标签: 存储 c
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭