用matlab画Mandelbrot(曼德布罗特)图

Mandelbrot图实际上是由Mandelbrot集合构成的图像。

Mandelbrot集合的定义如下:

zn+1=z2n+c

其中,c是一个复数。加入给定一个复数 z0 ,比如 z0=0 ,那么这个递推式会生成一个序列: [z0,z1,z2,z3,...] 。如果这个序列收敛在一个有限值范围内,那么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的图片
这里写图片描述

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值