必威体育Betway必威体育官网
当前位置:首页 > IT技术

python简单的分形图片

时间:2019-09-30 10:43:14来源:IT技术作者:seo实验室小编阅读:85次「手机版」
 

分形

康托集

代码

  1. # 康托集

  2. import pygame

  3. pygame.init()

  4. screen = pygame.display.set_caption('康托集')

  5. screen = pygame.display.set_mode([1000, 250])

  6. screen.fill([255, 255, 255])

  7. pygame.display.flip()

  8. len0 = 1000 # 初始线条长度

  9. leni = len0 # 当前最小线条长度

  10. line = 0 # 当前行数

  11. while leni > 1:

  12. for event in pygame.event.get():

  13. if event.type == pygame.QUIT:

  14. exit()

  15. n = 2**line # 集合元素份数

  16. tep = [0, ] # 元素第一个端点位置

  17. while len(tep) < n:

  18. nt = (tep[-1] + leni) * 2 # 接下来首个元素位置

  19. tepp = [] # 接下来元素位置

  20. for j in tep:

  21. tepp.APPend(nt + j)

  22. tep.extend(tepp)

  23. for k in tep:

  24. pygame.draw.line(screen, [0, 0, 0], [

  25. k, 30 * line + 5], [k + leni, 30 * line + 5], 10)

  26. pygame.display.flip()

  27. line += 1

  28. leni = leni / 3

  29. while 1:

  30. for event in pygame.event.get():

  31. if event.type == pygame.QUIT:

  32. exit()

输出:

康托尘埃

代码:

  1. # 康托尘埃

  2. import pygame

  3. pygame.init()

  4. screen = pygame.display.set_caption('康托尘埃')

  5. screen = pygame.display.set_mode([487, 487])

  6. screen.fill([255, 255, 255])

  7. pygame.display.flip()

  8. cantor = [1, ] # 起点集,最小像素为1

  9. while (cantor[-1] + 1) * 3 < 1000:

  10. st = (cantor[-1] + 1) * 2 # 下一迭代起点

  11. tep = []

  12. for i in cantor:

  13. tep.append(st + i) # 重复上一子集

  14. cantor.extend(tep)

  15. # print(cantor[-1]) # 输出最大像素起点

  16. for i in cantor:

  17. for j in cantor:

  18. screen.set_at([i, j], [0, 0, 0])

  19. pygame.display.flip()

  20. while 1:

  21. for event in pygame.event.get():

  22. if event.type == pygame.QUIT:

  23. exit()

输出:

方块分形

代码:

  1. # 方块分形

  2. import pygame

  3. maxlen = 500 # 边界

  4. pygame.init()

  5. screen = pygame.display.set_caption('方块分形')

  6. screen = pygame.display.set_mode([maxlen, maxlen])

  7. screen.fill([255, 255, 255])

  8. pygame.display.flip()

  9. def draw(st, leni):

  10. # st: 左上角点位置[left,top]

  11. # leni: 当前方块边长

  12. if leni > 3:

  13. leni /= 3

  14. draw(st, leni) # 左上

  15. draw([st[0] + leni * 2, st[1]], leni) # 右上

  16. draw([st[0] + leni, st[1] + leni], leni) # 中间

  17. draw([st[0], st[1] + leni * 2], leni) # 左下

  18. draw([st[0] + leni * 2, st[1] + leni * 2], leni) # 右下

  19. pygame.display.flip()

  20. else:

  21. pygame.draw.rect(screen, [0, 0, 0], [st[0], st[1], leni, leni])

  22. draw([0, 0], maxlen)

  23. while 1:

  24. for event in pygame.event.get():

  25. if event.type == pygame.QUIT:

  26. exit()

输出:

谢尔宾斯基三角垫

