(分形做业)python
取一矩形,九等分而去其中。c++
每一份九等分去其中;循环往复。算法

方法一(传统方法)小程序
将每一个矩形映射到三个矩形中去便可。dom
def big(a,times):
k=3**times
b=np.zeros((k,k),dtype=int)
for i in range(k//3):
for j in range(k//3):
t=ct.renew(a[i][j])
b[3*i:3*i+3,3*j:3*j+3]=t
return b
def renew(i):
if i==0:
t=np.zeros((3,3),dtype=int)
t[1][1]=1
elif i==1:
t=np.ones((3,3),dtype=int)
return t
建立一个比以前的矩形大3倍的矩形,将原来的每块按“若黑,中白外黑;若白,全白”的方法来处理。调试
在数据存储里,以黑为0,以白为1。恰好用分别(zeros+芯=1)与(ones)来处理,是坠吼的。 blog

每一个回合,咱们都把矩形扩大了3倍(以行数计)。
图片
只要再补上一个模块,使输出的矩形如你所想地大。其实我原本是不想整的 ,可是,最初的矩形是9*9像素的。。。这不影响我交做业可是这作博客就很难看了。博客

我会告诉你我是这么交上去的?it
import cv2
import ct
import numpy as np
import random
def output(a,times,iii):
k=3**(iii-times)
n=3**iii
p=3**times
b=np.zeros((n,n),dtype=int)
for i in range(p):
for j in range(p):
if a[i][j]==0:
pass
if a[i][j]==1:
for ii in range(k):
for jj in range(k):
b[i*k+ii][j*k+jj]=1
b[i*k+ii][j*k+jj]=1
b[i*k+ii][j*k+jj]=1
return b
def big(a,times):
k=3**times
b=np.zeros((k,k),dtype=int)
for i in range(k//3):
for j in range(k//3):
t=ct.renew(a[i][j])
b[3*i:3*i+3,3*j:3*j+3]=t
return b
def renew(i):
if i==0:
t=np.zeros((3,3),dtype=int)
t[1][1]=1
elif i==1:
t=np.ones((3,3),dtype=int)
return t
def print(a,iii,img):
k=3**iii
for i in range(k):
for j in range(k):
if a[i][j]==0:
img[i][j][0]=0
img[i][j][1]=0
img[i][j][2]=0
if a[i][j]==1:
img[i][j][0]=255
img[i][j][1]=255
img[i][j][2]=255
return img
以上是ct.py为啥用这个名字呢。。。今天大行动好吧。。。
生活鸭梨大啊,csgo卸载好几个月了。。。
尤为是不那么严肃的小程序,我对于变量名一向不怎么在乎。
实际上是很开心的一天,由于能够用python吼吼吼。
我不知道C++更快么?我知道,我固然知道!可是python调试很是友好啊。
想一想今天那个c++二阶矩阵求逆求出inf的事情。。。痛苦啊。
或者这么说吧,py写出来,报错,你大概就猜获得上下多少行内出了问题,你打三个print基本就知道哪里出错了。
但c++不是,今天我printf出来一堆不知道什么鬼,骂了几分钟之后发现运算错误根本不在这里,我把浮点矩阵的printf抄到整型的里了,其实问题根本不在这里。。。
import cv2
import numpy as np
import ct
a=np.zeros((1,1),dtype=int)
times=1
for i in range(times):
a=ct.big(a,i+1)
print(a.shape)
img=ct.cut(times)
imgg=ct.print(a,times,img)
name=str("sierpinski"+str(int(times))+".jpg")
cv2.imwrite(name,imgg)
if times<5:
b=ct.output(a,times,5)
imgx=ct.cut(5)
imgggg=ct.print(b,5,imgx)
name=str("sierpinskinew"+str(int(times))+".jpg")
cv2.imwrite(name,imgggg)
什么?你问cut在哪里?
生成一张3**i行3**i列的图片。
别问,问就祖传秘方。
明天写另外一半
如何用随机数算法来实现这玩意。
总之是由于能够问心无愧地用python而高兴的一天。
哎,你说C++,是不会用么?算也不算。
讲道理要实现没什么技术问题,除了,你写三小时程序有两小时在骂街之外。
C++使我暴躁。
你说我np(3**7,3**7)多快乐啊。上次int a[1000][1000]直接boom了。。。
替代算法有么,固然有,但是不快乐啊2333333。