home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 609b.lha / MandelSquare_v1.3 / MandelSquare.doc.pp / MandelSquare.doc
Text File  |  1992-02-03  |  20KB  |  354 lines

  1. ========================== MandelSquare 1.3 ==========================
  2. ======================================================================
  3. Yet another Mandelbrot set exploration program written by Olaf `Olsen'
  4. Barthel.   ©  Copyright  1991  by  Olaf `Olsen' Barthel, Freeware, all
  5. rights reserved.
  6.    No guarantee of any kind is made that the program described in this
  7. document is 100% reliable.  You use this material on your own risk.
  8.  
  9. ========================= A word of warning ==========================
  10. ======================================================================
  11. `MandelSquare'  is  a  very `demanding' program which will run only on
  12. Amiga systems equipped with expensive custom hardware (i.e.  '881/'882
  13. accelerator boards, 68020/30/40 processors and real fast ram), a plain
  14. A3000(T/UX)  will do as well, but not quite as nicely as an A2000 with
  15. a  GVP  A3001  expansion  board  or an A3000(T/UX) fitted with an '040
  16. card.
  17.    Kickstart  2.x (v37.175 or higher) is required as well, any attempt
  18. to  run  this program on a plain A500/A2000 will fail.
  19.  
  20.                         YOU HAVE BEEN WARNED!
  21.  
  22. ============================= Background =============================
  23. ======================================================================
  24. I  have  been toying with this kind of program for a long time, I even
  25. started  writing  it  on  my  ol' faithful A500 back in 1990.  Since I
  26. don't  have  a  great  interest in mathematics (which currently causes
  27. `some'  problems  while  studying  computer  science  at university) I
  28. started this project to learn a bit about complex numbers and to shake
  29. off some of the trouble mentioned before.
  30.    The first internal revisions of this program would simply calculate
  31. pictures  dot by dot.  This technique while accurate and precise takes
  32. quite  a lot of time (see Thomas R.  Wilcox' `MSE').  There are faster
  33. ways   to   calculate   a  picture,  such  as  the  recursive  routine
  34. `MandelSquare'  uses:   the  screen is divided into four areas; if the
  35. pixels  in  the  four corners are of the same colour, the rectangle is
  36. filled  in  this  colour,  if  not,  the  area  is  divided  into four
  37. rectangles  and  the  same procedure is applied again.  This technique
  38. relies  on  the fact that the Mandelbrot set does not contain isolated
  39. points,  each  outline  rests  within a different outline, just like a
  40. babooshka  puppet  is  contained in its mother puppet.  `MandelSquare'
  41. uses  a  very  simple  form  of this algorithm which requires that the
  42. rectangles are square, and that's how the child received a name...
  43.    `MandelSquare'   uses  the  standard  z²+c  algorithm  to  generate
  44. pictures,  a  numerical  coprocessor  or an '040 is required since the
  45. calculation  is  done in a fast hand-coded '881/'882 assembly language
  46. subroutine.   While  throughout  the  whole  program  double precision
  47. values  (64  bits)  are  used  for calculation, the '881/'882 assembly
  48. language  subroutine  uses extended precision (96 bits) to do its job.
  49. While  I  can  and  will  not claim that `MandelSquare' is the fastest
  50. Mandelbrot  set  exploration program, I may say that it is the fastest
  51. program in respect to its accuracy and the algorithm employed.
  52.    Colours  are  assigned to pixels based on a linear transition table
  53. which  avoids the unpleasant look of broken colour ranges.  Transition
  54. tables are created according to the screen resolution (32/16 colours).
  55.    Except  for  the  rectangle  filling  routines  `MandelSquare' uses
  56. custom  assembly  language  routines to do the picture rendering.  The
  57. program  still  tries to be very careful not to disturb system imagery
  58. such as the menu bar and the pull down menus.
  59.    The  screen  size  depends  on  the  text overscan settings of your
  60. machine.   The following text assumes a resolution of 256 × 256 pixels
  61. (low resolution) and 512 × 512 pixels (high resolution).
  62.    In  late  August I played with the idea of adding animation support
  63. to  the  program, and here it is:  select the area you wish to zoom to
  64. and  `MandelSquare' will generate a standard Anim-Opt-5 animation file
  65. while  it  zooms  to  the  indicated  spot.  The animation file can be
  66. viewed  using  programs  such  as `ShowAnim', `DisplayAnim', `PPAnim',
  67. `Animagic', `The Director', `DPaint III/IV' and `MandelSquare' itself,
  68. of  course.  Many thanks to Gary Bonham and Jim Kent for releasing the
  69. anim  file  creation/delta  compression  and replay code to the public
  70. domain.
  71.    At  startup  time  `MandelSquare'  tries  to  read  a  file  called
  72. `MandelSquare.Title'  which  happens to be the standard Mandelbrot set
  73. picture  where  all explorations will start.  If the named file cannot
  74. be  found  the program will generate the picture it needs, and you are
  75. advised to save it to disk under the name mentioned before.
  76.  
  77. ============================= The menus ==============================
  78. ======================================================================
  79. Following  is  a  description  of the functions and options associated
  80. with the pull down menus.
  81.  
  82. Open Picture........... Opens   a  picture  file  in  IFF-ILBM  format
  83.                         created  by `MandelSquare', reads and displays
  84.                         it.   Since  coordinates, number of iterations
  85.                         and  screen  width  are saved with the picture
  86.                         you  may  continue  exploring  from  the point
  87.                         where  you  saved  it.
  88.  
  89. Save Picture........... Saves  the current picture under the last name
  90.                         a  picture  file  was loaded.  If no file name
  91.                         was  loaded  yet,  you  will  be  prompted  to
  92.                         provide a file name.
  93.  
  94. Save Picture As........ Saves  the  current  picture  under a name you
  95.                         have to provide.
  96.  
  97. Priority............... This  menu  allows  you  to  select  the  task
  98.                         priority `MandelSquare' will run under.  While
  99.                         0  is  the  standard  priority the majority of
  100.                         tasks  and  processes  will  execute  on  your
  101.                         machine  you  may want to change this value to
  102.                         -5  to  save  processing  time other tasks may
  103.                         wish   to   allocate   or   to   +5   to  make
  104.                         `MandelSquare'  allocate  more processing time
  105.                         than  possibly  available  when  running under
  106.                         priority 0.
  107.  
  108. Replay Animation....... Will   load  and  replay  any  animation  file
  109.                         which meets the following conditions:
  110.  
  111.                         - Since  the replay routines do not open their
  112.                           own  display  (as  most  anim players do) it
  113.                           will   use   the  `MandelSquare' screen  for
  114.                           display.   This  means that any animation to
  115.                           be  replayed  must  be  recorded in the same
  116.                           resolution  (width,  height,  depth)  as the
  117.                           current screen.
  118.  
  119.                         - The  animation file must be compressed using
  120.                           delta mode 5.
  121.  
  122.                         - There  must  be  enough  memory available to
  123.                           load  the  animation  frames.  Any animation
  124.                           which  does  not  fit  into  memory  will be
  125.                           truncated.
  126.  
  127.                            If  successfully  loaded the animation will
  128.                         be  played repeatedly.  Press any key or mouse
  129.                         button to abort.
  130.  
  131. Begin Animation........ After  providing  a  file  name  to  save  the
  132.                         animation  file  under  this  will  start  the
  133.                         animation  routine.   The  mouse  pointer will
  134.                         change  to  a crosshair allowing you to select
  135.                         the area to zoom to.  A requester will ask you
  136.                         to  confirm  the area size and positionm offer
  137.                         you  reselect  it (select `No' to do so) or to
  138.                         abort  the  animation  (select  `Abort').   If
  139.                         confirmed the animation will start.  It can be
  140.                         aborted at any time by selecting the menu `End
  141.                         Animation'.   After  the  animation  has  been
  142.                         rendered  you will again be presented with the
  143.                         crosshair   mouse   pointer   and   the  whole
  144.                         procedure starts again.  Should you decide not
  145.                         to  continue the animation just select a dummy
  146.                         area  and  click  on the `Abort' button of the
  147.                         confirmation requester.
  148.                            The   confirmation   requester   will  also
  149.                         display  the  number  of pictures to create in
  150.                         the  animation  when  zooming  to the selected
  151.                         spot.   This  value  is  based  on the current
  152.                         `Scroll Amount' settings (see below).
  153.  
  154. End Animation.......... Selecting   this   menu  item  will  stop  any
  155.                         animation  creation  currently in progress and
  156.                         close the animation file without including the
  157.                         current picture.
  158.  
  159. Set Scroll Amount...... The  moves and zooms performed when generating
  160.                         animations  depend  largely  on  a magic value
  161.                         which can be adjusted when selecting this menu
  162.                         item.   The  `scroll amount' controls how many
  163.                         pixels  long  a  move or zoom may actually be.
  164.                         Any  distance  longer  than this value will be
  165.                         truncated   and   move/zoom   will  be  scaled
  166.                         approriately.   This  assures  that  moves and
  167.                         zooms will always execute at the same `speed'.
  168.                         (It  took  me  about  a month to discover this
  169.                         method of operation :-)
  170.  
  171. Include Frame.......... When  zooming into an area `MandelSquare' will
  172.                         draw  a  square  around the area to zoom to if
  173.                         this   options   is  in  effect.   This  frame
  174.                         actually  shows  you where you are going to in
  175.                         the  Mandelbrot  set  and  may  remind  you of
  176.                         Charles   Eames'   famous   `Powers   of  Ten'
  177.                         film/slide show.
  178.  
  179. Include Coordinates.... If  this  option  is in effect the coordinates
  180.                         and screen size of each picture to be added to
  181.                         an  animation  file  will  be printed into the
  182.                         lower  left  corner  of the image before it is
  183.                         saved.
  184.  
  185. Change Resolution...... `MandelSquare'   operates   in  two  different
  186.                         resolutions:   low  resolution  (256 × 256, 32
  187.                         colours)  and  high  resolution (512 × 512, 16
  188.                         colours).    Selecting  this  menu  item  will
  189.                         toggle  between  both  resolutions.  Note that
  190.                         you  will  lose  your  current  picture if you
  191.                         change  the  resolution.   `MandelSquare' will
  192.                         immediately  start  recalculating the previous
  193.                         picture in the current resolution.
  194.  
  195. About.................. Shows a small `author' requester.
  196.  
  197. Quit................... Terminates the program.
  198.  
  199.  
  200. Magnify................ This  menu  item  lets  you  select an area on
  201.                         screen  using  the  mouse  `MandelSquare' will
  202.                         magnify   to   screen  size.   Note  that  the
  203.                         resolution   of   the   routines  employed  by
  204.                         `MandelSquare'  is limited and after a certain
  205.                         number    of   magnifications   the   pictures
  206.                         generated will look blurred or coarse, but the
  207.                         program  is  guaranteed to perform reliably up
  208.                         to     screen     resolutions     of     1E-13
  209.                         (0.0000000000001).
  210.  
  211. Detail................. If  changing  the  number  of iterations to be
  212.                         used for picture generation, the user may want
  213.                         to explore the new patterns and colours hidden
  214.                         inside the areas of the picture `MandelSquare'
  215.                         has  left  black.   `MandelSquare'  will check
  216.                         each  black  pixel  in  the  selected area and
  217.                         recalculate its colour.
  218.  
  219. Recalculate............ The algorithm employed by `MandelSquare' is by
  220.                         no  means  perfect:   it  will  sometimes fill
  221.                         rectangles  which  it  should not and truncate
  222.                         imagery.   This happens rarely enough, but the
  223.                         resulting   picture   can   be   corrected  by
  224.                         selecting  selecting  this  menu  item  and by
  225.                         marking  the  area  to  be recalculated.  Each
  226.                         pixel   of   the   selected   area   will   be
  227.                         recalculated and set accordingly.
  228.                            If  the  area  selected  is  as wide as the
  229.                         whole  screen  a  special mode will be used to
  230.                         render the pixels into fast ram.  As soon as a
  231.                         line  is  complete  it will be copied from the
  232.                         fast ram line buffer to the corresponding line
  233.                         on  screen.   This  is  especially  useful  if
  234.                         `MandelSquare'  is  running in high resolution
  235.                         mode  in  which  the  display  memory does not
  236.                         respond quite as fast as real fast memory.
  237.  
  238. Precise Calculation.... If  this  option  is  in effect `MandelSquare'
  239.                         will  calculate  the  colours of all pixels on
  240.                         the  margins of a square which is to be filled
  241.                         in a single colour.  If these pixels all match
  242.                         the  same  colour the square will be filled as
  243.                         usual,  if not the square will be divided into
  244.                         four  smaller squares and the calculation will
  245.                         proceed.   While  this  method is more precise
  246.                         than  the  standard  way  it  avoids rendering
  247.                         errors   and   is   recommended  to  use  when
  248.                         generating   animations.   As  a  drawback  it
  249.                         is   slower   than   the  standard  method  of
  250.                         calculation.
  251.  
  252. Coordinates............ This  menu  item  will open a control panel in
  253.                         which  the  screen coordinates and size can be
  254.                         adjusted  manually  by  typing  the approriate
  255.                         floating point numbers.
  256.  
  257. Palette................ Selecting  this  menu item will open a palette
  258.                         control  panel  in  which three sliders are to
  259.                         shift  the  red/green/blue  colour  tables the
  260.                         screen  palette is made of.  Each colour table
  261.                         represents  the  positive  part of a sine wave
  262.                         spread  across  32/16 colors ranging from 0 to
  263.                         15.   Move  the sliders to create more or less
  264.                         interesting colour effects.
  265.  
  266. Spectral Colours....... If in effect this option causes `MandelSquare'
  267.                         to  use  a  special  palette  of  75  spectral
  268.                         colours instead of the 32/16 colour palette to
  269.                         be  adjusted  by  the  palette  control panel.
  270.                         Since  not  all  75  colours  will  fit on the
  271.                         screen  at one time, only a small part will be
  272.                         visible.   Which  part  to be displayed can be
  273.                         adjusted using the left and right cursor keys.
  274.  
  275. Toggle Calculation..... Use  this  menu  item to abort any calculation
  276.                         currently  in  progress.  If no calculation is
  277.                         currently running, it will be restarted.
  278.  
  279.  
  280. 32-16384............... The  number  of  iterations  to  be  used when
  281.                         generating a picture.  The higher this number,
  282.                         the  longer  the calculation will take and the
  283.                         more  patterns  will  be revealed in otherwise
  284.                         black areas of the screen.
  285.  
  286. ============================ Special keys ============================
  287. ======================================================================
  288. Just  like  many  other  programs of this kind `MandelSquare' supports
  289. colour cycling.  The following keys control the cycling process:
  290.  
  291. Tab.................... Stops or restarts the colour cycling.
  292.  
  293. Cursor up.............. Starts the cycling in forward direction.
  294.  
  295. Cursor down............ Starts the cycling in reverse direction.
  296.  
  297. Cursor left............ Cycles the colour palette one entry backward.
  298.  
  299. Cursor right........... Cycles the colour palette one entry forward.
  300.  
  301. ========================== Author's Request ==========================
  302. ======================================================================
  303. Since  I don't expect Commodore to sell more A3000(T/UX) machines, GVP
  304. to  sell  more  A3001  boards  and PP&S, RCS and ACD to sell more '040
  305. cards  just because I happened to create `MandelSquare' I am releasing
  306. this  program  and  the  accompanying  source  code  as Freeware.  The
  307. program may not be sold for more than DM 5,- (3$ US) or the equivalent
  308. in the local country's currency, but it may be copied for free as long
  309. as  my copyright remains untouched.  If you like this program, send me
  310. copy  of  the  animations  or  pictures you created with it, a picture
  311. postcard of your home town would be nice, too.
  312.  
  313.                       My `physical' address is:
  314.  
  315.                              Olaf Barthel
  316.                           Brabeckstrasse 35
  317.                           D-3000 Hannover 71
  318.  
  319.                      Federal Republic of Germany
  320.  
  321.                         My email adresses are:
  322.  
  323.                      Z-Net: O.BARTHEL@A-Link-H
  324.                     Usenet: o.barthel@a-link-h.zer.sub.org
  325.                             cbmvax.commodore.com!cbmehq!sourcery!olsen
  326.  
  327.    Comments  and suggestions how to improve this program are generally
  328. appreciated!
  329.  
  330. ============ Revision history (most recent change first) =============
  331. ======================================================================
  332. 1.3    Added  the  animation  replay  feature,  removed the crosshair
  333.     mouse  pointer, the colour transition tables are now generated
  334.     in  a  much  simpler  way  than before, some basic calculation
  335.     logics have been modified to permit faster execution.
  336.  
  337. 1.2    The  calculation  routine  was slightly rewritten to allow for
  338.     earlier  termination  (old  code  used  to go through the more
  339.     complicated  calculations before actually noticing that it was
  340.     time  to  terminate).   The  `precise' calculation code should
  341.     work  much  faster  now  since  the  precalculation  will  now
  342.     terminate  as  soon  as  an  odd  pixel  is  encountered.  The
  343.     animation  code  now  sports  much smoother camera zooms.  Old
  344.     code  used  to  bounce  & accelerate when coming closer to the
  345.     selected  square,  the new code will always appear to approach
  346.     the  square at the same speed.  The zoom speed may be set to a
  347.     custom  value  and  the  zoom  code actually precalculates the
  348.     number  of  frames  to  calculate before reaching the selected
  349.     square.  I also added an option to have a box displayed around
  350.     the  selected  square  whilst rendering the single frames (for
  351.     the `Powers of Ten' effect).
  352.  
  353. 1.1    First public release.
  354.