[comp.sys.amiga] The Interior Mandelbrot

hull@hao.UCAR.EDU (Howard Hull) (05/31/87)

Ever wonder what evil lurks in the blackened depths of the inner circle of the
Mandelbrot set?  Long ago, when Robert French came out with the first widely
distributed C language Mandelbrot set generator for the Amiga, I attempted to
hack it to show what was going on in the inner reaches with a set of contours
just like the outer Mandelbrot.  I failed.  My reasoning went something like
this:  The Mandelbrot fractal boundary is considered to be "stable".  The points
along the boundary are not migrating in the accumulated formulary sum.  Points
outside the boundary flee to infinity.  Points inside the boundary fall to
various limit cycles or to certain loci in the inner map, such as x=0,y=0.
The destination points of the flight are known as "strange attractors".
The outer infinite destination is a strange attractor at infinity.  The one
at the origin is perhaps easy to accept - the iterative product of real
fractions, at least, ought to go to zero as a limit.  The other points are
elusive rascals to locate if one has no prior hueristic knowledge of likely
sites for loci.  The original Amiga Mand.c program, as improved by R. J. Mical
had a small section of inescapable code (you had to reboot to get out of it)
called the "Analyzer" with which you could, after executing "SA filename" and
"L filename" followed by "A", examine the orbits of the Mandelbrot sum points
on the fly.  By leaning on the left mouse button and patrolling with the
cursor, one could find the strange attractors (I think they're the places
where the knot of points condenses into a minimum number of clusters of
minimal diameter - one in the main body, three in the lobes at the top and
bottom, four in the first lobe on the x axis, five for some intermediate lobes,
etc.).

Well, anyway, back to the matter at hand.  The cause of my failure was rooted
in the following reasoning:  If the fleeing points are advancing toward what is
nominally considered a bye-bye level of absolute radial magnitude 2.0 then we
could suppose that points bound to collapse toward the inside may be considered
doomed when they fall to absolute magnitude 0.5, right?  So I set up a little
if statement to trap this condition.  Much to my surprise and horror, I found
that many of the points destined to escape to the *outside* did so by orbiting
through radial magnitudes 0.5 and lower.  In fact, setting the separator as
low as 0.03125 left zillions of points improperly sorted.  I was forced to
conclude that there was no practical lower value that would sort the inwardly
collapsing points.  And with that, I went on to other business and left the
strange attractors to the math experts.

Recently, there was Yet Another Mandelbrot Program, titled MandelVroom, posted
to the net by one Kevin Clague at Amdahl.  He added a Motorola floating point
section that he claimed would give much improved resolution over the previously
available Mandelbrots, though I haven't checked that out in detail yet.  One
thing that Kevin did make a note about in his code is the "Ring Detector" for
ponderous points in the inner lobes of the Mandelbrot interior exo-set.  This
code detects non-migrating orbits for rotating points and escapes to more
productive duty, setting the cell count to max on the way out.  However,
another thing it is capable of doing, so it turns out, is acting as a strange
attractor contour generator of sorts.  It doesn't do a perfect job of this,
(in fact, I am wondering why it works at all) in that some places where there
are inflections in the contour, (See Note 1. below) it just gets "noisy".
Nonetheless, the contours produced may be of interest to some of you.  And
why not - the change to the source involves commenting out only three lines of
assembly code.  The results will not hold your attention as well as does the
Mandelbrot set, but (Yawn) it's something to know about...  In mand.c I put
semicolons at the beginning of the lines as shown below:
	At line ~229 in mand.c find the ring detector loop and add (;)'s
	lloop1
	       cmp.l    (a0)+,d4
	       bne      skipit
	       cmp.l    (a1)+,d5
	       bne      nextl
	;      move.w  _MaxCount,d0
	;      ext.l    d0
	;      move.l   d0,k(a5)
	;      move.l   #0,l(a5)
	       bra      out

If you make the patch, remember to select FFP in the Generator item submenu
after opening the EDIT menu.  For those with no Manx, I'll post a .uue that
has this done for you, (along with an optimized color register set) in a
following article.
-----------------------------------------------------------------------------
Note 1: See contour map, Fig 33 p.60, "The Beauty of Fractals" by
	 H.-O. Peitgen - P.H. Richter, Springer-Verlag (Berlin, New York,...)
