1

Below code is taken from here.

I am trying to make following change to the code below

If c is not part of the set, plot a white pixel, and if it is part of the set, plot a black pixel.

I am getting this output: enter image description here

But I want to plot a black and white mandelbrot image like this:

enter image description here

Use the imshow command to plot your image

Can anyone help ?

    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.
Stupid_Intern
  • 3,382
  • 8
  • 37
  • 74

1 Answers1

1

The difference of belonging to the set and not belonging to the set is nothing else than epsilon < W(ieps) and you are already using that in your code. The colorinformation in the plot is coming from the fourth argument of trisurf ( t, Zr, Zi, d,...).

So I suggest to do the following before the trisurf command:

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

This first sets all elements to 1 and then sets those elements to zero that are part of the set, according to the condition that was already calculated in the last iteration of the convergence test.

To plot black and white, just use colormap gray after the trisurf.

Hope that helps.

Alexander Büse
  • 564
  • 7
  • 15