python turtle 递归画图
今天有兴致,用turtle画了几个图,递归画图简直是强迫症患者的福音。
螺旋线
def draw(line):
if line>250:
return
t.color(color[line%4])#color=['red','yellow','blue','orange']
t.fd(line)
t.left(92)
draw(line+1)
效果图:
谢尔宾斯基三角形
def draw_sierpinski(a,b,c,depth):
draw_triangle(a, b, c,depth)
if depth==0:
return
d=get_midpoint(a, b)#求出三角形每条边上的中点
e=get_midpoint(b, c)
f=get_midpoint(c, a)
#draw_sierpinski(d,e,f,depth-1)
draw_sierpinski(f,e,c,depth-1)
draw_sierpinski(a,d,f,depth-1)
draw_sierpinski(d,b,e,depth-1)
效果图:
谢尔宾斯基正方形地毯
5层,画了2小时吧。
def draw_sierpinski_fang(a,b,c,d,depth):#这里的a,b,c,d都是列表
draw_fang(a, b, c, d,depth)
if depth==0:
return
e=get_point(a, b, 1/3)#求出正方形每条边上1/3和2/3处的点
f=get_point(a, b, 2/3)
#print(e,f)
g=get_point(b, c, 1/3)
h=get_point(b, c, 2/3)
#print(g,h)
i=get_point(c, d, 1/3)
j=get_point(c, d, 2/3)
#print(i,j)
k=get_point(d, a, 1/3)
l=get_point(d, a, 2/3)
#print(k,l)
draw_sierpinski_fang(a,e,[e[0],l[1]],l,depth-1)
draw_sierpinski_fang(e,f,[f[0],l[1]],[e[0],l[1]],depth-1)
draw_sierpinski_fang(f,b,g,[f[0],g[1]],depth-1)
draw_sierpinski_fang(l,[e[0],l[1]],[e[0],k[1]],k,depth-1)
draw_sierpinski_fang([f[0],g[1]],g,h,[f[0],h[1]],depth-1)
draw_sierpinski_fang(k,[e[0],k[1]],j,d,depth-1)
draw_sierpinski_fang([e[0],k[1]],[f[0],k[1]],i,j,depth-1)
draw_sierpinski_fang([f[0],h[1]],h,c,i,depth-1)
效果图:
科赫雪花
def koch(size,n):
if n==0:
t.fd(size)
return
for i in [0,60,-120,60]:
t.lt(i)
koch(size/3,n-1)
效果图: