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. ]