学会了斐波那契数列后,就可以用它们做出很多美丽的图案
比如说斐波那契彩色螺旋线,颜色、曲线数量
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)
最后的数字就是要画正方形的数量
最后成果: