等比数列圆收敛于360度q=0.828

这篇博客探讨了一种等比数列圆的几何构造,其中最大圆半径为1,其余圆依次内切,最终角度恰好收敛于360度。通过数学计算,确定了等比q约等于0.8287,实现了圆的紧密排列。使用Python的turtle库绘制了这一几何现象,并通过二分法找到精确的q值。
摘要由CSDN通过智能技术生成

等比数列圆收敛于360度q=0.828

设想有一组半径是等比数列的圆。最大圆的半径是1,其它圆全部围在最大的圆身上,使得恰好收敛于360度,求等比q?

#半径为1的主圆,周围是半径为递减的q等比数列,紧紧相切刚好收敛于360度,求q
#易知必定是收敛于某个角度的
import math
import turtle as tt

PI=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.52

def get_sum_radian(q):
    res=0
    a=q+q*q
    b=1+q
    c=1+q*q
    SIZE=50 #精确到第几个三角形
    for i in range(1,SIZE):#第几个三角形
        res+=get_radian(a, b, c)
        a*=q
        b=c
        c=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.9
    l=0.8
    m=0.85
    SIZE=50 # 精确到二分法多少次

    for i in range(SIZE):
        ans=get_sum_radian(m)
        if ans<=2*PI:
            l=m
        else:
            r=m
        m=(l+r)/2
    return m




def draw(q):
    SPAN=100
    tt.setup(700,700)
    tt.speed(0)
    r=1
    cnt_degree = 0#累计的圆角度
    tt.up()
    tt.goto(0,-r*SPAN)
    tt.down()
    tt.circle(r*SPAN)
    tt.up()
    r*=q
    a = q + q * q
    b = 1 + q
    c = 1 + q * q
    SIZE = 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/PI
        a *= q
        b = c
        c = 1 + q ** (i + 1)
        r*=q


    tt.done()

q=get_ans()
print(q)

# 0.8287775143909673
draw(q)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值