本文主要是介绍等比数列圆收敛于360度q=0.828,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
等比数列圆收敛于360度q=0.828
设想有一组半径是等比数列的圆。最大圆的半径是1,其它圆全部围在最大的圆身上,使得恰好收敛于360度,求等比q?
#半径为1的主圆,周围是半径为递减的q等比数列,紧紧相切刚好收敛于360度,求q
#易知必定是收敛于某个角度的
import math
import turtle as ttPI=3.14159
def get_radian(a, b, c):''':param a: 外边:param b: 长边:param c: 短边:return: a边对应的A角,圆心角的弧度'''t=(b*b+c*c-a*a)/(2*b*c)return math.acos(t)# print(get_radian(1,2,1.73))#0.52def get_sum_radian(q):res=0a=q+q*qb=1+qc=1+q*qSIZE=50 #精确到第几个三角形for i in range(1,SIZE):#第几个三角形res+=get_radian(a, b, c)a*=qb=cc=1+q**(i+1)return res# print(get_sum_radian(0.8))
# print(get_sum_radian(0.9))
# 结果必定在0.8和0.9之间,二分法查找
def get_ans():r=0.9l=0.8m=0.85SIZE=50 # 精确到二分法多少次for i in range(SIZE):ans=get_sum_radian(m)if ans<=2*PI:l=melse:r=mm=(l+r)/2return mdef draw(q):SPAN=100tt.setup(700,700)tt.speed(0)r=1cnt_degree = 0#累计的圆角度tt.up()tt.goto(0,-r*SPAN)tt.down()tt.circle(r*SPAN)tt.up()r*=qa = q + q * qb = 1 + qc = 1 + q * qSIZE = 30 # 精确到第几个三角形for i in range(1, SIZE): # 第几个三角形tt.home()tt.seth(cnt_degree)tt.forward(SPAN)tt.right(90)tt.down()tt.circle(r*SPAN)tt.up()cnt_degree+=get_radian(a,b,c)*180/PIa *= qb = cc = 1 + q ** (i + 1)r*=qtt.done()q=get_ans()
print(q)# 0.8287775143909673
draw(q)
这篇关于等比数列圆收敛于360度q=0.828的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!