用Python绘制斐波那契螺旋线(黄金螺旋线)

斐波那契螺旋线也称“黄金螺旋线”。观察图形后可以发现:正方形按顺或逆单一时针方向滚动顶点、并按黄金分割比例缩小,按此规律循环5次,顶点滚动路径对应的曲线(以正方形边长为半径r的扇形的圆弧)即为所求黄金螺旋线。

值得记录的一点是:在绘制思路尚不全面清晰时,也不妨开始大胆实践。有时在实践中,真理会跳跃到你眼前!

话不多说:感兴趣的小伙伴可以运行以下代码、感受上述几何之美:

from turtle import *
#import cmath
speed(10)
pensize(5)

#判断较小整数的函数
def little(a,b):
    if a<b:
        return a
    else:
        return b
#初始点
#矩形
x0 = 250
y0 = 150
r= little(2*x0,2*y0)

#定义绘制、填充1/2正方形及扇形的函数
def square_sector(r,color_couple):
    color("black",color_couple[0])
    begin_fill()
    #顺时针画1/2正方形
    #for i in range(2):
    fd(r)
    rt(90)
    fd(r)
    end_fill()
    #顺时针画剩余1/2正方形及1/4圆弧
    color("black",color_couple[1])
    begin_fill()
    for i in range(2):
        rt(90)
        fd(r)
    rt(90)
    circle(-r,90)
    end_fill()


#黄金比例
#golden_ratio = (cmath.sqrt(5)-1)/2#cant convert complex to int
golden_ratio = 0.618


#5组填充色——[color_rect,color_arc]#1/2矩形,扇形
color_ls = [["#8F653B","#EDCB67"],["#B58539","#7D6A98"],
            ["#FAC374","#56ACA9"],["#D87D84","#DA8F3C"],["#769A43","#CF4749"]]

pu()
goto(x0,y0)#矩形的右上顶点,默认初始角度0
pd()
seth(-90)
#循环绘制、填充矩形及扇形
for i in range(5):
    r = 300*(golden_ratio**i)#边长
    #rt(90)#"正方形圆弧图块整体"右转90度绘制
    square_sector(r,color_ls[i])

hideturtle()
done()

附:取色工具本次使用的是CDR的滴管。

ColorPix.exe也好用:无须安装,按住alt、点击,按空格锁住颜色,再点击可复制不同颜色的代码。

经验分享 程序员 微信小程序 职场和发展