
  Fractal Explorer - By Brian Martin (briam@cats.ucsc.edu)
 
  TODO
    - main window
	- menubar:	
	  - make all options work
	- scrollbar for list
	- icons for buttons (into button bar)
	- make popup menu stay put on button release
    - fractal dialog
      - generator function control
        - history list
	- reqires combo box
      - bounding box controls
        - color
    - interactive zoom box
      - more zoom controls
	- add skew and rotate (need to generalize divergence code a little)
      - zoom undo
	- add changeState function to State
	- add list of previous states at top level
      - fix slider updates (in Gtk_CoordBox ?)
    - viewing 
      - implement snap view to box mode (done)
	- still need to add button to disable
    - colors
      - allow for solid, abs(normal), and (normal+1)/2 modes (more?)
    - use autoconf
    - lighting
      - multiple lights (back burner)
      - light colors
    - fix progress indicator wrt threads
      - hack gtk?
    - expose event handling
      - find how to handle expose without redrawing (backing store?)
    - implement unary operators in expressions
    - surface polygonization
      - use renormalize button
      - implement clipping against a plane
      - don't subdivide cells that are obviously going to be empty
    - outupt vrml
    - povray (plug in divergence engine)
      - make big button that pops up new window that ray traces current view
    - implement 2D cross-sections (integrate bfe)
    - fix bugs
    - prioritize this list ;>

GUI controls to add:

tree stuffs:

    - empty lag (how many levels of empty cells to be tolerated)
    - minimum height

other stuffs:
    - renormalize button (resets controls, keeps fractal)
      - control to specify how much to throw away
    - w_fix 
    - maxiter
    - bailout
    - up vector
    - threads specifier

BUGS:

wierdness after zooming on apply (zoom box moves around some)
threaded version largely broken :(
check number of refreshes that get queued when using constrained coordbox
text entries in log HEntryScale change on constrain
give error on parse error in expr
fix q_is_c_initially (without breaking anything else)
hash works - check premature point deletion
figure out wtf is up with (q+c)^3

FRACTALS TO FIGURE OUT:

 newton: http://www.daa.com.au/~james/fractals/mandel/Newton3.html
	(maybe not...)
 phoenix: http://www.daa.com.au/~james/fractals/mandel/Phoenix.html (done)
	z_n+1 = (z_n)^2 + Re(c) + Im(c) * z_n-1 
	use q^2+re(c)+im(c)*q_(n-1)
 burning ship: http://www.mhri.edu.au/~pdb/fractals/burnship/ (done)
	x_n+1 = x^2-y^2-c_x
	y_n+1 = 2|xy|-c_y
	use re(q)^2-im(q)^2-c+i*2*abs(re(q)*im(q))
 barnsley: look in xaos code

FRACTALS TO IMPLEMENT

 sin(q)

  GOOD FRACTALS:
 
    - q*q-q
    - 0.5*q*q-q
    - q*q*q-1
    - q*(q+0.5)
    - q*q+[-0.1103 -0.67037 0 0]
    - q*q*q+0.5*q
    - q*(0.5-q)
    - q*(0.56+q)
    - q^5-q^4+0.5*q
    - q^2+q*[-0.0000001 1 0 0]
    - i*q^2-i*[0.2809 -0.53 0.0 0.0]
    - i*q^2-q*i
    - j*q^2-q*k
    - j*q^3-q*k
    - j*q^3+i*q^2-q*k
    - q^2+[0.42 -0.2 0 0]
    - i*(q^2-[0.3 -0.2122 0.0001 0])
    - i*(q^2-[0.40 -0.2122 0.0001 0])
    - (q^2+c-[0.40 -0.2122 0.0001 0])
    - q*(q^2-c)
    - ((q^2-c^2)*q+c)*q
    - e^(i*pi/2) *(((q-c)*q-c)+(q-c)^2) - julia
    - e^(i*pi/2)*(q-c)^4 - mandelbrot
    - (q^2+c)*c*q
    -  q^3+[0 -0.916666666 0 0]
    - (q+c*q_(n-4))^2+c+re(c^3-q)