利用python画分形图_「分形」python简单的分形图片 - seo实验室

分形

康托集

# 康托集

import pygame

pygame.init()

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

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

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

pygame.display.flip()

len0 = 1000 # 初始线条长度

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

line = 0 # 当前行数

while leni > 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

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

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

while len(tep) < n:

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

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

for j in tep:

tepp.APPend(nt + j)

tep.extend(tepp)

for k in tep:

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

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

pygame.display.flip()

line += 1

leni = leni / 3

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

输出:

cantorset.jpg

康托尘埃

代码:

# 康托尘埃

import pygame

pygame.init()

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

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

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

pygame.display.flip()

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

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

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

tep = []

for i in cantor:

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

cantor.extend(tep)

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

for i in cantor:

for j in cantor:

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

pygame.display.flip()

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

输出:

cantordust.jpg

方块分形

代码:

# 方块分形

import pygame

maxlen = 500 # 边界

pygame.init()

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

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

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

pygame.display.flip()

def draw(st, leni):

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

# leni: 当前方块边长

if leni > 3:

leni /= 3

draw(st, leni) # 左上

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

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

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

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

pygame.display.flip()

else:

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

draw([0, 0], maxlen)

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

输出:

boxfractal.jpg

谢尔宾斯基三角垫

代码:

# 谢尔宾斯基三角垫

import pygame

maxlen = 500 # 边界

pygame.init()

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

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

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

pygame.display.flip()

def mid(a, b):

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

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

def draw(one, two, tri):

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

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

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

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

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

pygame.display.flip()

else: # 达到最小结构

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

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

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

输出:

sierpinskitg.jpg

谢尔宾斯基方毯

代码:

# 谢尔宾斯基方毯

import pygame

maxlen = 500 # 边界

pygame.init()

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

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

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

pygame.display.flip()

def p2(p, r, d):

# p: 参考左上顶点

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

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

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

def points(p, leni):

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

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

def draw(p, leni):

# p:左上顶点

# leni:边长

leni /= 3

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

points(p2(p, leni, leni), leni))

if leni > 3:

draw(p, leni)

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

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

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

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

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

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

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

pygame.display.flip()

draw([0, 0], maxlen)

while 1:

for event in pygame.event.get():

if event.type == pygame.QUIT:

exit()

输出:

sierpinskiC.jpg

相关阅读

"""

A Simple Version of Midway Island Naval Warfare with Pthon for Easy Learning by lixingqiu

这个射击游戏是使用Arcade模

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

因此,本篇博客通过

hadoop的FileSplit简单使用FileSplit类继承关系:FileSplit类中的属性和方法:作业输入:[java]

view plain

copy

print?hadoop@hado

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

通过jQuery ajax实现从服务器查询数据,返回给前端并显示到html页面

html文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值