情节黑色和白色mandelbrot集

时间:2016-04-24 04:24:42

标签: matlab plot mandelbrot imshow

以下代码取自here

我正在尝试对以下代码进行以下更改

  

如果c不是该组的一部分,则绘制一个白色   像素,如果它是集合的一部分,则绘制一个黑色像素。

我得到这个输出: enter image description here

但我想绘制一个黑白相似的mandelbrot图像:

enter image description here

  

使用imshow命令绘制图像

有人可以帮忙吗?

    m=601; 
    n=401;
    count_max = 200;

  %Change the range of x's and y's here 
  x_max =   1;
  x_min = - 2;
  y_max =   1;
  y_min = - 1;

%
%  Create an array of complex sample points in [x_min,x_max] + [y_min,y_max]*i.
%
  I = ( 1 : m );
  J = ( 1 : n );
  X = ( ( I - 1 ) * x_max + ( m - I ) * x_min ) / ( m - 1 );
  Y = ( ( J - 1 ) * y_max + ( n - J ) * y_min ) / ( n - 1 );
  [ Zr, Zi ] = meshgrid ( X, Y );
  C = complex ( Zr, Zi );
%
%  Carry out the iteration.
%
  epsilon = 0.001;

  Z = C;
  ieps = 1 : numel ( C );

  %Iterate through 1 to maximum no. of iterations
  for i = 1 : count_max
    Z(ieps) = Z(ieps) .* Z(ieps) + C(ieps); 
    W(ieps) = exp ( - abs ( Z(ieps) ) );
    ieps = ieps ( find ( epsilon < W(ieps) ) );
  end
%
%  Display the data.
%
  d = log ( abs ( Z ) );
  t = delaunay ( Zr, Zi );
%
%  To see individual pixels, use 'flat' color.
%
 h = trisurf ( t, Zr, Zi, d, 'FaceColor', 'flat', 'EdgeColor', 'flat' );
%  h = trisurf ( t, Zr, Zi, d, 'FaceColor', 'interp', 'EdgeColor', 'interp' );

  view ( 2 )
  axis equal
  axis on
  title_string = sprintf ( 'Mandelbrot set, %d x %d pixels, %d iterations', ...
    m, n, count_max );
  title ( title_string )
  xlabel ('Real Axis');
  ylabel ('Imaginary Axis');
%  Terminate.

1 个答案:

答案 0 :(得分:1)

属于该集合且不属于该集合的差异只不过是epsilon < W(ieps),您已经在代码中使用了它。图中的颜色信息来自trisurf ( t, Zr, Zi, d,...)的第四个参数。

所以我建议在trisurf命令之前执行以下操作:

d(1 : numel ( C )) = 1;
d(ieps) = 0;

首先将所有元素设置为1,然后根据在收敛测试的最后一次迭代中已经计算的条件,将这些元素设置为零,这些元素是集合的一部分。

要绘制黑白图,只需在colormap gray之后使用trisurf

希望有所帮助。