-----------------------------------------------------------------------------
						 		Howard Hull
[If yet unproven concepts are outlawed in the range of discussion...
                 ...Then only the deranged will discuss yet unproven concepts]
	{ucbvax!hplabs | decvax!noao | mcvax!seismo | ihnp4!seismo} !hao!hull
	for domain mailers: hull@hao.ucar.edu

orandy@amdahl.amdahl.com (Kevin Clague) (06/05/87)

In article <710@hao.UCAR.EDU>, hull@hao.UCAR.EDU (Howard Hull) writes:


> Recently, there was Yet Another Mandelbrot Program, titled MandelVroom, posted
> to the net by one Kevin Clague at Amdahl.

  I considered calling it YAMP. It is shorter than MandelVroom, but not
as much fun to say ;-)

>                                            He added a Motorola floating point
> section that he claimed would give much improved resolution over the previously
> available Mandelbrots, though I haven't checked that out in detail yet.  One

  Umm... I'm not sure where you think I claimed greater resolution, maybe
you misunderstood.  I did not intend to make such an inaccurate claim.
If you use the fixed point generator, or the floating point generator,
you will be using 32 bit variables.

  The only other kind of resolution I can think of is graphics resolution.
Needless to say, all you get is what the Amiga hardware provides.

> thing that Kevin did make a note about in his code is the "Ring Detector" for
> ponderous points in the inner lobes of the Mandelbrot interior exo-set.  This
> code detects non-migrating orbits for rotating points and escapes to more
> productive duty, setting the cell count to max on the way out.  However,
> another thing it is capable of doing, so it turns out, is acting as a strange
> attractor contour generator of sorts.  It doesn't do a perfect job of this,
> (in fact, I am wondering why it works at all) in that some places where there
> are inflections in the contour, (See Note 1. below) it just gets "noisy".

  I detect 'non-migrating orbits' using a 32 entry trace table.  I
calculate and record the value of Z until I've filled the trace table.
Then I compare the current value against the trace table.  If I find a
match, I know I've hit Mandelbrot.

  The points in the Mandelbrot set slowly converge to a stable orbit.
Your patch shows how many iterations (divided by 32) it took for
MandelVroom to detect stability in orbit.

>  Howard includes a patch to get interior colored.

> If you make the patch, remember to select FFP in the Generator item submenu
> after opening the EDIT menu.  For those with no Manx, I'll post a .uue that
> has this done for you, (along with an optimized color register set) in a
> following article.

  You can make a similar patch to the fixed point generator.  I think
you did for the executable you posted.

  I will add an option to show data in the interior of the Mandelbrot
set to MandelVroom.  There are other things that can be shown on the
interior of the Mandelbrot set.

>   -----------------------------------------------------------------------------
> Note 1: See contour map, Fig 33 p.60, "The Beauty of Fractals" by
>          H.-O. Peitgen - P.H. Richter, Springer-Verlag (Berlin, New York,...)
> -----------------------------------------------------------------------------

  There are a few things to note:
    1. I can only detect orbits that are up to 32 iterations long.
    2. The closer you get to the edge of the Mandelbrot set, the less
       effective this method is.
    3. This method slows down points that do not bail out because
       of orbital stability.
    4. This method works best on pictures of the main Mandelbrot set.

  Trace table orbital detection is discussed in the August 1985 issue
of Scientific American's Computer Recreation column.  It says that for
N iterations, a trace table method could cost you N squared comparisons
to detect these orbits.  My method will not detect all orbits, but is
on the order of N penalty instead of N squared.

 I could also produce pictures like Figure
34 on page 61 of "The Beauty of Fractals".  Would anyone be interested in
this feature in MandelVroom?  Does anyone else use it?

                                                    Kevin
-- 
UUCP:  orandy@amdahl.amdahl.com
  or:  {sun,decwrl,hplabs,pyramid,ihnp4,seismo,oliveb,cbosgd}!amdahl!orandy
DDD:   408-737-5481
USPS:  Amdahl Corp.  M/S 249,  1250 E. Arques Av,  Sunnyvale, CA 94086

[  Any thoughts or opinions which may or may not have been expressed  ]
[  herein are my own.  They are not necessarily those of my employer. ]