function cross_chaos ( n )

%*****************************************************************************80
%
%% cross_chaos() draws a cross using an iterated function system.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    19 August 2025
%
%  Author:
%
%    John Burkardt.
%
%  Reference:
%
%    Scott Bailey, Theodore Kim, Robert Strichartz,
%    Inside the Levy dragon,
%    American Mathematical Monthly,
%    Volume 109, Number 8, October 2002, pages 689-703.
%
%    Michael Barnsley, Alan Sloan,
%    A Better Way to Compress Images,
%    Byte Magazine,
%    Volume 13, Number 1, January 1988, pages 215-224.
%
%    Michael Barnsley,
%    Fractals Everywhere,
%    Academic Press, 1988,
%    ISBN: 0120790696,
%    LC: QA614.86.B37.
%
%    Michael Barnsley, Lyman Hurd,
%    Fractal Image Compression,
%    Peters, 1993,
%    ISBN: 1568810008,
%    LC: TA1632.B353
%
%    Alexander Dewdney,
%    Mathematical Recreations,
%    Scientific American,
%    Volume 262, Number 5, May 1990, pages 126-129.
%
%    Bernt Wahl, Peter VanRoy, Michael Larsen, Eric Kampman,
%    Exploring Fractals on the Mac,
%    Addison Wesley, 1995,
%    ISBN: 0201626306,
%    LC: QA614.86.W34.
%
%  Input:
%
%    integer n: the number of iterations.
%

%
%  Define the linear map.
%
  A = [ 1.0 / 3.0, 0.0; ...
        0.0,       1.0 / 3.0 ];
%
%  Define the five possible translations.
%
  b = [ 1.0 / 3.0, 0.0,       1.0 / 3.0, 2.0 / 3.0, 1.0 / 3.0; ...
        0.0,       1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0, 2.0 / 3.0 ];
%
%  Random starting point in the unit square.
%
  x = rand ( 2, 1 );
%
%  Iterate the map n times.
%
  clf ( );

  hold ( 'on' );

    for i = 1 : n
      x = A * x;
      j = randi ( [ 1, 5 ] );
      x = x + b(:,j);
      plot ( x(1), x(2), 'bo', 'markersize', 1 );
    end

  hold ( 'off' );

  axis ( 'equal' );
  filename = 'cross_chaos.png';
  print ( '-dpng', filename );
  fprintf ( 1, '  Graphics saved as "%s"', filename );
  close ( );

  return
end

