用Turtle绘制斐波那契数列彩色螺旋线

发布于:2022-11-06 ⋅ 阅读:(1156) ⋅ 点赞:(0)

学会了斐波那契数列后,就可以用它们做出很多美丽的图案

比如说斐波那契彩色螺旋线,颜色、曲线数量

import turtle
import random

这里的random是随机数,随机的是图形的颜色

def draw_fibonacci(x):
    f_list = []
    for i in range(x):
        if i == 0:
            f_list.append(1)
        elif i == 1:
            f_list.append(1)
        else:
            f_list.append(f_list[i-1]+f_list[i-2])

这段和上一个文章生成斐波那契数的方法异曲同工,详细请看上一篇,我这里就不多解释了

    f0 = 50

 重点在这里,斐波那契数都太小(1,1,2,3,5,8),所以f0=50可以给斐波那契数扩大50倍后画出所需要的正方形

    turtle.pensize(5)
    turtle.color("black")
    turtle.penup()
    turtle.home()
    turtle.pendown()

设置笔的粗度,颜色等

    for i in range(0, len(f_list)):
        turtle.speed(5)
        turtle.pendown()

其中len()函数获取形式参数的长度

        if i == 0:
            fill_color = "black"
        else:
            fill_color = (random.random(), random.random(), random.random())
            print(fill_color)
        turtle.fillcolor(fill_color)
        turtle.begin_fill()
        for j in range(4):
            turtle.forward(f_list[i]*f0)
            turtle.left(90)          

如果i为0,也就是第一个正方形,它的颜色是黑色(填充黑色),其它的正方形都是用随机数编辑的颜色

重点:RGB,red green blue的简称,范围在0~255之间,红绿蓝是光学的三原色,所有色光都是由它们组成的,若三者都为0,则无光,为黑色,若三者都为255,则为白光。此处加了一个打印RGB的程序print(fill_color),可加可不加。

循环四边是为了画出正方形的四条边,forward前进斐波那契数步,并且左拐(画出正方形)

        turtle.end_fill()

结束填充 

        fill_color = (random.random(), random.random(), random.random())

填充的颜色

        print(fill_color)
        turtle.fillcolor(fill_color)
        if i == 0:
            turtle.forward(f_list[i] * f0 / 2)
            turtle.begin_fill()
            turtle.circle(f_list[i] * f0 / 2, 360)
            turtle.end_fill()

重点在f0/2的意思是要画其中圆形的半径,第二个就是要画一个完整的圆形

            turtle.forward(f_list[i] * f0 / 2)
            continue

continue的意思是“继续”,指继续绘制正方形。

        else:
            turtle.begin_fill()
            turtle.circle(f_list[i] * f0, 90)

90就是要画90度的圆弧,也就是四分之一的圆弧

            turtle.left(90)
            turtle.forward(f_list[i] * f0)

左转90度,并走50步

            turtle.left(90)
            turtle.forward(f_list[i] * f0)

左转90度,走50步

            turtle.end_fill()

上面四行是为了画出一个封闭的扇形,这一行填充扇形

        turtle.speed(0)
        turtle.penup()
        turtle.left(90)
        turtle.forward(f_list[i] * f0)
        turtle.left(90)
        turtle.forward(f_list[i] * f0)

快速回到下一个起始点

     turtle.done()

画完

draw_fibonacci(6)

最后的数字就是要画正方形的数量

最后成果:

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到