今天又是因为可以用py而高兴的一天。

继续咱的sierpinski地毯计划。

二,随机算法

在二十年前,磁盘容量以MB还是KB计的时候,分形解决计图的问题确实有很大的优势。存至多十来个数就好了。我要在二十年前,敢用这种几百×几百的矩阵直接存数据,那肯定被计算机打死,呃,被老板打死。。。电脑怎么烧掉的都不知道。。。

这种意义上说,随机算法才是传统算法。。。之前那个数学硬解的玩意,我是不信十五年前的计算机能支持的。。。(说的好像那时候我有电脑用似的。。。呃好像还真有。。。)

说到分形,不得不提迭代函数系。

康托三分集和谢尔宾斯基垫片,谢尔宾斯基地毯都是由若干个压缩映射确定的。

[1]沙震,阮火军:分形与拟合[M]. 杭州:浙江大学出版社,2005.3

啥是完备度量空间(X;d)上的双曲迭代函数系呢?每个映射都是压缩映射。

我们今天用的是带概率的迭代函数系。不是有几个压缩映射么?给一个加权,通过抛硬币选择走那条路。视为一次迭代。

如果在随机迭代出来的点序列中,去掉前若干项(万一我从中间开始的,岂不是凉凉月色为你。。。),那对于充分长的一段点列,它与K的hausdorff距离小于e的概率大于1-e。

换句话说,如果我迭代了足够多次,那么我应该能跑出来,至于跑不出来的情形,我觉得你应该换个随机数生成法。。。不对,不如买彩票。。。买好彩票就能换台电脑了,反复迭代就可以买一台超算。

唔,咱应该不用解释啥是完备,啥是度量空间,啥是压缩映射吧?

至于想问hausdorff距离的同学,来蹭课吧。

接着我们进入算法环节。

这个sierpinski地毯呢,有八个压缩映射确定。

正常的流程是写九个函数。

def f1():

def f2():

def frandom():

然而机智的我早就看穿一切。

为啥要写8+1个?我写9+1个不就好了?中间第5个是空函数嘛。

我先写了一个映射,将random的范围(0,1)映射到(0,4/9)U(5/9,1)。

这样我×3取整就能得到是第几排了,去掉整数部分,再×3取整就知道是第几列了。

我们刚刚是不是取到了两个0,1,2的数?

嘿嘿嘿!(发出了政委的笑声)

def next(x,y):

t=random.random()

if t<=0.5:

t=t/4.5*4

elif t>0.5:

t=(t-0.5)/4.5*4+5/9

i=int(t*3)

j=int((t-int(t*3)/3)*9)

xx=x/3+i/3

yy=y/3+j/3

return xx,yy

主函数是这样的:

import cv2

import numpy as np

import ct

import random

times=7

k=3**times

img=ct.cut(times)

x=random.random()

y=random.random()

a=np.zeros((k,k),dtype=int)

trytime=20000000

for i in range(trytime):

[x,y]=ct.next(x,y)

if i>300:

a[int(k*x)][int(k*y)]=1

img=ct.print(a,times,img)

cv2.imshow("out",img)

name=str("bigrandom"+str(int(trytime))+".jpg")

cv2.imwrite(name,img)

我决定再强调一遍前xxx项要扔掉!

我们要写什么样的算法?要写禁得起比较的算法,所以这矩阵多大呢?

3的5次方*3的5次方。

上面分别是迭代80w,10w,2w,5k,1k次后的结果。

下面的分别是迭代2000w,300w,65w,10w次的结果。

为啥是这些数,我手里的图片查看器会反走样,要把图片放大才会看到点。。。在点很稀疏的时候,这里,我不知道,如果你看到一坨黑的,那有可能,就是被反走样了。也可能就是因为点少的可怜。。。

至于为啥今天和昨天的颜色相反。这是因为昨天我是用np.zeros然后用1标记白的(去掉的);今天我还这么来,用np.zeros初始化,用1标记黑的。你想一致,很简单,你用np.ones初始化,然后用0标记黑的。

“可以,但没必要。”

下次不出意外的话是sierpinski垫片。

能用py就很开心。我写两个用了十分钟。

如果是c++我可能环境都没配置好。不对,我有可能就把这事晾一边了。

昨天晚上在准备羽毛球裁判的讲座。总觉得有啥忘了的。。。(划掉)

我自闭了。这图片咋调大小。。。woc,我的公式也被吃了。

sierpinski地毯(II)的更多相关文章

  1. sierpinski地毯

    (分形作业) 取一矩形,九等分而去其中. 每一份九等分去其中:循环往复.       方法一(传统方法) 将每个矩形映射到三个矩形中去即可. def big(a,times):    k=3**tim ...

  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. 洛谷P1003铺地毯(提高组)

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

  9. Leetcode 笔记 113 - Path Sum II

    题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...

随机推荐

  1. Oracle数据 查询操作日志

    SELECT t.SQL_TEXT, t.FIRST_LOAD_TIME,t.PARSING_SCHEMA_NAME FROM v$sqlarea t WHERE t.SQL_TEXT LIKE 'D ...

  2. jieba 分词使用入门

    1. 介绍 JIEBA 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性: 支持 3 种分词模式:精确模式.全模式.搜索引擎模式 支持繁体分词 支持自定义词典 import jieb ...

  3. 图解隐马尔可夫模型(HMM)

    写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...

  4. javascript实现base64编码、解码

    我们知道,浏览器的window对象提供有window.atob()和window.btoa()方法可以对字符串进行Base64编码和解码. console.log(window.btoa(window ...

  5. javascript的10个开发技巧

    总结10个提高开发效率的JavaScript开发技巧. 1.生成随机的uid. const genUid = () => { var length = 20; var soupLength = ...

  6. jsp页面科学计数法显示问题的解决办法

    在JSP页面中返回的double类型的数值,如果数值过大,就会被显示成科学计数法. 这个问题通常出现在表单填写的input中,因此是必须要解决的问题. JSTL提供了标准的数值格式化标签,使用上非常简 ...

  7. Spring核心(IoC) 入门解读

    什么是IoC容器和Bean? 说到容器,就是用来装东西,那么这里边装的是什么那?是bean对象.那么你会问什么是bean?这就要从很久很久以前说起,当我们创建对象的时候,我们会new一个对象出来,但是 ...

  8. 【分布式架构】--- 基于Redis组件的特性,实现一个分布式限流

    分布式---基于Redis进行接口IP限流 场景 为了防止我们的接口被人恶意访问,比如有人通过JMeter工具频繁访问我们的接口,导致接口响应变慢甚至崩溃,所以我们需要对一些特定的接口进行IP限流,即 ...

  9. Vue介绍以及模板语法-插值

    1.Vue的介绍 Vue是一套用于构建用户界面的渐进式框架. 注意:Vue是一个框架,相对于jq库来说,是由本质的区别的:https://cn.vuejs.org/ Vue不支持IE8及一下版本,因为 ...

  10. 树莓派4B到货开箱体验

    树莓派4B到货开箱体验 实不相瞒,喜欢这块板已经很久了,但是国内4GB内存的版本始终没货,.....等等等,终于到货了,迅雷不及眼耳之势赶紧下单...购买点亮开发板所需要的物件 顺便看到一个好看的外壳 ...