前言:
眼前兄弟们对“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语言输出圆