(分形作业)

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

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

     

方法一(传统方法)

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

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. 22(8).模型融合---RegionBoost

    在adaboost当中,样本的权重alpha是固定的,蓝色五角星所在的圈中3个○分错了,红色五角星所在的圈中4个×和1个○都分对了,很容易让人想到,这个模型,对于红色位置的判断更加可信. 动态权重,每 ...

  2. MVC(实战二:网址映射)

    一.默认网址 Global.asax 默认网址配置: 此时打开编辑页面,效果如下: ?后面包含name参数和Email参数  在Global中修改网址路由: public static void Re ...

  3. kubernets学习笔记

    K8s CI :持续集成CD :持续交付 D --DeliveryCD :持续部署 D --Deployment Kubernetes Cluster: Masters: (3-host 做高可用)A ...

  4. 多项式总结(STAGE 1)

    这么难的专题居然只给了这么短时间... 然而在NC的教导之下还是有一定的收获的. 必须打广告:0,1,2,3 附带一个垃圾博客:-1 按照习惯,堆砌结论而不加证明. Section1 导数: 基本形式 ...

  5. Vue父子组件数据双向绑定,子组件可修改props

    第一种,子组件通过监听父组件数据,子组件改变数据之后通知给父组件 原文链接:https://blog.csdn.net/m0_37728716/article/details/81776929 父组件 ...

  6. IT兄弟连 HTML5教程 CSS3揭秘 CSS规则的组成

    CSS和HTML一样都是由W3C制定的标准,本章中介绍的特性和功能还是来源于CSS1和CSS2(CSS2是根据CSS1扩展的).W3C也有新的版本更新,称为CSS3.虽然浏览器已经准备开始实现CSS3 ...

  7. Git - Git推送本地分支到远程分支报错(! [rejected] non-fast-forward)的解决办法

    一般都是冲突造成的,解决方案执行如下命令(dev为分支名称): git fetch origin dev  #获取远程 dev 分支的修改 git merge origin dev       #合并 ...

  8. dataTable 表插入新行

    DataRow dr = dt.NewRow();//定义新行            dr["sumPrice"] = sumPrice;//对应字段赋值            d ...

  9. Access Grid Control Properties 访问网格控件属性

    In this lesson, you will learn how to access the properties of a list form's Grid Control in WinForm ...

  10. Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)

    Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四) 前言 本章主要讲解通过Vue CLI 脚手架构建工具创建一个项目,在学习Vue CLI之前我们需要先了解下webpa ...