代码:

  1. # 谢尔宾斯基三角垫

  2. import pygame

  3. maxlen = 500 # 边界

  4. pygame.init()

  5. screen = pygame.display.set_caption('谢尔宾斯基三角垫')

  6. screen = pygame.display.set_mode([maxlen, maxlen])

  7. screen.fill([255, 255, 255])

  8. pygame.display.flip()

  9. def mid(a, b):

  10. # 求出a, b点的中点坐标

  11. return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2]

  12. def draw(one, two, tri):

  13. # 参数代表三个顶点,上、左、右排序

  14. if one[0] - two[0] > 2: # 可分

  15. draw(one, mid(one, two), mid(one, tri)) # 画上面的三角

  16. draw(mid(one, two), two, mid(two, tri)) # 画左边三角

  17. draw(mid(one, tri), mid(two, tri), tri) # 画右边的三角

  18. pygame.display.flip()

  19. else: # 达到最小结构

  20. pygame.draw.polygon(screen, [0, 0, 0], [one, two, tri])

  21. draw([maxlen / 2, 0], [0, maxlen], [maxlen, maxlen])

  22. while 1:

  23. for event in pygame.event.get():

  24. if event.type == pygame.QUIT:

  25. exit()

输出:

谢尔宾斯基方毯

代码:

  1. # 谢尔宾斯基方毯

  2. import pygame

  3. maxlen = 500 # 边界

  4. pygame.init()

  5. screen = pygame.display.set_caption('谢尔宾斯基方毯')

  6. screen = pygame.display.set_mode([maxlen, maxlen])

  7. screen.fill([0, 0, 0])

  8. pygame.display.flip()

  9. def p2(p, r, d):

  10. # p: 参考左上顶点

  11. # r: 距离参考点向右偏移距离

  12. # d: 距离参考点向下偏离距离

  13. return [p[0] + r, p[1] + d]

  14. def points(p, leni):

  15. # 返回p,leni对应的四边形四个顶点列表

  16. return [p, p2(p, leni, 0), p2(p, leni, leni), p2(p, 0, leni)]

  17. def draw(p, leni):

  18. # p:左上顶点

  19. # leni:边长

  20. leni /= 3

  21. pygame.draw.polygon(screen, [255, 255, 255],

  22. points(p2(p, leni, leni), leni))

  23. if leni > 3:

  24. draw(p, leni)

  25. draw(p2(p, leni, 0), leni)

  26. draw(p2(p, 2 * leni, 0), leni)

  27. draw(p2(p, 0, leni), leni)

  28. draw(p2(p, 2 * leni, leni), leni)

  29. draw(p2(p, 0, 2 * leni), leni)

  30. draw(p2(p, leni, 2 * leni), leni)

  31. draw(p2(p, 2 * leni, 2 * leni), leni)

  32. pygame.display.flip()

  33. draw([0, 0], maxlen)

  34. while 1:

  35. for event in pygame.event.get():

  36. if event.type == pygame.QUIT:

  37. exit()

输出:

相关阅读

python中途岛海战

""" A Simple Version of Midway Island Naval Warfare with Pthon for Easy Learning by lixingqiu 这个射击游戏是使用Arcade模

Python: pandas中ix的详细讲解

在上一篇博客中,我们已经仔细讲解了iloc和loc,只是简单了提到了ix。这是因为相比于前2者,ix更复杂,也更让人迷惑。 因此,本篇博客通过

FileSplit简单使用

hadoop的FileSplit简单使用FileSplit类继承关系:FileSplit类中的属性和方法:作业输入:[java] view plain copy print?hadoop@hado

线上+线下+物流?新零售远不止这么简单

新零售区别于传统零售,它的核心是以人为本,利用当下发达的数字技术充分逼近消费者的内心需求,重构人货场,实现“以消费者体验为中心”

jQuery ajax 简单的实例

通过jQuery ajax实现从服务器查询数据,返回给前端并显示到html页面 html文件 <!DOCTYPE html> <html lang="zh-CN" xmlns:th="htt

分享到:

栏目导航

推荐阅读

热门阅读