home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
200-299
/
ff239.lzh
/
JGoodies
/
Mandelbrot
/
ReadMe
< prev
next >
Wrap
Text File
|
1989-08-21
|
8KB
|
182 lines
Didkovsky's Mandelbrot Generator v1.1 by Nick Didkovsky
This program generates user-selectable regions of the Mandelbrot Set.
It does so extremely quickly, due to its use of scaled integer math,
68000 assembler optimization, and a particularly unique edge detection
approach. It is coded in JForth v2.0 and runs on any Amiga with 512K
*************************** QUICK START ********************************
FROM THE WORKBENCH:
Double click on the Mandelbrot! icon.
You will soon see an image of the Mandelbrot Set.
Holding the left mouse button down, drag the mouse pointer across any region
you'd like to explore in greater detail.
FROM THE CLI:
CD yourself to whatever path containing both the program Mandelbrot! and the
image file Mandel.iff (probably just cd df0: or cd df1:)
Then type:
Mandelbrot!
You will soon see an image of the Mandelbrot set.
Holding the left mouse button down, drag the mouse pointer across any region
you'd like to explore in greater detail. Your CLI window will report your
current activities.
****************** SAVING IMAGES GENERATED BY MANDELBROT! ********************
Format a blank disk and rename it PIX
Make sure that PIX: is available before you attempt to save an image
generated by Mandelbrot!
Alternatively, you can use the DOS command "assign" from the CLI:
assign PIX: somedisk:somedirectory
Caveat:
If PIX is unavailable to Mandelbrot! at the time you
request to save IFF, AmigaDOS will bring up a requester saying:
"Insert volume PIX: into any drive"
which by itself doesn't present a problem crash anything, except
by bringing up this requester, the image under the title bar of your
beautiful picture will be corrupted, so ... keep that in mind.
Make sure PIX: is available if you want to save screens!
Caveat:
All images saved during one Mandelbrot! session will be saved to PIX:
with the indexed names Mandel000.iff, Mandel001.iff, Mandel.002.iff ...
Be sure to rename any such files before your next Mandelbrot! session,
or they will be overwritten by whatever new images you save.
*************************** PROJECT MENU ******************************
The Project Menu makes the following choices available:
Restart Resets the screen to the original Mandelbrot region.
Right Amiga R is a hot key for this choice.
Save IFF Saves the current screen to PIX: with an indexed filename
Mandel000.iff, Mandel001.iff, Mandel.002.iff and so on.
Right Amiga S is a hot key for this choice.
Quit Exits Mandelbrot! and frees up whatever resources it used.
Shows nice final credits for 5 seconds.
Right Amiga Q is a hot key for this choice.
*************************** SCREEN MENU *****************************
The Screen Menu makes the following choices available:
320x200 Regenerate current region in low resolution.
Right Amiga L is a hot key for this choice.
320x400 Regenerate current region in medium interlaced resolution.
Right Amiga M is a hot key for this choice.
640x400 Regenerate current region in high interlaced resolution.
Right Amiga H is a hot key for this choice.
Title Bar? Make title bar visible or invisible.
Title bar is automatically hidden when a new region is selected.
Right Amiga T is a hot key for this choice.
********************************* CYCLE MENU ******************************
The frivolous Cycle Menu makes the following choices available:
Cycle? Turn color cycling on/off
Right Amiga C is a hot key for this choice.
This ONLY works when an image is completed!!!
Slow Set cycle speed to slow.
There is no hot key for this.
Med Set cycle speed to medium.
There is no hot key for this.
Fast Set cycle speed to fast.
There is no hot key for this.
Notice that just selecting a speed will not turn cycling on.
**************************** SESSION LOG ************************************
The text file RAM:MandelbrotSession is created every time you run Mandelbrot!
It contains useful info such as what values determine the regions you've
selected, how long it took to generate your various screens, and so on.
You'll see some values for variables called acorner, bcorner, xgap, and ygap.
Briefly, acorner is the x value of the top left corner of the screen,
and bcorner is the y value. Xgap is the numerical distance between horizontal
pixels, ygap is the numerical distance between vertical pixels. The number
1.0 is represented by 10000, so if you see something like acorner = 2,365
this means that the top left x value is 0.2365
***************************** A FEW DETAILS **********************************
This approach to generating the Mandelbrot Set relies on the fact that
the set is "connected". (The set itself is drawn black in the image).
The connectedness of the Mandelbrot Set guarantees that an area surrounded
by Mandelbrot pixels will be filled with Mandelbrot pixels.
This program uses EDGE DETECTION on the set whenever it is
encountered: surrounds the set, and simply marks the entire interior as though
all those pixels were already calculated!
THE PROGRAM NEVER HAS TO CALCULATE COSTLY INTERIOR MANDELBROT PIXELS!
The amount of time this saves is tremendous,
as it is exactly these points that would take the most computation time.
I have never had to wait more than about 15 minutes to generate a full
640x400 screen. Typical time to generate a 320x200 might be as low as
1.5 minutes.
I would like to see a mathematical proof of the correctness of this approach,
but for now, I am content with "proof by exhaustion" that is: it works because
it intuitively makes sense, I've run the program a million times,
and it has always worked.
Period.
QED
******************************* A FEW MORE DETAILS ****************************
At some point, after enlarging the same region more and more, you will be
puzzled that the program doesn't zoom in any farther. This is because you
have reached the limits of "magnification" so to speak. One reason Mandelbrot!
is so fast is that it uses scaled integer math instead of floating point math.
The floating point value 1.0 is represented by the integer 16384.
That means the smallest value the program can use is (1 / 16384) = 0.000061
represented by the integer "1".
Ok, THAT means that the smallest possible distance between adjacent pixels
on your screen is 0.00061. Once you've zoomed in that far, you've maxed out.
Successive region selections will just move the region left, right, up, or down;
it can't get in any closer. Floating point math would get you in closer, but
the difference in speed is so dramatic that I didn't even bother making it
available in this version of Mandelbrot!. Maybe future versions will give you
the choice of switching to floating point when maximum zoom is reached.
Let me know what you want.
The maximum number of iterations is set in the file
MandelShift2.asm as the constant MandelMax. Increasing this
number might give you better detail but will take longer to calculate.
The currrent default is 350. With integer math there is not much
advantage to more iterations because of accumulating errors.
Nick Didkovsky
171 East 99th Street #2O
NYC NY 1OO29
(212) 879-2625 bbs
(212) 369-1733 voice
This program is shareware. Do not distribute it without this readme or without
the mandel.iff image file. But please distribute it to whoever you want.
Like it? Send $1O to me at the address above.
Coming soon (or at least eventually):
Didkovsky's Mandelbrot Animator
Didkovsky's Mandelbrot Mural Generator