home *** CD-ROM | disk | FTP | other *** search
- Mandelbrot! v1.0 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
-
- ********************* FIRST, ONCE, AND ONLY ONCE ***************************
-
- First execute the file called execute.me.
- How? Assuming that the disk which contains all these Mandelbrot! files is in
- drive DF1:, and that all these files are in the root directory, open a CLI
- and type:
-
- execute execute.me
-
- *************************** 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.
-
- 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
- 2 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!
-
- ******************** WHY THE EXCLAMATION POINT IN MANDELBROT!? ****************
- McAll McMac Mcsoftware McHAS Mcto Mcbegin Mcwith Mc'Mc' Mcor Mc'Mac'.
- All-x synthesizers-x HAVE-x to-x have-x an-x 'X'-x in-x the-x model-x number-x.
- All! Amiga! software! HAS! to! have! an! exclamation! point! at! the! end!
-
- 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 Machine
-