三角形,大家应该再熟悉不过了。
上图是一个由四个小三角形拼成的大三角形,也叫谢尔宾斯基三角形。
谢尔宾斯基三角形还能继续画下去:
2阶(上图是1阶):
3阶:
5阶:
8阶:
(小编奉劝一句:不要试图挑战你的电脑)
接下来,就要开始代码讲解了
一,起始代码
p.width(3).speed(10)#1#2
第1条 前面一半的代码是调整笔的大小,后面一半的代码是调整笔移动的速度,“3”和“10”这两个数值是可以自行调整的
第2条 空行(目的:为区分两段代码,方便查看)
二,定义函数midpoint
def get_midpoint(a,b): #3ax,ay=a #4bx,by=b #5return (ax+bx)/2,(ay+by)/2 #6
第3条 定义函数get_midpoint(a,b),第4条至第6条即函数的定义
第4条 将ax,bx赋值a
第5条 将bx,by赋值b
第6条 返回ax+bx的1/2,ay,by的1/2
三,定义函数draw_triangle
def draw_triangle(a,b,c): #7ax,ay=a #8bx,by=b #9cx,cy=c #10p.penup() #11p.goto(ax,ay) #12p.pendown() #13p.goto(bx,by) #14p.goto(cx,cy) #15p.goto(ax,ay) #16p.penup() #17
第7条定义函数draw_triangle(a,b,c),第8条至第17条即函数的定义
第8条 将ax,ay赋值a
第9条 将bx,by赋值b
第10条 将cx,cy赋值c
第11条 抬笔
第12条 前进ax,ay
第13条 落笔
第14条 前进bx,by
第15条 前进cx,cy
第16条 前进ax,ay
第17条 抬笔
四,定义函数draw_sierpinski(triangle,depth)
def draw_sierpinski(triangle,depth): #18""" #注释,下面不讲解,自己看:param triangle: 指定三角形三个顶点坐标,示例:((ax,ay),(bx,by),(cx,cy))。:param depth: 指定层数""" #下面就不是注释了a,b,c=triangle #19draw_triangle(a,b,c) #20if depth==0: #21return #22else: #23d=get_midpoint(a,b) #24e=get_midpoint(b,c) #25f=get_midpoint(c,a) #26draw_sierpinski([a,d,f],depth-1) #27draw_sierpinski([d,b,e],depth-1) #28draw_sierpinski([f,e,c],depth-1) #29
第18条定义函数draw_sierpinski(triangle,depth),第19条至第20条即函数的定义
第19条 将a,b,c,赋值函数draw_triangle
第20条 运行draw_triangle(a,b,c)
第21条如果depth等于0成立,那么执行第22条代码
第22条 返回,即停止运行函数draw_sierpinski
第23条 接第21条,如果depth等于0不成立,那么执行第24条至第29条代码
第24条 将d赋值函数get_midpoint(a,b)
第25条 将e赋值函数get_midpoint(b,c)
第26条 将f赋值函数get_midpoint(c,a)
第27条 运行函数draw_sierpinski([a,d,f],depth-1)
第28条 运行函数draw_sierpinski([d,b,e],depth-1)
第29条 运行函数draw_sierpinski([f,e,c],depth-1)
五,执行函数
#30triangle=[[-200,-100],[0,200],[200,-100]] #31draw_sierpinski(triangle,1) #32#33
第30条 同第2条
第31条 将triangle赋值[[-200,-100],[0,200],[200,-100]]
第32条 执行函数draw_sierpinski(triangle,1)
第33条 同第2条
六,结束代码
p.hide() #34p.draw() #35
第34条 隐藏笔
第35条 结束
以上就是小编为大家整理的谢尔宾斯基三角形的绘制教程了,制作不易,发条评论再走吧
Bye~