(分形作业)

取一矩形,九等分而去其中。

每一份九等分去其中;循环往复。

     

方法一(传统方法)

将每个矩形映射到三个矩形中去即可。

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)来处理,是坠吼的。

每个回合,我们都把矩形扩大了3倍(以行数计)。

只要再补上一个模块,使输出的矩形如你所想地大。其实我本来是不想整的 ,但是,最初的矩形是9*9像素的。。。这不影响我交作业但是这做博客就很难看了。

我会告诉你我是这么交上去的?

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。

sierpinski地毯的更多相关文章

  1. sierpinski地毯(II)

    今天又是因为可以用py而高兴的一天. 继续咱的sierpinski地毯计划. 二,随机算法 在二十年前,磁盘容量以MB还是KB计的时候,分形解决计图的问题确实有很大的优势.存至多十来个数就好了.我要在 ...

  2. 分形之谢尔宾斯基(Sierpinski)地毯

    前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种. 谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅 ...

  3. 混沌分形之谢尔宾斯基(Sierpinski)

    本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形. (1)谢尔宾斯基三角形 给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理: a.随机选择三角形的某一个顶点,计算出它与当前点的中点 ...

  4. sierpinski垫片(3D)[误]

    今天是因为可以用py而高兴的一天. 昨天老板淡淡地回了一句,sierpinski地毯画得挺好的. 我思考了五秒钟之后,想起来作业其实是sierpinski垫片.     三角垫片比地毯难做多了. 因为 ...

  5. JavaScript图形实例:SierPinski三角形

    1.SierPinski三角形 Sierpinski三角形是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.其生成过程为: (1)取一个三角形(多数使用等边三角形): (2) ...

  6. 18个分形图形的GIF动画演示

    这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形. (1)科赫(Koch)雪花   (2)列维(levy)曲线   (3)龙形曲线(Drago ...

  7. JavaScript动画实例:递归分形图动态展示

    在“JavaScript图形实例:SierPinski三角形” 和“JavaScript图形实例:Levy曲线及其变形”等文章中我们介绍了通过递归生成分形图形的方法.我们可以将绘制的分形图形每隔一定的 ...

  8. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  9. AC日记——铺地毯 洛谷 P1003(水水水水水~)

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

随机推荐

  1. 数理统计(二)——Python中的概率分布API

    数理统计(二)——Python中的概率分布API iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 数理统计中进行假设检验需要查一些分布的上分位数表.在scip ...

  2. RabbitMQ基础理解

    RabbitMQ基本理解 MQ是消息中间件,常见的有RabbitMQ,Kafka,RocketMQ,activeMQ 等,用于分布式系统中.作用有三点 解耦 异步 削峰 RabbitMQ 整体上是一个 ...

  3. nginx(4)

    目录 一.安装配置 1.安装 2.配置文件 3.测试和启动 二.功能 1.虚拟主机 1.1 基于IP 1.2 基于域名 1.3 基于端口 2.访问控制 3.用户认证 4.文件共享 5.文件别名 6.状 ...

  4. IO 多路复用详解

    转自:https://blog.csdn.net/sehanlingfeng/article/details/78920423

  5. CSV和JSON格式相互转换

    1.为什么要进行CSV与JSON格式之间的转换 CSV格式常用于一二维数据表示和存储,他是一种纯文本形式存储表格数据的表示方式.JSON也可以表示一二维数据.在网络信息传输中,可能需要统一表示方式,因 ...

  6. 荧屏弹幕_新增h5requestAnimationFrame实现

    所有的页面逻辑也是比较简单,用原生js实现,封装也是比较简单!要让页面效果更为炫酷,则可去引入相应的css,背景图片自己去img/下下载引入喔! HTML页面 <!doctype html> ...

  7. 母版页 treeview控件 SiteMapPath控件 treeview数据库绑定模式

     母版页就是网站中一样的部分母版页的后缀名是.Master可以把母版页当成一个页面  想让哪里是别的内容就可以  通过如下: <asp:ContentPlaceHolder ID="C ...

  8. Gson 格式化JSON日期数据

    Google的Gson功能非常强大! 格式化日期我们只需要这样创建就好了 Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd hh ...

  9. js 导航栏多项点击显示下拉菜单代码

    <!DOCTYPE html> <html> <head> <title>Dropdown</title> <!--<link ...

  10. PHP 7.0 7.3 (Unix) - 'gc' Disable Functions Bypass

    <?php # PHP 7.0-7.3 disable_functions bypass PoC (*nix only) # # Bug: https://bugs.php.net/bug.ph ...