今天我们来画一个谢尔宾斯基三角形。
好我们先看原图:
这是一个等边三角形,把每一条边平均分成两份,再把这三个焦点连起来,形成四个等边三角形,中间的一个不看,紧接着再继续按着刚刚的步骤走,就可以画出来这个谢尔宾斯基三角形了。那么得算出中间点怎么求,所以我们就得写一段这样的代码:
import turtle as p p.pensize(3) p.speed(10) def get_midpoint(a,b): ax,ay=a bx,by=b return(ax+bx)/2,(ay+by)/2
现在我们知道了中点的坐标位置,就可以把他们连在一起形成一个三角形了。
def draw_triangle(a,b,c): ax,ay=a bx,by=b cx,cy=c p.penup() p.goto(ax,ay) p.pendown() p.goto(bx,by) p.goto(cx,cy) p.goto(ax,ay)
下面就差我们的主程序了,只要把三个坐标点一定,就可以运行了。
def draw_sierpinski(triangle,depth): """ :param trangle:指定三角形三个顶点坐标,示例:((ax,ay),(bx,by),(cx,cy)) :param depth:指定层数 """ a,b,c=triangle draw_triangle(a,b,c) if depth==0: return else: d=get_midpoint(a,b) e=get_midpoint(b,c) f=get_midpoint(c,a) draw_sierpinski([a,d,f],depth-1) draw_sierpinski([d,b,e],depth-1) draw_sierpinski([f,e,c],depth-1) triangle=[[-200,-100],[0,200],[200,-100]] draw_sierpinski(triangle,3) p.done()
好我们整理一下,全部的程序就是这些:
import turtle as p p.pensize(3) p.speed(10) def get_midpoint(a,b): ax,ay=a bx,by=b return(ax+bx)/2,(ay+by)/2 def draw_triangle(a,b,c): ax,ay=a bx,by=b cx,cy=c p.penup() p.goto(ax,ay) p.pendown() p.goto(bx,by) p.goto(cx,cy) p.goto(ax,ay) def draw_sierpinski(triangle,depth): """ :param trangle:指定三角形三个顶点坐标,示例:((ax,ay),(bx,by),(cx,cy)) :param depth:指定层数 """ a,b,c=triangle draw_triangle(a,b,c) if depth==0: return else: d=get_midpoint(a,b) e=get_midpoint(b,c) f=get_midpoint(c,a) draw_sierpinski([a,d,f],depth-1) draw_sierpinski([d,b,e],depth-1) draw_sierpinski([f,e,c],depth-1) triangle=[[-200,-100],[0,200],[200,-100]] draw_sierpinski(triangle,3) p.done()



