基于MATLAB和python输出曼德勃罗集
上帝的指纹——曼德勃罗集
曼德勃罗集可称是人类有史以来做出的最奇异、最瑰丽的几何图形,被人称为“上帝的指纹”、“魔鬼的聚合物”。 这个点集均出自公式: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输出曼德勃罗集相关推荐
- 基于Python画曼德勃罗集
最近有点迷分型几何,看到"上帝指纹"曼德勃罗集,想用Python实现一下. 源码很简单20行不到. import matplotlib.pyplot as plt import n ...
- 如何用python画人像_如何用Python画曼德勃罗集
先上图好看的曼德勃罗集 错了错了是这个特别好看的曼德勃罗集 当然你需要下载Python(https://www.python.org) 和Visual Studio 2019(https://visu ...
- 【知识搬运】曼德勃罗集—“上帝指纹”
人类对于宇宙总是有着各种各样的迷思,古往今来,无数的智者在对着深邃的夜空沉思,希望能从中找到答案.他们从追问人类是如何诞生的,到追问宇宙如何诞生的,不断地探索着未知. 而在这个过程中,许多智者也曾&q ...
- python绘制分形图基础_Python 绘制分形图(曼德勃罗集、分形树叶、科赫曲线、分形龙、谢尔宾斯基三角等)附代码...
1. 曼德勃罗集 import numpy as np import pylab as pl import time from matplotlib import cm def iter_point( ...
- C语言递归分形实验-曼德勃罗集
这学期的线下C语言课程,大一学生学完递归后,为了加深对递归的理解,布置了一次分形图片生成实验的PBL.这次,介绍同学们实现的曼德勃罗集.以下提供了分步骤的实现思路.代码,大家可以参考. 同学们调研的目 ...
- 浅析曼德勃罗集及C++实现图形绘制
在算法大作业中,认识到了曼德勃罗集(Mandelbrot Set)这一名词,经过网上资料的查阅,才对其思想和独特魅力略知皮毛.由于该集合的定义与分形有关,需要先介绍一下分形的概念. 什么是分形(Fra ...
- python生成曼德勃罗分形图形
来自https://blog.csdn.net/baimafujinji/article/details/50859174 c程序版生产那种格式的图像显然不利于咱们研究分析,于是写个py版本的以方便学 ...
- unity DOTS的学习总结之Job System应用——绘制曼德勃罗集合
接上回:DOTS的学习总结之Job System的介绍,这次就利用之前了解知识来做点效果. 上回在这:unity DOTS的学习总结之Job System 说到并行处理,那最适合拿来做实验的就是一些分 ...
- matlab分形曼德勃罗,曼德勃罗集合分形图案
三.曼德勃罗集合(Mandelbrot Set) 曼德勃罗集合(Mandelbrot Set)或曼德勃罗复数集合,是一种在复平面上组成分形的点的集合,因由曼德勃罗提出而得名.曼德博集合可以使复二次多项 ...
最新文章
- python3 with中异常的问题
- ⑨ 设计模式的艺术-22.中介者(Mediator)模式
- android开发之-软件设置保存-快速学会使用SharedPreferences篇-实测
- 实验三_166_张珍珍
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 聚类(下) 谱聚类算法
- java doubke类型转换为String_Java基础知识面试题大集合
- 转:数据库关系模式的范式详解
- mysql利用binlog删除数据库_MySQL数据库之mysql手动删除BINLOG的方法
- 华为P50 Pro宣传海报曝光:双环形后置相机设计
- Linux中删除文件夹和文件的命令
- linux 基础 —— 网络管理
- [改善Java代码]避免对象的浅拷贝
- 金山打字通计算机英语,金山打字通英文版
- Flex 3 预览版目前已经上架 Cydia BigBoss 源
- 北京19家A类定点医院名单
- x41t下使用工行华虹u盾
- mysql如何导入生僻字_MySQL插入生僻字失败的处理方法(图)
- Lua ipairs与pairs的区别
- 论文阅读-(ECCV 2018) Second-order Democratic Aggregation