用python turtle画平铺图,代码分享。
今天我们来分享一段用python turtle画各种平铺图案的代码。 先来看下用圆形平铺的效果。
代码如下:
import turtle
t=turtle.Turtle()
turtle.tracer(2)
#参数draw为画要重复图形的函数,*a为draw的参数列表,x,y为间隔,
#is_cross是否要交叉,s_x,s_y是绘制的起始位置
def f(draw,*a,x=20,y=20,is_cross=0,s_x=-280,s_y=280):
for j in range(30):
for i in range(28):
t.penup()
t.goto(i*x+s_x+(is_cross*j%2)*x/2,s_y-j*y)
t.pendown()
draw(*a)
f(t.circle,20)
这里定义了一个高阶函数f,实现类似装饰器的功能,可以传入一个画基本图形的函数参数,然后对这个基本图形进行平铺操作。比如我们刚才就是把画一个圆的函数t.circle传了进来,要平铺的基本图形就是个圆形。f函数的第二个参数就是基本图形函数的参数,这个参数是可变参数,支持传入多个数值。我们刚才传入了数字20,也就是指圆的半径为20。可以在后面再加一个数字180,表示只画半圆。
f(t.circle,20,180)
F函数后面还有参数x,y,表示平铺时每个基本图形的间隔。比如我们把x,y数值改成圆的直径40,这样就正好能让圆不重叠。
f(t.circle,20,x=40,y=40)
参数is_cross表示是否要交叉平铺,传入1就可以交叉平铺了。这里只做了X轴的交叉,感兴趣的朋友可以加上Y轴的交叉。
f(t.circle,20,x=40,y=40,is_cross=1)
还可以多次平铺组合,比如再平铺个小一点的圆,并把绘制起点改一下。
f(t.circle,20,x=40,y=40)
f(t.circle,10,x=40,y=40,s_x=-280,s_y=290)
改一下平铺间隔,可以实现不同的效果。
f(t.circle,20,x=30,y=30)
也可以传入其他基本图形,实现不同图形的平铺。比如我们定义一个正多边形的函数d。默认参数时是画一个正三角形,可以传给f试下效果。
#画一个正n边形,参数n为边数,r为边长
def d(n=3,r=50):
for i in range(n):
t.forward(r)
t.left(360/n)
f(d)
传入不同的边数,比如传入4,就是正方形平铺。
f(d,4)
还可以加上边长参数。
f(d,4,45)
再定义一个函数S,画一个尖角。
把它传入f进行平铺。
def s(r=20):
t.left(45)
t.forward(r)
t.right(90)
t.forward(r)
t.left(45)
f(s)
多次平铺一个小一点的尖角看看效果。
f(s)
f(s,10)
今天的介绍就到这里了,喜欢的朋友可以多试下不同的参数值组合,或者传入其他的基本图形进行平铺,看下都能画出哪些好看的平铺图案哦。