今天我们来画一个谢尔宾斯基三角形。
好我们先看原图:
这是一个等边三角形,把每一条边平均分成两份,再把这三个焦点连起来,形成四个等边三角形,中间的一个不看,紧接着再继续按着刚刚的步骤走,就可以画出来这个谢尔宾斯基三角形了。那么得算出中间点怎么求,所以我们就得写一段这样的代码:
import turtle as p
p.pensize(3)
p.speed(10)
def get_midpoint(a,b):ax,ay=abx,by=breturn(ax+bx)/2,(ay+by)/2
现在我们知道了中点的坐标位置,就可以把他们连在一起形成一个三角形了。
def draw_triangle(a,b,c):ax,ay=abx,by=bcx,cy=cp.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=triangledraw_triangle(a,b,c)if depth==0:returnelse: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=abx,by=breturn(ax+bx)/2,(ay+by)/2
def draw_triangle(a,b,c):ax,ay=abx,by=bcx,cy=cp.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=triangledraw_triangle(a,b,c)if depth==0:returnelse: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()