分形
康托集
代码:
# 康托集
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()
输出:
康托尘埃
代码:
# 康托尘埃
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()
输出:
方块分形
代码:
# 方块分形
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()
输出:
谢尔宾斯基三角垫
代码:
# 谢尔宾斯基三角垫
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()
输出:
谢尔宾斯基方毯
代码:
# 谢尔宾斯基方毯
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()
输出:
相关阅读
""" 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文件 <!DOCTYPE html> <html lang="zh-CN" xmlns:th="htt