上帝的指纹——曼德勃罗集

曼德勃罗集可称是人类有史以来做出的最奇异、最瑰丽的几何图形,被人称为“上帝的指纹”、“魔鬼的聚合物”。 这个点集均出自公式:Zn+1=(Zn)^2+C
,对于非线性迭代公式Zn+1=(Zn)^2+C,所有使得无限迭代后的结果能保持有限数值的复数C的集合,构成曼德勃罗集。

上帝的指纹——曼德勃罗集

简介

这是一个迭代公式,式中的变量都是复数.这是一个大千世界,从他出发可以产生无穷无尽美丽图案,他是曼德勃罗特教授在二十世纪七十年代发现的.


你看上图中,有的地方像日冕,有的地方像燃烧的火焰,只要你计算的点足够多,不管你把图案放大多少倍,都能显示出更加复杂的局部.这些局部既与整体不同,又有某种相似的地方,好像着梦幻般的图案具有无穷无尽的细节和自相似性.曼德勃罗特教授称此为"魔鬼的聚合物".为此,曼德勃罗特在1988年获得了"科学为艺术大奖".
图形是由美国数学家曼德勃罗特教授于1975年夏天一个寂静的夜晚,在冥思苦想之余翻看儿子的拉丁文字典是想到的,起拉丁文的原意是"产生无规则的碎片"。主要用运了分形理论和时间逃逸算法(能力有限,看不懂0.0)

MATLAB实现

代码

xc = 0;  %图片中心点
yc = 0;
xoom = 1;   %放大倍数
res = 3000;   %分辨率
iter = 300;   %序列项数x0 = xc - 2 / xoom;
x1 = xc + 2 / xoom;
y0 = yc - 2 / xoom;
y1 = yc + 2 / xoom;x = linspace(x0, x1, res);
y = linspace(y0, y1, res);
[xx, yy] = meshgrid(x, y);
C = xx + yy * 1i;
z = zeros(size(C));
N = uint8(zeros(res, res, 3));color = uint8(round(rand(iter, 3) * 255));for k = 1: iterz = z.^2 + C;[row, col] = find(abs(z) > 2);k1 = zeros(size(row)) + 1;k2 = zeros(size(row)) + 2;k3 = zeros(size(row)) + 3;p1 = sub2ind(size(N), row, col, k1);N(p1) = color(k, 1);p2 = sub2ind(size(N), row, col, k2);N(p2) = color(k, 2);p3 = sub2ind(size(N), row, col, k3);N(p3) = color(k, 3);z(abs(z) > 2) = 0;C(abs(z) > 2) = 0;
end
imshow(N);
imwrite(N, 'test.png');

Python实现

代码

import numpy as np
import matplotlib.pyplot as pltdef iterator(c,r,max_iter):#定义逃逸时间函数,c为初始值,r为收敛半径,max_iter为最大迭代次数,返回逃逸时间z=c #初始值for iter in range(0,max_iter,1):if abs(z)>r:breakz=z**2+creturn iterdef plot_mandelbrot(): #定义绘制mandelbrot图像X=np.linspace(-1.75,1.05,5000) #实部范围,5000这个数要量力而行Y=np.linspace(-1.25,1.25,5000) #虚部范围,5000这个数要量力而行real,image=np.meshgrid(X, Y) #生成网格点坐标矩阵。c=real+image*1j #构造复数mandelbrot_set = np.frompyfunc(iterator, 3, 1)(c, 1.5, 100).astype(np.float) #frompyfunc(func, nin, nout),其中func是需要转换的函数,nin是函数的输入参数的个数,nout是此函数的返回值的个数,frompyfunc把Python里的函数(可以是自写的)转化成ufuncplt.figure(dpi=500) #dpi设置分辨率尽可能高,细节显示更炫plt.imshow(mandelbrot_set,extent=[-1.35, 1.35, -1.25, 1.25]) #extent用来调节显示框大小比例#plt.axis('off') #是否显示坐标轴plt.show()if __name__=="__main__":plot_mandelbrot()

总结

由于曼德勃罗集是由不断迭代所产生,所以如果生成无限放大的图片,需要增大分辨率,这是比较烧CPU的,建议电脑配置高的,尝试提高分辨率,不然电脑会卡死(本人深有体会 555,在Pycharm上提高分辨率,电脑会卡死;而在matlab中还没有发现卡死的情况),而且如果生成高分辨率的图像,所需要的的时间会让你崩溃。
生成高分辨率图像后,可以使用Ps或Pr、XaoS等其他软件进行处理放大,做出连续放大的视频。

