前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># python # # 分形 # Sierpinski Carpet 谢尔宾斯基地毯

# python # # 分形 # Sierpinski Carpet 谢尔宾斯基地毯

作者头像
滚神大人
发布2019-09-10 18:53:49
1.4K0
发布2019-09-10 18:53:49
举报
文章被收录于专栏:趣Python

好久没更新,趁着中午休息更新一下, 这次的是分形中的谢尔宾斯基地毯,3阶的地毯是下面这个形状(不是二维码哈☺):

源代码如下 (python 2 使用Turtle绘图):

代码语言:javascript
复制
# coding=utf-8

import turtle
PROGNAME = 'Sierpinski Carpet'

COLOR_TABLES = [
   ["#000000", "#000000", "#000000", "#000000" ],
   ["#00649F", "#97ECC5", "#00DBE7", "#01AAC1" ],
   ["#085F63", "#EF255F", "#FCCF4D", "#49BEB7" ],
   ["#9B5D73", "#FFF1C5", "#C38B8B", "#B0757C" ],
   ["#F0F0F0", "#FC5185", "#364F6B", "#43DDE6" ],
   ["#F67280", "#355C7D", "#6C5B7B", "#C06C84" ],
   ["#F3ECC8", "#0D1B4C", "#3F6699", "#78C2C3" ] ]

def box(pen, boxSize):
   pen.begin_fill()    # 0 deg.
   pen.forward(boxSize)
   pen.left(90)    # 90 deg.
   pen.forward(boxSize)
   pen.left(90)    # 180 deg.
   pen.forward(boxSize)
   pen.left(90)    # 270 deg.
   pen.forward(boxSize)
   pen.end_fill()
   pen.setheading(0)

def move_box(pen, xy, length, color):
   (x, y) = xy
   pen.color(color)
   pen.penup()
   pen.goto(x, y)
   pen.pendown()
   box(pen, length)

def draw_all(pen, xy, length, depth, color_table):
   if depth <= 0: return   length3 = length / 3
   (x, y) = xy   pos1_9 = [  (x-length3*2,       y+length+length3),
               (x+length3,         y+length+length3),
               (x+length+length3,  y+length+length3),
               (x-length3*2,       y+length3),
               (x+length+length3,  y+length3),
               (x-length3*2,       y-length3*2),
               (x+length3,         y-length3*2),
               (x+length+length3,  y-length3*2) ]    
    for pos in pos1_9:
       move_box(pen, pos, length3, color_table[depth%len(color_table)])
       draw_all(pen, pos, length3, depth-1, color_table)
    
def main():
   length = 270 # size
   start_x = -length/2
   start_y = -length/2
   depth = 3   turtle.setup(width=1.3*turtle.window_width(), height=1.3*turtle.window_height()) # not necessary
   for color_table in COLOR_TABLES:
       my_pen = turtle.Turtle()
       my_pen.ht() # hiden turtle
       my_pen.speed(20000) # set speed 
       move_box(my_pen, (start_x, start_y), length, color_table[0])
       draw_all(my_pen, (start_x, start_y), length, depth, color_table)
       my_pen.getscreen().getcanvas().postscript(file=color_table[0]+".eps") # save to eps file
       my_pen.clear() # clear for next draw

if __name__ == "__main__":
   main()    
    pass

运行过程是动态的,保存的图片(+伪彩)如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档