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

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

割圆术来计算圆周率

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

原理是这样的:假设圆的半径为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))

结果:

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

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75024
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日
下一篇 2024 年 7 月 11 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注