龙空技术网

简单学Python——用割圆术来计算圆周率

量化交易交流 148

前言:

眼前兄弟们对“c语言输出圆”大体比较着重,小伙伴们都想要分析一些“c语言输出圆”的相关资讯。那么小编同时在网上汇集了一些关于“c语言输出圆””的相关内容,希望你们能喜欢,看官们一起来学习一下吧!

割圆术来计算圆周率

所谓割圆术,就是不断倍增圆内接正多边形的边数求出圆周率的方法,由魏晋时期的数学家刘徽首创。

原理是这样的:假设圆的半径为1,现在我们接入了一个正六边形,如图画出一个三角形AOB,容易得出这是一个正三角形,因此边AB长为1。现在我们过O做AB的的垂线,与AB交于P,与圆交于C。

下一步,求AC长。求出AC的长来,我们就会得出圆内接12边形的周长来(6边形,每条边演变成2条)。APC为直角三角形,AP长为0.5,CP为OC减去OP,OP为OA平方减AP平方之后开平方。AC为AP平方加CP平方之后再开方。然后12边形的周长为12倍的AC,用12边形求圆周率就是12边形的周长除以2(因为半径为1)。

以此类推,可求24、48、96...6*2^n边形对应的圆周率。

下面用代码实现一下:

import math# times为分割次数,分割一次边数增加一倍。def geiyuan(times):	# 初始边长,即内接6边形的边长。	bianchang = 1	# 初始边数,即内接6边形的边数	bianshu = 6	#这是求边数加一倍后的新边长  		def fanbeihoubianchang(x):		#求过圆心的三角形的高			gao = math.sqrt(1-(x /2)**2)			#返回新边长			return math.sqrt((x /2)**2 + (1-gao)**2)	#这里用一个循环,每多一次分割次数算一次	for i in range(times):		#用函数求翻倍后的边长		bianchang = fanbeihoubianchang(bianchang)		#边数为原来的2倍		bianshu=bianshu*2		#圆周率为内接正多边形周长除以直径		pi = bianchang*bianshu/2	#计算完毕,返回边数及圆周率	return bianshu, pi#先算一下分割20次后的圆周率吧。for i in range(1,21):	#这里将中间过程算出的圆周率打印出来	print('分割{}次,边数为{},圆周率为{:.10f}'.format(i, *geiyuan(i)))#与math库中的圆周率做一下对比。print('math库中的圆周率常量值为{:.10f}'.format(math.pi))

结果:

标签: #c语言输出圆