谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。也有的资料将其称之为谢尔宾斯基坟垛.
生成过程为:
取一个实心的三角形。(多数使用等边三角形)
沿三边中点的连线,将它分成四个小三角形。
去掉中间的那一个小三角形。
对其余三个小三角形重复1。
首先,我们在turtle海龟画布上任意选择三个点,分别标记为A、B、C三点。
接下来,在A、B、C三点确定的三角形内随便取一点D点。
好了,接下来开始掷骰子了。,如果掷得的骰子点数为1点或2点,那么,就从D点出发,向A点的方向前进AD之间距离的一半,从而到达E点。
利用Python,实现上述绘图过程的原理很简单,重点要用到我们的随机库(random),另外,对于填充三件型的点,我们可以采用dot函数来进行绘制,也可以将画笔的“形状”设置为“circle”,然后采用stamp()函数,对“形状”进行复制来实现。我们采用后者。具体设计思路如下:
首先设定三只画笔a、b、c,并选定三个坐标点。
value=300
turtle.bgcolor('white')
a=turtle.Turtle()
a.shape('circle')
a.shapesize(0.8,0.8)
a.up()
a.goto(-value,-value)
a.color('red')
a.ht()
a.stamp()
a.goto(-value,-value-70)
a.write('A(1 or 2)',font=('Arial',20,'bold'))
a.up()
a.goto(-value,-value)
#b点5 or 6
b=turtle.Turtle()
b.shape('circle')
b.shapesize(0.8,0.8)
b.ht()
b.up()
b.goto(value,-value)
b.color('green')
b.stamp()
b.goto(value+30,-value)
b.write('B(5 or 6)',font=('Arial',20,'bold'))
b.up()
b.goto(value,-value)
#c点3 or 4
c=turtle.Turtle()
c.shape('circle')
c.shapesize(0.8,0.8)
c.ht()
c.up()
c.goto(0,value)
c.color('blue')
c.stamp()
c.goto(0,value+30)
c.write('C(3 or 4)',font=('Arial',20,'bold'))
c.up()
c.goto(0,value)
接下来,定义用于绘制三角形的画笔"paint".并在A、B、C三点确定的三角形内部选择一点。
#定义绘画笔
paint=turtle.Turtle()
paint.shape('circle')
paint.shapesize(0.2,0.2)
paint.up()
paint.speed(0)
paint.goto(0,0)
paint.color('purple')
paint.fd(10)
paint.stamp()
然后,开始做上述循环过程,通过掷骰子,利用画笔"paint"通过点填充实现对三角形的绘制。
for i in range(500000):
x=random.randint(1,6)
if x==1 or x==2:
angle=paint.towards(a.pos())
paint.seth(angle)
dist=paint.distance(a.pos())
paint.fd(dist/2)
paint.stamp()
if x==3 or x==4:
angle=paint.towards(c.pos())
paint.seth(angle)
dist=paint.distance(c.pos())
paint.fd(dist/2)
paint.stamp()
if x==5 or x==6:
angle=paint.towards(b.pos())
paint.seth(angle)
dist=paint.distance(b.pos())
paint.fd(dist/2)
paint.stamp()
注意,每一次循环中的“掷骰子”是通过随机库命令
x=random.randint(1,6)
好了,小伙伴们,这回可以运行代码跑起来了。最终,运行后效果如下。
本文分享自微信公众号 - python 青少年编程(gh_73f62b58c679)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4608163/blog/4487722