今天我们来画一个谢尔宾斯基三角形。
好吧,让我们先看原图:
这是一个等边三角形,平均分为两部分,然后连接三个焦点,形成四个等边三角形,中间一个不看,然后继续按照刚才的步骤,你可以画谢尔宾斯基三角形。所以我们必须计算如何找到中间点,所以我们必须写这样的代码:
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()