基于MATLAB和python输出曼德勃罗集相关推荐

  1. 基于Python画曼德勃罗集

    最近有点迷分型几何,看到"上帝指纹"曼德勃罗集,想用Python实现一下. 源码很简单20行不到. import matplotlib.pyplot as plt import n ...

  2. 如何用python画人像_如何用Python画曼德勃罗集

    先上图好看的曼德勃罗集 错了错了是这个特别好看的曼德勃罗集 当然你需要下载Python(https://www.python.org) 和Visual Studio 2019(https://visu ...

  3. 【知识搬运】曼德勃罗集—“上帝指纹”

    人类对于宇宙总是有着各种各样的迷思,古往今来,无数的智者在对着深邃的夜空沉思,希望能从中找到答案.他们从追问人类是如何诞生的,到追问宇宙如何诞生的,不断地探索着未知. 而在这个过程中,许多智者也曾&q ...

  4. python绘制分形图基础_Python 绘制分形图(曼德勃罗集、分形树叶、科赫曲线、分形龙、谢尔宾斯基三角等)附代码...

    1. 曼德勃罗集 import numpy as np import pylab as pl import time from matplotlib import cm def iter_point( ...

  5. C语言递归分形实验-曼德勃罗集

    这学期的线下C语言课程,大一学生学完递归后,为了加深对递归的理解,布置了一次分形图片生成实验的PBL.这次,介绍同学们实现的曼德勃罗集.以下提供了分步骤的实现思路.代码,大家可以参考. 同学们调研的目 ...

  6. 浅析曼德勃罗集及C++实现图形绘制

    在算法大作业中,认识到了曼德勃罗集(Mandelbrot Set)这一名词,经过网上资料的查阅,才对其思想和独特魅力略知皮毛.由于该集合的定义与分形有关,需要先介绍一下分形的概念. 什么是分形(Fra ...

  7. python生成曼德勃罗分形图形

    来自https://blog.csdn.net/baimafujinji/article/details/50859174 c程序版生产那种格式的图像显然不利于咱们研究分析,于是写个py版本的以方便学 ...

  8. unity DOTS的学习总结之Job System应用——绘制曼德勃罗集合

    接上回:DOTS的学习总结之Job System的介绍,这次就利用之前了解知识来做点效果. 上回在这:unity DOTS的学习总结之Job System 说到并行处理,那最适合拿来做实验的就是一些分 ...

  9. matlab分形曼德勃罗,曼德勃罗集合分形图案

    三.曼德勃罗集合(Mandelbrot Set) 曼德勃罗集合(Mandelbrot Set)或曼德勃罗复数集合,是一种在复平面上组成分形的点的集合,因由曼德勃罗提出而得名.曼德博集合可以使复二次多项 ...

最新文章

  1. python3 with中异常的问题
  2. ⑨ 设计模式的艺术-22.中介者(Mediator)模式
  3. android开发之-软件设置保存-快速学会使用SharedPreferences篇-实测
  4. 实验三_166_张珍珍
  5. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
  6. 聚类(下) 谱聚类算法
  7. java doubke类型转换为String_Java基础知识面试题大集合
  8. 转:数据库关系模式的范式详解
  9. mysql利用binlog删除数据库_MySQL数据库之mysql手动删除BINLOG的方法
  10. 华为P50 Pro宣传海报曝光:双环形后置相机设计
  11. Linux中删除文件夹和文件的命令
  12. linux 基础 —— 网络管理
  13. [改善Java代码]避免对象的浅拷贝
  14. 金山打字通计算机英语,金山打字通英文版
  15. Flex 3 预览版目前已经上架 Cydia BigBoss 源
  16. 北京19家A类定点医院名单
  17. x41t下使用工行华虹u盾
  18. mysql如何导入生僻字_MySQL插入生僻字失败的处理方法(图)
  19. Lua ipairs与pairs的区别
  20. 论文阅读-(ECCV 2018) Second-order Democratic Aggregation

热门文章

  1. Ubuntu上Github下载慢的问题解决方法记录
  2. 前端原生javaScript,通过身份证号判断年龄、性别、出生日期。
  3. 如何关闭或启动mysql服务
  4. 浅谈医疗器械的工频磁场抗扰度试验
  5. 网页制作软件、网页设计软件有哪些,如何选择适合自己的?
  6. php 没有访问权限,PHP出现操作文件没有权限怎么办?
  7. c语言有哪些方向,c语言有哪些就业方向
  8. 学习生物信息学的理由
  9. 生物序列生成onehot编码
  10. matlab求马尔可夫转移矩阵,matlab – 估计马尔可夫转移矩阵的置信区间