############################################################################
#
#	File:     mandel1.icn
#
#	Subject:  Program to display the Mandelbrot set
#
#	Author:   Ralph E. Griswold
#
#	Date:     June 17, 1994
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#  This is a barebones version of a display of the Mandelbrot set.  It
#  has deliberately been left simple and free of options so that the
#  basic idea is clear and so that it can be used as the basis of
#  more capable versions.
#
#  This program is based on material given in "Chaos, Fractals,
#  and Dynamics", Robert L. Devaney, Addison-Wesley, 1990.
#
############################################################################
#
#  Requires:  Version 9 graphics
#
############################################################################
#
#  Links:  wopen
#
############################################################################

link wopen

procedure main()
   local size, real_size, i, j, c1, c2, x, y, n, x1, y1, limit, extent

   size := 300
   extent := 4.0 / size

   limit := 30

   WOpen("label=mandel", "height=" || size, "width=" || size) |
      stop("*** cannot open window")

   every i := 1 to size do {
      every j := 1 to size / 2 do {
         c1 := -2 + i * extent
         c2 := 2 - j * extent
         x := c1
         y := c2
         every 1 to limit do {		# see what the orbit is
            x1 := x ^ 2 - y ^ 2 + c1
            y1 := 2 * x * y + c2
            if (x1 ^ 2 + y1 ^ 2) > 4 then break next
            x := x1
            y := y1
            }
         DrawPoint(i, j, i, size - j)
         }
      }

   Event()

end
