用matlab画Mandelbrot(曼德布罗特)图
2015-11-01 13:53
423 查看
Mandelbrot图实际上是由Mandelbrot集合构成的图像。
Mandelbrot集合的定义如下:
zn+1=z2n+cz_{n+1}=z_n^2+c
其中,c是一个复数。加入给定一个复数z0z_0,比如z0=0z_0=0,那么这个递推式会生成一个序列:[z0,z1,z2,z3,...][z_0,z_1,z_2,z_3,...]。如果这个序列收敛在一个有限值范围内,那么c就在Mandelbrot集合中。当序列中有一项的绝对值大于2时,这个序列一定趋向于无穷,一般说来,如果这个序列前60项都没有一项大于2,那么可以认为这时c就在Mandelbrot集合中。
下面的Matlab程序就是根据以上的原理写的,只不过为了使得图片更加炫酷,根据发散快慢(也即序列在第几项大于2)设置不同的颜色:
通过调整中心点和放大倍数的位置,可以看到不同地方的图像
下面是在(-1.478,0),放大300倍,看到的图像
调整序列项数,以及分辨率,可以得到更加精细的图片,下面是一个5000x5000分辨率,序列项数为10000的图片
Mandelbrot集合的定义如下:
zn+1=z2n+cz_{n+1}=z_n^2+c
其中,c是一个复数。加入给定一个复数z0z_0,比如z0=0z_0=0,那么这个递推式会生成一个序列:[z0,z1,z2,z3,...][z_0,z_1,z_2,z_3,...]。如果这个序列收敛在一个有限值范围内,那么c就在Mandelbrot集合中。当序列中有一项的绝对值大于2时,这个序列一定趋向于无穷,一般说来,如果这个序列前60项都没有一项大于2,那么可以认为这时c就在Mandelbrot集合中。
下面的Matlab程序就是根据以上的原理写的,只不过为了使得图片更加炫酷,根据发散快慢(也即序列在第几项大于2)设置不同的颜色:
xc = 0; %图片中心点 yc = 0; xoom = 1; %放大倍数 res = 512; %分辨率 iter = 100; %序列项数 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: iter z = 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');
通过调整中心点和放大倍数的位置,可以看到不同地方的图像
下面是在(-1.478,0),放大300倍,看到的图像
调整序列项数,以及分辨率,可以得到更加精细的图片,下面是一个5000x5000分辨率,序列项数为10000的图片
相关文章推荐
- matlab区域增长法分割图像例子
- MATLAB中uigetfile函数使用方法
- matlab与c/c++混合编程
- 最佳缝合线算法(图像融合)
- MAC 下安装MATLAB2014b
- 11.17 MATLAB常见语法错误分析及解决办法
- (课后作业,搬运整合) matlab的图像风格化和在android 上的移植
- win8.1下matlab R2013a的help browser 显示格式不正确,无法copy
- 分享一个链接 Matlab
- MATLAB 自编3*3中值滤波(含边缘)
- Matlab 结构体(struct)学习
- MATLAB ROBOT里的link robot fkine drivebot
- matlab 编程——一些细节、常犯错误的汇总
- Matlab拟合工具箱的几个误差参数说明
- matlab学习之matlab的入门
- MATLAB 人脸定位
- Matlab 稀疏矩阵函数
- MATLAB将彩色图像转化为灰度图像
- Visual C++调用Matlab引擎
- Matlab2014b 并行运算开启方法