(分形作业)

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

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

     

方法一(传统方法)

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

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. <深度学习>TensorBoard的demo

    import tensorflow.compat.v1 as tf import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1& ...

  2. 【使用篇二】Lombok的介绍与使用(16)

    Lombok通过简单注解来实现精简代码来达到消除冗长代码的目的.它能够提高编码效率.使代码更简洁.消除冗长代码.避免修改字段名时忘记修改方法名. 一.Lombok注解 Lombok主要常用的注解有: ...

  3. 第04组 Beta冲刺(2/4)

    队名:斗地组 组长博客:地址 作业博客:Beta冲刺(2/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文档 ...

  4. js 运算的内置函数

    // 一.Math.round()作用:四舍五入返回整数.(返回参数+0.5后,向下取整) // Math.round(5.57) //返回6 // Math.round(2.4) //返回2 // ...

  5. 【带着canvas去流浪(10)】文字烟花

    目录 一. 文字烟花 二. 动画原理 2.1 像素操作 2.2 烟花生成算法 2.3 计时器 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址 ...

  6. InfluxDB从原理到实战 - 一篇文章搞懂InfluxDB时区

    0x00 简介    InfluxDB默认以UTC时间存储并返回时间戳,当接收到一个时序数据记录时,InfluxDB将时间戳从本地时区时间转换为UTC时间并存储,查询时,InfluxDB返回的时间戳对 ...

  7. C# 请求在线接口数据

    请求后台,有很多方式,常见的有WebRequest.HttpClient.以下mark一上~ WebRequest方式 1. Get public static async Task<strin ...

  8. linux中vi和vim操作

    一.简单介绍 vi 和 vim 类似于windows的文本编辑器 所有的Linux系统都会内置vi文本编辑器 vim可以看做是vi增强版,具有程序编辑能力,支持语法高亮,代码补全,编译及错误跳转等功能 ...

  9. RDIFramework.NET敏捷开发框架 ━ 工作流程组件Web业务平台

    接前两篇: RDIFramework.NET敏捷开发框架 ━ 工作流程组件介绍 RDIFramework.NET敏捷开发框架 ━ 工作流程组件WinForm业务平台 1.RDIFramework.NE ...

  10. Python list遍历remove()时的一个小BUG

    有这样一个列表: s=list('abcdefg') 现在因为某种原因我们需要从s中踢出一些不需要的元素,方便起见这里直接以踢出所有元素的循环代替: for e in s: s.remove(e) 结 ...