home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / wps / graphic / fractint / sources / pmfract2.txt < prev    next >
Encoding:
Text File  |  1991-03-17  |  58.7 KB  |  1,220 lines

  1. This section is intended only as a quick introduction to the types; more
  2. detail on the mathematics of types other than the Mandelbrot set can be
  3. found in Appendix A, and some notes on how Fractint calculates them in
  4. chapter 9.
  5.  
  6. Fractint starts by default with the Mandelbrot set. You can change that
  7. by firing it up with the command-line argument "TYPE=" followed by one
  8. of the names in parentheses below, or within the program by hitting <T>
  9. and typing in the name. If parameters are needed, you will be prompted
  10. for them.
  11.  
  12. In the text that follows, due to the limitations of the ASCII character
  13. set, "a*b" means "a times b", and "a^b" means "a to the power b".
  14.  
  15.  
  16. The Mandelbrot Set (type=mandel)
  17.  
  18. This set is the classic: the only one implemented in many plotting
  19. programs, and the source of most of the printed fractal images published
  20. in recent years. Like most of the other types in Fractint, it is simply
  21. a graph: the x (horizontal) and y (vertical) coordinate axes represent
  22. ranges of two independent quantities, with various colors used to
  23. symbolize levels of a third quantity which depends on the first two. So
  24. far, so good: basic analytic geometry.
  25.  
  26. Now things get a bit hairier. The x axis is ordinary, vanilla real
  27. numbers. The y axis is an imaginary number, i.e. a real number times i,
  28. where i is the square root of -1. Every point on the plane -- in this
  29. case, your PC's display screen -- represents a complex number of the
  30. form:
  31.  
  32. x-coordinate + i * y-coordinate
  33.  
  34. If your math training stopped before you got to imaginary and complex
  35. numbers, this is not the place to catch up. Suffice it to say that they
  36. are just as "real" as the numbers you count fingers with (they're used
  37. every day by electrical engineers) and they can undergo the same kinds
  38. of algebraic operations.
  39.  
  40. OK, now pick any complex number -- any point on the complex plane -- and
  41. call it C, a constant. Pick another, this time one which can vary, and
  42. call it Z. Starting with Z=0 (i.e., at the origin, where the real and
  43. imaginary axes cross), calculate the value of the expression
  44.  
  45. Z^2 + C
  46.  
  47. Take the result, make it the new value of the variable Z, and calculate
  48. again. Take that result, make it Z, and do it again, and so on: in
  49. mathematical terms, iterate the function Z(n+1) = Z(n)^2 + C. For
  50. certain values of C, the result "levels off" after a while. For all
  51. others, it grows without limit. The Mandelbrot set you see at the start
  52. -- the solid-colored lake (blue by default), the blue circles sprouting
  53. from it, and indeed every point of that color -- is the set of all
  54. points C for which the value of Z is less than 2 after 150 iterations
  55. (default setting). All the surrounding "contours" of other colors
  56. represent points for which Z exceeds 2 after 149 iterations (the contour
  57. closest to the M-set itself), 148 iterations, (the next one out), and so
  58. on.
  59.  
  60. Some features of interest:
  61.  
  62.   1. Use the <X> options screen to increase the number of iterations.
  63.   Notice that the boundary of the M-set becomes more and more convoluted
  64.   (the technical terms are "wiggly," "squiggly," and "utterly bizarre") as
  65.   the Z-values for points that were still within the set after 150
  66.   iterations turn out to exceed 2 after 200, 500, or 1200. In fact, it can
  67.   be proven that the true boundary is infinitely long: detail without
  68.   limit.
  69.  
  70.   2. Although there appear to be isolated "islands" of blue, zoom in --
  71.   that is, plot for a smaller range of coordinates to show more detail --
  72.   and you'll see that there are fine "causeways" of blue connecting them
  73.   to the main set. As you zoomed, smaller islands became visible; the same
  74.   is true for them. In fact, there are no isolated points in the M-set: it
  75.   is "connected" in a strict mathematical sense.
  76.  
  77.   3. The upper and lower halves of the first image are symmetric (a fact
  78.   that Fractint makes use of here and in some other fractal types to speed
  79.   plotting). But notice that the same general features -- lobed discs,
  80.   spirals, starbursts -- tend to repeat themselves (although never
  81.   exactly) at smaller and smaller scales, so that it can be impossible to
  82.   judge by eye the scale of a given image.
  83.  
  84.   4. In a sense, the contour colors are window-dressing: mathematically,
  85.   it is the properties of the M-set itself that are interesting, and no
  86.   information about it would be lost if all points outside the set were
  87.   assigned the same color. If you're a serious, no-nonsense type, you may
  88.   want to cycle the colors just once to see the kind of silliness that
  89.   other people enjoy, and then never do it again. Go ahead. Just once,
  90.   now. We trust you.
  91.  
  92.  
  93. Julia Sets (type=julia)
  94.  
  95. These sets were named for mathematician Gaston Julia, and can be
  96. generated by a simple change in the iteration process described above.
  97. Start with a specified value of C, "C-real + i * C-imaginary"; use as
  98. the initial value of Z "x-coordinate + i * y-coordinate"; and repeat the
  99. same iteration, Z(n+1) = Z(n)^2 + C.
  100.  
  101. There is a Julia set corresponding to every point on the complex plane -
  102. - an infinite number of Julia sets. But the most visually interesting
  103. tend to be found for the same C values where the M-set image is busiest,
  104. i.e. points just outside the boundary. Go too far inside, and the
  105. corresponding Julia set is a circle; go too far outside, and it breaks
  106. up into scattered points. In fact, all Julia sets for C within the M-set
  107. share the "connected" property of the M-set, and all those for C outside
  108. lack it.
  109.  
  110. Fractint's spacebar toggle lets you "flip" between any view of the M-set
  111. and the Julia set for the point C at the center of that screen. You can
  112. then toggle back, or zoom your way into the Julia set for a while and
  113. then return to the M-set. So if the infinite complexity of the M-set
  114. palls, remember: each of its infinite points opens up a whole new Julia
  115. set.
  116.  
  117. Historically, the Julia sets came first: it was while looking at the M-
  118. set as an "index" of all the Julia sets' origins that Mandelbrot noticed
  119. its properties.
  120.  
  121. The relationship between the Mandelbrot set and Julia set can hold
  122. between other sets as well.  Many of Fractint's types are
  123. "Mandelbrot/Julia" pairs (sometimes called "M-sets" or "J-sets". All
  124. these are generated by equations that are of the form z(k+1) =
  125. f(z(k),c), where the function orbit is the sequence z(0), z(1), ..., and
  126. the variable c is a complex parameter of the equation. The value c is
  127. fixed for "Julia" sets and is equal to the first two parameters entered
  128. with the "params=Creal/Cimag" command. The initial orbit value z(0) is
  129. the complex number corresponding to the screen pixel. For Mandelbrot
  130. sets, the parameter c is the complex number corresponding to the screen
  131. pixel. The value z(0) is c plus a perturbation equal to the values of
  132. the first two parameters.  See discussion of "type=mandellambda".  This
  133. approach may or may not be the "standard" way to create "Mandelbrot"
  134. sets out of "Julia" sets.
  135.  
  136. Some equations have additional parameters.  These values is entered as
  137. the third for fourth params= value for both Julia and Mandelbrot sets.
  138. The variables x and y refer to the real and imaginary parts of z;
  139. similarly, cx and cy are the real and imaginary parts of the parameter c
  140. and fx(z) and fy(z) are the real and imaginary parts of f(z). The
  141. variable c is sometimes called lambda for historical reasons.
  142.  
  143. NOTE: if you use the "PARAMS=" argument to warp the M-set by starting
  144. with an initial value of Z other than 0, the M-set/J-sets correspondence
  145. breaks down and the spacebar toggle no longer works.
  146.  
  147.  
  148. Newton domains of attraction (type=newtbasin)
  149.  
  150. The Newton formula is an algorithm used to find the roots of polynomial
  151. equations by successive "guesses" that converge on the correct value as
  152. you feed the results of each approximation back into the formula. It
  153. works very well -- unless you are unlucky enough to pick a value that is
  154. on a line BETWEEN two actual roots. In that case, the sequence explodes
  155. into chaos, with results that diverge more and more wildly as you
  156. continue the iteration.
  157.  
  158. This fractal type shows the results for the polynomial Z^n - 1, which
  159. has n roots in the complex plane. Use the <T>ype command and enter
  160. "newtbasin" in response to the prompt. You will be asked for a
  161. parameter, the "order" of the equation (an integer from 3 through 10 --
  162. 3 for x^3-1, 7 for x^7-1, etc.). A second parameter is a flag to turn on
  163. alternating shades showing changes in the number of iterations needed to
  164. attract an orbit. Some people like stripes and some don't, as always,
  165. Fractint gives you a choice!
  166.  
  167. The coloring of the plot shows the "basins of attraction" for each root
  168. of the polynomial -- i.e., an initial guess within any area of a given
  169. color would lead you to one of the roots. As you can see, things get a
  170. bit weird along certain radial lines or "spokes," those being the lines
  171. between actual roots. By "weird," we mean infinitely complex in the good
  172. old fractal sense. Zoom in and see for yourself.
  173.  
  174. This fractal type is symmetric about the origin, with the number of
  175. "spokes" depending on the order you select. It uses floating-point math
  176. if you have an FPU, or a somewhat slower integer algorithm if you don't
  177. have one.
  178.  
  179.  
  180. Newton (type=newton)
  181.  
  182. The generating formula here is identical to that for newtbasin, but the
  183. coloring scheme is different. Pixels are colored not according to the
  184. root that would be "converged on" if you started using Newton's formula
  185. from that point, but according to the iteration when the value is close
  186. to a root.  For example, if the calculations for a particular pixel
  187. converge to the 7th root on the 23rd iteration, NEWTBASIN will color
  188. that pixel using color #7, but NEWTON will color it using color #23.
  189.  
  190. If you have a 256-color mode, use it: the effects can be much livelier
  191. than those you get with type=newtbasin, and color cycling becomes, like,
  192. downright cosmic. If your "corners" choice is symmetrical, Fractint
  193. exploits the symmetry for faster display. There is symmetry in
  194. newtbasin, too, but the current version of the software isn't smart
  195. enough to exploit it.
  196.  
  197. The applicable "params=" values are the same as newtbasin. Try
  198. "params=4." Other values are 3 through 10. 8 has twice the symmetry and
  199. is faster. As with newtbasin, an FPU helps.
  200.  
  201.  
  202. Complex Newton (type=complexnewton/complexbasin)
  203.  
  204. Well, hey, "Z^n - 1" is so boring when you can use "Z^a - b" where "a"
  205. and "b" are complex numbers!  The new "complexnewton" and "complexbasin"
  206. fractal types are just the old "newton" and "newtbasin" fractal types
  207. with this little added twist.  When you select these fractal types, you
  208. are prompted for four values (the real and imaginary portions of "a" and
  209. "b"). If "a" has a complex portion, the fractal has a discontinuity
  210. along the negative axis - relax, we finally figured out that it's
  211. *supposed* to be there!
  212.  
  213.  
  214. Lambda Sets (type=lambda)
  215.  
  216. This type calculates the Julia set of the formula lambda*Z*(1-Z). That
  217. is, the value Z[0] is initialized with the value corresponding to each
  218. pixel position, and the formula iterated. The pixel is colored according
  219. to the iteration when the sum of the squares of the real and imaginary
  220. parts exceeds 4.
  221.  
  222. Two parameters, the real and imaginary parts of lambda, are required.
  223. Try 0 and 1 to see the classical fractal "dragon". Then try 0.2 and 1
  224. for a lot more detail to zoom in on.
  225.  
  226. It turns out that all quadratic Julia-type sets can be calculated using
  227. just the formula z^2+c (the "classic" Julia"), so that this type is
  228. redundant, but we include it for reason of it's prominence in the
  229. history of fractals.
  230.  
  231.  
  232. Mandellambda Sets (type=mandellambda)
  233.  
  234. This type is the "Mandelbrot equivalent" of the lambda set. A comment is
  235. in order here. Almost all the Fractint "Mandelbrot" sets are created
  236. from orbits generated using formulas like z(n+1) = f(z(n),C), with z(0)
  237. and C initialized to the complex value corresponding to the current
  238. pixel. Our reasoning was that "Mandelbrots" are maps of the
  239. corresponding "Julias". Using this scheme each pixel of a "Mandelbrot"
  240. is colored the same as the Julia set corresponding to that pixel.
  241. However, Kevin Allen informs us that the MANDELLAMBDA set appears in the
  242. literature with z(0) initialized to a critical point (a point where the
  243. derivative of the formula is zero), which in this case happens to be the
  244. point (.5,0). Since Kevin knows more about Dr. Mandelbrot than we do,
  245. and Dr. Mandelbrot knows more about fractals than we do, we defer!
  246. Starting with version 14 Fractint calculates MANDELAMBDA Dr.
  247. Mandelbrot's way instead of our way. But ALL THE OTHER "Mandelbrot" sets
  248. in Fractint are still calculated OUR way! (Fortunately for us, for the
  249. classic Mandelbrot Set these two methods are the same!)
  250.  
  251. Well now, folks, apart from questions of faithfulness to fractals named
  252. in the literature (which we DO take seriously!), if a formula makes a
  253. beautiful fractal, it is not wrong. In fact some of the best fractals in
  254. Fractint are the results of mistakes! Nevertheless, thanks to Kevin for
  255. keeping us accurate!
  256.  
  257. (See description of "initorbit=" command for a way to experiment with
  258. different orbit intializations).
  259.  
  260.  
  261. Plasma Clouds (type=plasma)
  262.  
  263. Plasma clouds ARE real live fractals , even though we didn't know it at
  264. first. They are generated by a recursive algorithm that randomly picks
  265. colors of the corner of a rectangle, and then continues recursively
  266. quartering previous rectangles. Random colors are averaged with those of
  267. the outer rectangles so that small neighborhoods do not show much
  268. change, for a smoothed-out, cloud-like effect. The more colors your
  269. video mode supports, the better.  The result, believe it or not, is a
  270. fractal landscape viewed as a contour map, with colors indicating
  271. constant elevation.  To see this, save and view with the "3" command
  272. (see  section on 3D), and your "cloud" will be converted to a mountain!
  273.  
  274. You've GOT to try palette cycling on these (hit "+" or "-"). If you
  275. haven't been hypnotized by the drawing process, the writhing colors will
  276. do it for sure. We have now implemented subliminal messages to exploit
  277. the user's vulnerable state; their content varies with your bank
  278. balance, politics, gender, accessibility to a Fractint programmer, and
  279. so on. A free copy of Microsoft C to the first person who spots them.
  280.  
  281. This type accepts a single parameter, which determines how abruptly the
  282. colors change. A value of .5 yields bland clouds, while 50 yields very
  283. grainy ones. The default value is 2. Zooming is ignored, as each plasma-
  284. cloud screen is generated randomly.
  285.  
  286. The algorithm is based on the Pascal program distributed by Bret Mulvey
  287. as PLASMA.ARC. We have ported it to C and integrated it with Fractint's
  288. graphics and animation facilities. This implementation does not use
  289. floating-point math.
  290.  
  291. Saved plasma-cloud screens are EXCELLENT starting images for fractal
  292. "landscapes" created with the "3D" options.
  293.  
  294.  
  295. Lambdafn (type=lambdafn)
  296.  
  297. Function=[sin|cos|sinh|cosh|exp|log|sqr]) is specified with this type.
  298. Prior to version 14, these types were lambdasine, lambdacos, lambdasinh,
  299. lambdacos, and lambdaexp.  Where we say "lambdasine" or some such below,
  300. the good reader knows we mean "lambdafn with function=sin".)
  301.  
  302. These types calculate the Julia set of the formula lambda*fn(Z), for
  303. various values of the function "fn", where lambda and Z are both
  304. complex.  Two values, the real and imaginary parts of lambda, should be
  305. given in the "params=" option.    For the feathery, nested spirals of
  306. LambdaSines and the frost-on-glass patterns of LambdaCosines, make the
  307. real part = 1, and try values for the imaginary part ranging from 0.1 to
  308. 0.4 (hint: values near 0.4 have the best patterns). In these ranges the
  309. Julia set "explodes". For the tongues and blobs of LambdaExponents, try
  310. a real part of 0.379 and an imaginary part of 0.479.
  311.  
  312. A co-processor used to be almost mandatory: each LambdaSine/Cosine
  313. iteration calculates a hyperbolic sine, hyperbolic cosine, a sine, and a
  314. cosine (the LambdaExponent iteration "only" requires an exponent, sine,
  315. and cosine operation)!    However, Fractint now computes these
  316. transcendental functions with fast integer math. In a few cases the fast
  317. math is less accurate, so we have kept the old slow floating point code.
  318. To use the old code, invoke with the float=yes option, and, if you DON'T
  319. have a co-processor, go on a LONG vacation!
  320.  
  321.  
  322. Mandelfn (type=mandelfn)
  323.  
  324. Function=[sin|cos|sinh|cosh|exp|log|sqr]) is specified with this type.
  325. Prior to version 14, these types were mandelsine, mandelcos, mandelsinh,
  326. mandelcos, and mandelexp. Same comment about our lapses into the old
  327. terminology as above!
  328.  
  329. These are "pseudo-Mandelbrot" mappings for the LambdaFn Julia functions.
  330. They map to their corresponding Julia sets via the spacebar command in
  331. exactly the same fashion as the original M/J sets.  In general, they are
  332. interesting mainly because of that property (the function=exp set in
  333. particular is rather boring). Generate the appropriate "Mandelfn" set,
  334. zoom on a likely spot where the colors are changing rapidly, and hit the
  335. spacebar key to plot the Julia set for that particular point.
  336.  
  337. Try "FRACTINT TYPE=MANDELFN CORNERS=4.68/4.76/-.03/.03 FUNCTION=COS" for
  338. a graphic demonstration that we're not taking Mandelbrot's name in vain
  339. here. We didn't even know these little buggers were here until Mark
  340. Peterson found this a few hours before the version incorporating
  341. Mandelfns was released.
  342.  
  343. Note: If you created images using the lambda or mandel "fn" types prior
  344. to version 14, and you wish to update the fractal information in the
  345. "*.fra" file, simply read the files and save again. You can do this in
  346. batch mode via a command line like:
  347.  
  348.        "fractint oldfile.fra savename=newfile.gif batch=yes"
  349.  
  350. For example, this procedure can convert a version 13 "type=lambdasine"
  351. image to a version 14 "type=lambdafn function=sin" GIF89a image.  We do
  352. not promise to keep this "backward compatibility" past version 14 - if
  353. you want to keep the fractal information in your *.fra files accurate,
  354. we recommend conversion.
  355.  
  356.  
  357. Barnsley Mandelbrot/Julia Sets (barnsleym1/.../j3)
  358.  
  359. Michael Barnsley has written a fascinating college-level text, "Fractals
  360. Everywhere," on fractal geometry and its graphic applications. (See the
  361. bibliography, Appendix. D.) In it, he applies the principle of the M and
  362. J sets to more general functions of two complex variables.
  363.  
  364. We have incorporated three of Barnsley's examples in Fractint. Their
  365. appearance suggests polarized-light microphotographs of minerals, with
  366. patterns that are less organic and more crystalline than those of the
  367. M/J sets. Each example has both a "Mandelbrot" and a "Julia" type.
  368. Toggle between them using the spacebar.
  369.  
  370. The parameters have the same meaning as they do for the "regular"
  371. Mandelbrot and Julia. For types M1, M2, and M3, they are used to "warp"
  372. the image by setting the initial value of Z. For the types J1 through
  373. J3, they are the values of C in the generating formulas, found in
  374. Appendix A.
  375.  
  376. Be sure to try the <O>rbit function while plotting these types.
  377.  
  378.  
  379. Barnsley IFS Fractals (type=ifs, ifs3d)
  380.  
  381. One of the most remarkable spin-offs of fractal geometry is the ability
  382. to "encode" realistic images in very small sets of numbers -- parameters
  383. for a set of functions that map a region of two-dimensional space onto
  384. itself. In principle (and increasingly in practice), a scene of any
  385. level of complexity and detail can be stored as a handful of numbers,
  386. achieving amazing "compression" ratios... how about a super-VGA image of
  387. a forest, more than 300,000 pixels at eight bits apiece, from a 1-KB
  388. "seed" file?
  389.  
  390. Again, Michael Barnsley and his co-workers at the Georgia Institute of
  391. Technology are to be thanked for pushing the development of these
  392. iterated function systems (IFS).
  393.  
  394. Invoking Fractint with "TYPE=ifs" defaults to an IFS "fern". Other IFS
  395. images can be created via the *.IFS files included with Fractint (FERN,
  396. TRIANGLE, TREE, and more), or from user-written files with the default
  397. extension *.IFS. Use the command-line argument "IFS=filename" or the
  398. main-menu <I> command to use or manipulate one of these files. Specify
  399. whether 2D or 3D (the files supplied with Fractint are almost all 2D).
  400. You will then be asked to pick which function to edit. Hitting <Enter>
  401. leaves values unchanged.
  402.  
  403. Each line in an IFS code file contains the parameters for one of the
  404. generating functions, e.g. in FERN.IFS:
  405.  
  406.      a    b     c    d    e    f    p
  407.    ___________________________________
  408.      0     0    0  .16    0    0   .01
  409.    .85   .04 -.04  .85    0  1.6   .85
  410.    .2   -.26  .23  .22    0  1.6   .07
  411.   -.15   .28  .26  .24    0  .44   .07
  412.  
  413. The "p" values are the probabilities assigned to each function (how
  414. often it is used), which add up to one. Fractint supports up to 32
  415. functions, although usually three or four are enough.
  416.  
  417. Note that some Barnsley IFS values generate images quite a bit smaller
  418. than the initial (default) screen. Just bring up the zoom box, center it
  419. on the small image, and hit the ENTER key to get a full-screen image.
  420.  
  421. In order to fully appreciate the 3D fern, since your monitor is
  422. presumably 2D, we have added rotation, translation, and perspective
  423. capabilities. These share values with the same variables used in
  424. Fractint's other 3D facilities; for their meaning see "3D Images",
  425. farther on in this section. You can enter these values from the command
  426. line using:
  427.  
  428.   rotation=xrot/yrot/zrot       (try 30/30/30)
  429.   shift=xshift/yshift           (shifts BEFORE applying perspective!)
  430.   perspective=viewerposition    (try 200)
  431.  
  432. Alternatively, entering <I> from main screen and then selecting "3D
  433. Transform Parameters" will allow you to modify these values. The
  434. defaults are the same as for regular 3D, and are not always optimum for
  435. the 3D fern. Try rotation=30/30/30. Note that applying shift when using
  436. perspective changes the picture -- your "point of view" is moved.
  437.  
  438. A truly wild variation of 3D may be seen by entering "2" for the stereo
  439. mode, putting on red/blue "funny glasses", and watching the fern develop
  440. with full depth perception right there before your eyes!
  441.  
  442. This feature USED to be dedicated to Bruce Goren, as a bribe to get him
  443. to send us MORE knockout stereo slides of 3D ferns, now that we have
  444. made it so easy! Bruce, what have you done for us *LATELY* ?? (Just
  445. kidding, really!)
  446.  
  447.  
  448. Sierpinski Gasket (type=sierpinski)
  449.  
  450. Another pre-Mandelbrot classic, this one found by W. Sierpinski around
  451. World War I. It is generated by dividing a triangle into four congruent
  452. smaller triangles, doing the same to each of them, and so on, yea, even
  453. unto infinity. (Notice how hard we try to avoid reiterating
  454. "iterating"?)
  455.  
  456. If you think of the interior triangles as "holes", they occupy more and
  457. more of the total area, while the "solid" portion becomes as hopelessly
  458. fragile as that gasket you HAD to remove without damaging it -- you
  459. remember, that Sunday afternoon when all the parts stores were closed?
  460. There's a three-dimensional equivalent using nested tetrahedrons instead
  461. of triangles, but it generates too much pyramid power to be safely
  462. unleashed yet.
  463.  
  464. There are no parameters for this type. We were able to implement it with
  465. integer math routines, so it runs fairly quickly even without an FPU.
  466.  
  467.  
  468. Quartic Mandelbrot/Julia (type=mandel4/julia4)
  469.  
  470. These fractal types are the moral equivalent of the original M and J
  471. sets, except that they use the formula Z(n+1) = Z(n)^4 + C, which adds
  472. additional pseudo-symmetries to the plots. The "Mandel4" set maps to the
  473. "Julia4" set via -- surprise! -- the spacebar toggle. The M4 set is kind
  474. of boring at first (the area between the "inside" and the "outside" of
  475. the set is pretty thin, and it tends to take a few zooms to get to any
  476. interesting sections), but it looks nice once you get there. The Julia
  477. sets look nice right from the start.
  478.  
  479. Other powers, like Z(n)^3 or Z(n)^7, work in exactly the same fashion.
  480. We used this one only because we're lazy, and Z(n)^4 = (Z(n)^2)^2.
  481.  
  482.  
  483. Distance Estimator (distest=nnn)
  484.  
  485. This used to be type=demm and type=demj.  These types have not died, but
  486. are only hiding!  They are equivalent to the mandel and julia types with
  487. the "distest=" option selected with a predetermined value.
  488.  
  489. The "Distance Estimator Method" (described under "Doodads, Bells and
  490. Whistles") can be used to produce higher quality images of M and J sets,
  491. especially suitable for printing in black and white.
  492.  
  493. If you have some *.fra files made with the old types demm/demj, you may
  494. want to convert them to the new form.  See "MANDELFN" section for
  495. directions to carry out the conversion.
  496.  
  497.  
  498. Pickover Mandelbrot/Julia Types
  499.  
  500.  (type=manfn+zsqrd/julfn+zsqrd, manzpowr/julzpowr, manzzpwr/julzzpwr,
  501. manfn+exp/julfn+exp - formerly included man/julsinzsqrd and
  502. man/julsinexp which have now been generalized)
  503.  
  504. These types have been explored by Clifford A. Pickover, of the IBM
  505. Thomas J. Watson Research center. As implemented in Fractint, they are
  506. regular Mandelbrot/Julia set pairs that may be plotted with or without
  507. the "biomorph" option Pickover used to create organic-looking beasties
  508. (see below). These types are produced with formulas built from the
  509. functions z^z, z^n, sin(z), and e^z for complex z. Types with "power" or
  510. "pwr" in their name have an exponent value as a third parameter. For
  511. example, type=manzpower params=0/0/2 is our old friend the classical
  512. Mandelbrot, and type=manzpower params=0/0/4 is the Quartic Mandelbrot.
  513. Other values of the exponent give still other fractals.  Since these
  514. WERE the original "biomorph" types, we should give an example.    Try:
  515.  
  516.      FRACTINT type=manfn+zsqrd biomorph=0 corners=-8/8/-6/6 function=sin
  517.  
  518. to see a big biomorph digesting little biomorphs!
  519.  
  520.  
  521. Pickover Popcorn (type=popcorn/popcornjul)
  522.  
  523. Here is another Pickover idea. This one computes and plots the orbits of
  524. the dynamic system defined by:
  525.  
  526.            x(n+1) = x(n) - h*sin(y(n)+tan(3*y(n))
  527.            y(n+1) = y(n) - h*sin(x(n)+tan(3*x(n))
  528.  
  529. with the initializers x(0) and y(0) equal to ALL the complex values
  530. within the "corners" values, and h=.01.  ALL these orbits are
  531. superimposed, resulting in "popcorn" effect.  You may want to use a
  532. maxiter value less than normal - Pickover recommends a value of 50.  As
  533. a bonus, type=popcornjul shows the Julia set generated by these same
  534. equations with the usual escape-time coloring. Turn on orbit viewing
  535. with the "O" command, and as you watch the orbit pattern you may get
  536. some insight as to where the popcorn comes from. Although you can zoom
  537. and rotate popcorn, the results may not be what you'd expect, due to the
  538. superimposing of orbits and arbitrary use of color. Just for fun we
  539. added type popcornjul, which is the plain old Julia set calculated from
  540. the same formula.
  541.  
  542.  
  543. Peterson Variations (xxmarksxx types)
  544.  
  545.   (type=marksmandel, marksjulia, cmplxmarksmand, cmplxmarksjul)
  546.  
  547. These fractal types are contributions of Mark Peterson. MarksMandel and
  548. MarksJulia are two families of fractal types that are linked in the same
  549. manner as the classic Mandelbrot/Julia sets: each MarksMandel set can be
  550. considered as a mapping into the MarksJulia sets, and is linked with the
  551. spacebar toggle. The basic equation for these sets is:
  552.  
  553.         Z(n+1) = ((lambda^n) * Z(n)^2) + lambda
  554.  
  555. where Z(0) = 0.0 and lambda is (x + iy) for MarksMandel. For MarksJulia,
  556. Z(0) = (x + iy) and lambda is a constant (taken from the MarksMandel
  557. spacebar toggle, if that method is used). The exponent is a positive
  558. integer or a complex number. We call these "families" because each value
  559. of the exponent yields a different MarksMandel set, which turns out to
  560. be a kinda-polygon with (exponent+1) sides. The exponent value is the
  561. third parameter, after the "initialization warping" values. Typically
  562. one would use null warping values, and specify the exponent with
  563. something like "PARAMS=0/0/4", which creates an unwarped, pentagonal
  564. MarksMandel set.
  565.  
  566.  
  567. Unity (type=unity)
  568.  
  569. This Peterson variation began with curiosity about other "Newton-style"
  570. approximation processes. A simple one,
  571.  
  572.      One = (x * x) + (y * y); y = (2 - One) * x;   x = (2 - One) * y;
  573.  
  574. produces the fractal called Unity.
  575.  
  576. One of its interesting features is the "ghost lines." The iteration loop
  577. bails out when it reaches the number 1 to within the resolution of a
  578. screen pixel. When you zoom a section of the image, the bailout
  579. criterion is adjusted, causing some lines to become thinner and others
  580. thicker.
  581.  
  582. Only one line in Unity that forms a perfect circle: the one at a radius
  583. of 1 from the origin. This line is actually infinitely thin. Zooming on
  584. it reveals only a thinner line, up (down?) to the limit of accuracy for
  585. the algorithm. The same thing happens with other lines in the fractal,
  586. such as those around |x| = |y| = (1/2)^(1/2) = .7071
  587.  
  588. Try some other tortuous approximations using the TEST stub (see below)
  589. and let us know what you come up with!
  590.  
  591.  
  592. Scott Taylor / Lee Skinner Variations
  593.  
  594.   (type=fn(z*z), fn*fn, fn*z+z, fn+fn, sqr(1/fn), sqr(fn), spider,
  595. tetrate, manowar)
  596.  
  597. Two of Fractint's faithful users went bonkers when we introduced the
  598. "formula" type, and came up with all kinds of variations on escape-time
  599. fractals using trig functions.    We decided to put them in as regular
  600. types, but there were just too many! So we defined the types with
  601. variable functions and let you, the, overwhelmed user, specify what the
  602. functions should be! Thus Scott Taylor's "z = sin(z) + z^2" formula type
  603. is now the "fn+fn" regular type, and EITHER function can be one of sin,
  604. cos, sinh, cosh, exp, log, or sqr. Plus we give you 4 parameters to set,
  605. the complex coefficients of the two functions!    Thus the innocent-
  606. looking "fn+fn" type is really at least 36 different types in disguise,
  607. not counting the damage done by the parameters!
  608.  
  609. Lee informs us that you should not judge fractals by their "outer"
  610. appearance. For example, the images produced by z = sin(z) + z^2 and z =
  611. sin(z) - z^2 look very similar, but are different when you zoom in.
  612.  
  613.  
  614. Kam Torus (type=kamtorus, kamtorus3d)
  615.  
  616. This type is created by superimposing orbits generated by a set of
  617. equations, with a variable incremented each time.
  618.  
  619.            x(0) = y(0) = orbit/3;
  620.            x(n+1) = x(n)*cos(a) + (x(n)*x(n)-y(n))*sin(a)
  621.            y(n+1) = x(n)*sin(a) - (x(n)*x(n)-y(n))*cos(a)
  622.  
  623. After each orbit, 'orbit' is incremented by a step size. The parameters
  624. are angle "a", step size for incrementing 'orbit', stop value for
  625. 'orbit', and points per orbit. Try this with a stop value of 5 with
  626. sound=x for some weird fractal music (ok, ok, fractal noise)! You will
  627. also see the KAM Torus head into some chaotic territory that Scott
  628. Taylor wanted to hide from you by setting the defaults the way he did,
  629. but now we have revealed all!
  630.  
  631. The 3D variant is created by treating 'orbit' as the z coordinate.
  632.  
  633.  
  634. Bifurcation (type=bifxxx)
  635.  
  636. The wonder of fractal geometry is that such complex forms can arise from
  637. such simple generating processes. A parallel surprise has emerged in the
  638. study of dynamical systems: that simple, deterministic equations can
  639. yield chaotic behavior, in which the system never settles down to a
  640. steady state or even a periodic loop. Often such systems behave normally
  641. up to a certain level of some controlling parameter, then go through a
  642. transition in which there are two possible solutions, then four, and
  643. finally a chaotic array of possibilities.
  644.  
  645. This emerged many years ago in biological models of population growth.
  646. Consider a (highly over-simplified) model in which the rate of growth is
  647. partly a function of the size of the current population:
  648.  
  649.   New Population =  Growth Rate * Old Population * (1 - Old Population)
  650.  
  651. where population is normalized to be between 0 and 1. At growth rates
  652. less than 200 percent, this model is stable: for any starting value,
  653. after several generations the population settles down to a stable level.
  654. But for rates over 200 percent, the equation's curve splits or
  655. "bifurcates" into two discrete solutions, then four, and soon becomes
  656. chaotic.
  657.  
  658. Type=bifurcation illustrates this model. (Although it's now considered a
  659. poor one for real populations, it helped get people thinking about
  660. chaotic systems.) The horizontal axis represents growth rates, from 190
  661. percent (far left) to 400 percent; the vertical axis normalized
  662. population values, from 0 to 4/3. Notice that within the chaotic region,
  663. there are narrow bands where there is a small, odd number of stable
  664. values. It turns out that the geometry of this branching is fractal;
  665. zoom in where changing pixel colors look suspicious, and see for
  666. yourself.
  667.  
  668. The default display has been filtered by allowing the population to
  669. settle from its initial value for 5000 cycles before plotting maxiter
  670. population values. To override this filter value, specify a new
  671. (smaller) one as the first "PARAMS=" value. "PARAMS=1" produces an
  672. unfiltered map.
  673.  
  674. Many formulae can be used to produce bifurcations.  Mitchel Feigenbaum
  675. studied lots of bifurcations in the mid-70's, using a HP-65 calculator
  676. (IBM PCs, Fractals, and Fractint, were all Sci-Fi then !). He studied
  677. where bifurcations occurred, for the formula r*p*(1-p), the one
  678. described above.  He found that the ratios of lengths of adjacent areas
  679. of bifurcation were four and a bit.  These ratios vary, but, as the
  680. growth rate increases, they tend to a limit of 4.669+.    This helped him
  681. guess where bifurcation points would be, and saved lots of time.
  682.  
  683. When he studied bifurcations of r*sin(PI*p) he found a similar pattern,
  684. which is not surprising in itself.  However, 4.669+ popped out, again.
  685. Different formulae, same number ?  Now, THAT's surprising !  He tried
  686. many other formulae and ALWAYS got 4.669+ - Hot Damn !!!  So hot, in
  687. fact, that he phoned home and told his Mom it would make him Famous ! He
  688. also went on to tell other scientists.    The rest is History...
  689.  
  690. (It has been conjectured that if Feigenbaum had a copy of Fractint, and
  691. used it to study bifurcations, he may never have found his Number, as it
  692. only became obvious from long perusal of hand-written lists of values,
  693. without the distraction of wild color-cycling effects !).
  694.  
  695. We now know that this number is as universal as PI or E. It appears in
  696. situations ranging from fluid-flow turbulence, electronic oscillators,
  697. chemical reactions, and even the Mandelbrot Set - yup, fraid so:
  698. "budding" of the Mandelbrot Set along the negative real axis occurs at
  699. intervals determined by Feigenbaum's Number, 4.669201660910.....
  700. Fractint does not make direct use of the Feigenbaum Number (YET !).
  701. However, it does now reflect the fact that there is a whole sub-species
  702. of Bifurcation-type fractals.  Those implemented to date, and the
  703. related formulae, (writing P for pop[n+1] and p for pop[n]) are :
  704.  
  705.     bifurcation   P =  p + r*p*(1-p)      Verhulst Bifurcations.
  706.     biflambda     P =      r*p*(1-p)      Real equivalent of Lambda Sets.
  707.     bif+sinpi     P =  p + r*sin(PI*p)    Population scenario based on...
  708.     bif=sinpi     P =      r*sin(PI*p)    ...Feigenbaum's second formula.
  709.  
  710. It took a while for bifurcations to appear here, despite them being over
  711. a century old, and intimately related to chaotic systems. However, they
  712. are now truly alive and well in Fractint!
  713.  
  714.  
  715. Lorenz Attractors (type=lorenz/lorenz3d)
  716.  
  717. The "Lorenz Attractor" is a "simple" set of three deterministic
  718. equations developed by Edward Lorenz while studying the non-
  719. repeatability of weather patterns.  The weather forecaster's basic
  720. problem is that even very tiny changes in initial patterns ("the beating
  721. of a butterfly's wings" - the official term is "sensitive dependence on
  722. initial conditions") eventually reduces the best weather forecast to
  723. rubble.
  724.  
  725. The lorenz attractor is the plot of the orbit of a dynamic system
  726. consisting of three first order non-linear differential equations. The
  727. solution to the differential equation is vector-valued function of one
  728. variable.  If you think of the variable as time, the solution traces an
  729. orbit.    The orbit is made up of two spirals at an angle to each other in
  730. three dimensions. We change the orbit color as time goes on to add a
  731. little dazzle to the image.  The equations are:
  732.  
  733.                   dx/dt = -a*x + a*y
  734.                   dy/dt =  b*x - y   -z*x
  735.                   dz/dt = -c*z + x*y
  736.  
  737. We solve these differential equations approximately using a method known
  738. as the first order taylor series.  Calculus teachers everywhere will
  739. kill us for saying this, but you treat the notation for the derivative
  740. dx/dt as though it really is a fraction, with "dx" the small change in x
  741. that happens when the time changes "dt".  So multiply through the above
  742. equations by dt, and you will have the change in the orbit for a small
  743. time step. We add these changes to the old vector to get the new vector
  744. after one step. This gives us:
  745.  
  746.                xnew = x + (-a*x*dt) + (a*y*dt)
  747.                ynew = y + (b*x*dt) - (y*dt) - (z*x*dt)
  748.                znew = z + (-c*z*dt) + (x*y*dt)
  749.  
  750.                (default values: dt = .02, a = 5, b = 15, c = 1)
  751.  
  752. We connect the successive points with a line, project the resulting 3D
  753. orbit onto the screen, and voila! The Lorenz Attractor!
  754.  
  755. We have added two versions of the Lorenz Attractor.  "Type=lorenz" is
  756. the Lorenz attractor as seen in everyday 2D.  "Type=lorenz3d" is the
  757. same set of equations with the added twist that the results are run
  758. through our perspective 3D routines, so that you get to view it from
  759. different angles (you can modify your perspective "on the fly" by
  760. selecting the "3D Transform Parameters" option of the <I> command.) If
  761. you set the "stereo" option to "2", and have red/blue funny glasses on,
  762. you will see the attractor orbit with depth perception.
  763.  
  764. Hint: the default perspective values (x = 60, y = 30, z = 0) aren't the
  765. best ones to use for fun Lorenz Attractor viewing.  Experiment a bit -
  766. start with rotation values of 0/0/0 and then change to 20/0/0 and 40/0/0
  767. to see the attractor from different angles.- and while you're at it, use
  768. a non-zero perspective point Try 100 and see what happens when you get
  769. *inside* the Lorenz orbits.  Here comes one - Duck!  While you are at
  770. it, turn on the sound with the "X". This way you'll at least hear it
  771. coming!
  772.  
  773. Different Lorenz attractors can be created using different parameters.
  774. Four parameters are used. The first is the time-step (dt). The default
  775. value is .02. A smaller value makes the plotting go slower; a larger
  776. value is faster but rougher. A line is drawn to connect successive orbit
  777. values.  The 2nd, third, and fourth parameters are coefficients used in
  778. the differential equation (a, b, and c). The default values are 5, 15,
  779. and 1.    Try changing these a little at a time to see the result.
  780.  
  781.  
  782. Rossler Attractors (type=rossler3D)
  783.  
  784. This fractal is named after the German Otto Rossler, a non-practicing
  785. medical doctor who approached chaos with a bemusedly philosophical
  786. attitude.  He would see strange attractors as philosophical objects. His
  787. fractal namesake looks like a band of ribbon with a fold in it. All we
  788. can say is we used the same calculus-teacher-defeating trick of
  789. multiplying the equations by "dt" to solve the differential equation and
  790. generate the orbit.  This time we will skip straight to the orbit
  791. generator - if you followed what we did above with Lorenz you can easily
  792. reverse engineer the differential equations.
  793.  
  794.                xnew = x - y*dt -   z*dt
  795.                ynew = y + x*dt + a*y*dt
  796.                znew = z + b*dt + x*z*dt - c*z*dt
  797.  
  798. Default parameters are dt = .04, a = .2, b = .2, c = 5.7
  799.  
  800.  
  801. Henon Attractors (type=henon)
  802.  
  803. Michel Henon was an astronomer at Nice observatory in southern France.
  804. He came to the subject of fractals via investigations of the orbits of
  805. astronomical objects.  The strange attractor most often linked with
  806. Henon's name comes not from a differential equation, but from the world
  807. of discrete mathematics - difference equations. The Henon map is an
  808. example of a very simple dynamic system that exhibits strange behavior.
  809. The orbit traces out a characteristic banana shape, but on close
  810. inspection, the shape is made up of thicker and thinner parts.    Upon
  811. magnification, the thicker bands resolve to still other thick and thin
  812. components.  And so it goes forever! The equations that generate this
  813. strange pattern perform the mathematical equivalent of repeated
  814. stretching and folding, over and over again.
  815.  
  816.                xnew =  1 + y - a*x*x
  817.                ynew =  b*x
  818.  
  819. The default parameters are a=1.4 and b=.3.
  820.  
  821.  
  822. Pickover Attractors (type=pickover)
  823.  
  824. Clifford A. Pickover of the IBM Thomas J. Watson Research center is such
  825. a creative source for fractals that we attach his name to this one only
  826. with great trepidation.  Probably tomorrow he'll come up with another
  827. one and we'll be back to square one trying to figure out a name!
  828.  
  829. This one is the three dimensional orbit defined by:
  830.  
  831.                xnew = sin(a*y) - z*cos(b*x)
  832.                ynew = z*sin(c*x) - cos(d*y)
  833.                znew = sin(x)
  834.  
  835. Default parameters are: a = 2.24, b = .43, c = -.65, d = -2.43
  836.  
  837.  
  838. Gingerbreadman (type=gingerbreadman)
  839.  
  840. This simple fractal is a charming example stolen from "Science of
  841. Fractal Images", p. 149.  Look closely, and you will see that the
  842. gingerbreadman contains infinitely many copies of himself at all
  843. different scales.
  844.  
  845.                xnew = 1 - y + |x|
  846.                ynew = x
  847.  
  848. There are no parameters.
  849.  
  850.  
  851. Test (type=test)
  852.  
  853. This is a stub that we (and you!) use for trying out new fractal types.
  854. "Type=test" fractals make use of Fractint's structure and features for
  855. whatever code is in the routine 'testpt()' (located in the small source
  856. file TESTPT.C) to determine the color of a particular pixel.
  857.  
  858. If you have a favorite fractal type that you believe would fit nicely
  859. into Fractint, just rewrite the C function in TESTPT.C (or use the
  860. prototype function there, which is a simple M-set implementation) with
  861. an algorithm that computes a color based on a point in the complex
  862. plane.
  863.  
  864. After you get it working, send your code to one of the authors and we
  865. might just add it to the next release of Fractint, with full credit to
  866. you. Our criteria are: 1) an interesting image and 2) a formula
  867. significantly different from types already supported. (Bribery may also
  868. work. THIS author is completely honest, but I don't trust those other
  869. guys.) Be sure to include an explanation of your algorithm and the
  870. parameters supported, preferably formatted as you see here to simplify
  871. folding it into the documentation.
  872.  
  873.  
  874. Formula (type=formula)
  875.  
  876. Fractint now has a new 'type=formula' fractal type.  This is a "roll-
  877. your-own" fractal interpreter - you don't even need a compiler!
  878.  
  879. To run a "type=formula" fractal, you first need a text file containing
  880. formulas (there's a sample file - FRACTINT.FRM - included with this
  881. distribution).    When you select the "formula" fractal type, you are
  882. prompted first for the name of your file.  Then, after the program
  883. locates the file and scans it for formulas, you are prompted for the
  884. formula name you wish to run.  After prompting for any parameters, the
  885. formula is parsed for syntax errors and then the fractal is generated.
  886.  
  887. There are also two command-line options that work with type=formula
  888. ("formulafile=" and "formulaname=") if you are using this new fractal
  889. type in batch mode.
  890.  
  891. The following documentation is supplied by Mark Peterson, who wrote the
  892. formula interpreter:
  893.  
  894. Formula fractals allow you to create your own fractal formulas.  The
  895. general format is:
  896.  
  897.      Mandelbrot(XAXIS) { z = Pixel:  z = sqr(z) + pixel, |z| <= 4 }
  898.         |         |          |                |              |
  899.        Name     Symmetry    Initial         Iteration       Bailout
  900.                             Condition                       Criteria
  901.  
  902. Initial conditions are set, then the iterations performed until the
  903. bailout criteria is true or 'z' turns into a periodic loop.
  904.  
  905. All variables are created automatically by their usage and treated as
  906. complex.  If you declare 'v = 2' then the variable 'v' is treated as a
  907. complex with an imaginary value of zero.
  908.  
  909.             Predefined Variables (x, y)
  910.             --------------------------------------------
  911.             z              used for periodicity checking
  912.             p1             parameters 1 and 2
  913.             p2             parameters 3 and 4
  914.             pixel          screen coordinates
  915.  
  916.             Precedence
  917.             --------------------------------------------
  918.             1              sin(), cos(), sinh(), cosh(), sqr(),
  919.                            log(), exp(), abs(), conj(), real(),
  920.                            imag()
  921.             2              - (negation), ^ (power)
  922.             3              * (multiplication), / (division)
  923.             4              + (addition), - (subtraction)
  924.             5              = (assignment)
  925.             6              < (less than), <= (less than or equal to)
  926.  
  927. Precedence may be overridden by use of parenthesis.  Note the modulus
  928. squared operator |z| is also parenthetic and always sets the imaginary
  929. component to zero.  This means 'c * |z - 4|' first subtracts 4 from z,
  930. calculates the modulus squared then multiplies times 'c'.  Nested
  931. modulus squared operators require overriding parenthesis:
  932.  
  933.             c * |z + (|pixel|)|
  934.  
  935. The formulas are performed using either integer or floating point
  936. mathematics depending on the type of math you have setup.  If you do not
  937. have an FPU then type MPC math is performed in lieu of traditional
  938. floating point.
  939.  
  940. Remember that when using integer math there is a limited dynamic range,
  941. so what you think may be a fractal could really be just a limitation of
  942. the integer math range.  God may work with integers, but His dynamic
  943. range is many orders of magnitude greater than our puny 32 bit
  944. mathematics!  Always verify with the floating point.
  945.  
  946.  
  947. Julibrots (type=julibrot)
  948.  
  949. The following documentation is supplied by Mark Peterson, who "invented"
  950. the Julibrot algorithm.
  951.  
  952. There is a very close relationship between the Mandelbrot set and Julia
  953. sets of the same equation.  To draw a Julia set you take the basic
  954. equation and vary the initial value according to the two dimensions of
  955. screen leaving the constant untouched.    This method diagrams two
  956. dimensions of the equation, 'x' and 'iy', which I refer to as the Julia
  957. x and y.
  958.  
  959.        z(0) = screen coordinate (x + iy)
  960.        z(1) = (z(0) * z(0)) + c, where c = (a + ib)
  961.        z(2) = (z(1) * z(0)) + c
  962.        z(3) = . . . .
  963.  
  964. The Mandelbrot set is a composite of all the Julia sets.  If you take
  965. the center pixel of each Julia set and plot it on the screen coordinate
  966. corresponding to the value of c, a + ib, then you have the Mandelbrot
  967. set.
  968.  
  969.        z(0) = 0
  970.        z(1) = (z(0) * z(0)) + c, where c = screen coordinate (a + ib)
  971.        z(2) = (z(1) * z(1)) + c
  972.        z(3) = . . . .
  973.  
  974. I refer to the 'a' and 'ib' components of 'c' as the Mandelbrot 'x' and
  975. 'y'.
  976.  
  977. All the 2 dimensional Julia sets correspond to a single point on the 2
  978. dimensional Mandelbrot set, making a total of 4 dimensions associated
  979. with our equation.  Visualizing 4 dimensional objects is not as
  980. difficult as it may sound at first if you consider we live in a 4
  981. dimensional world.  The room around you is three dimensions and as you
  982. read this text you are moving through the fourth dimension of time. You
  983. and everything around your are 4 dimensional objects - which is to say 3
  984. dimensional objects moving through time.  We can think of the 4
  985. dimensions of our equation in the same manner, this is as a 3
  986. dimensional object evolving over time - sort of a 3 dimensional fractal
  987. movie.    The fun part of it is you get to pick the dimension representing
  988. time!
  989.  
  990. To construct the 4 dimensional object into something you can view on the
  991. computer screen you start with the simple 2 dimensions of the Julia set.
  992. I'll treat the two Julia dimensions as the spatial dimensions of height
  993. and width, and the Mandelbrot 'y' dimension as the third spatial
  994. dimension of depth.  This leaves the Mandelbrot 'x' dimension as time.
  995. Draw the Julia set associated with the Mandelbrot coordinate (-.83, -
  996. .25), but instead of setting the color according to the iteration level
  997. it bailed out on, make it a two color drawing where the pixels are black
  998. for iteration levels less than 30, and another color for iteration
  999. levels greater than or equal to 30.  Now increment the Mandelbrot 'y'
  1000. coordinate by a little bit, say (-.83, -.2485), and draw another Julia
  1001. set in the same manner using a different color for bailout values of 30
  1002. or greater.  Continue doing this until you reach (-.83, .25).  You now
  1003. have a three dimensional representation of the equation at time -.83.
  1004. If you make the same drawings for points in time before and after -.83
  1005. you can construct a 3 dimensional movie of the equation which
  1006. essentially is a full 4 dimensional representation.
  1007.  
  1008. In the Julibrot fractal available with this release of Fractint the
  1009. spatial dimensions of height and width are always the Julia dimensions.
  1010. The dimension of depth is determined by the Mandelbrot coordinates.  The
  1011. program will consider the dimension of depth as the line between the two
  1012. Mandelbrot points.  To draw the image in our previous example you would
  1013. set the 'From Mandelbrot' to (-.83, .25) and the 'To Mandelbrot' as (-
  1014. .83, -.25).  If you set the number of 'z' pixels to 128 then the program
  1015. will draw the 128 Julia sets found between Mandelbrot points (-.83, .25)
  1016. and (-.83, -.25).  To speed things up the program doesn't actually
  1017. calculate ALL the coordinates of the Julia sets.  It starts with the a
  1018. pixel a the Julia set closest to the observer and moves into the screen
  1019. until it either reaches the required bailout or the limit to the range
  1020. of depth.  Zooming can be done in the same manner as with other
  1021. fractals.  The visual effect (with other values unchanged) is similar to
  1022. putting the boxed section under a pair of magnifying glasses.
  1023.  
  1024. The variable associated with penetration level is the level of bailout
  1025. there you decide to make the fractal solid.  In other words all bailout
  1026. levels less than the penetration level are considered to be transparent,
  1027. and those equal or greater to be opaque.  The farther away the apparent
  1028. pixel is the dimmer the color.
  1029.  
  1030. The remainder of the parameters are needed to construct the red/blue
  1031. picture so that the fractal appears with the desired depth and proper
  1032. 'z' location.  With the origin set to 8 inches beyond the screen plane
  1033. and the depth of the fractal at 8 inches the default fractal will appear
  1034. to start at 4 inches beyond the screen and extend to 12 inches if your
  1035. eyeballs are 2.5 inches apart and located at a distance of 24 inches
  1036. from the screen.  The screen dimensions provide the reference frame.
  1037.  
  1038. To the human eye blue appears brighter than red.  The Blue:Red ratio is
  1039. used to compensate for this fact.  If the image appears reddish through
  1040. the glasses raise this value until the image appears to be in shades of
  1041. gray.  If it appears bluish lower the ratio.  Julibrots can only be
  1042. shown in 256 red/blue colors for viewing in either stereo-graphic
  1043. (red/blue funny glasses) or gray-scaled.  Fractint automatically loads
  1044. either GLASSES1.MAP or ALTERN.MAP as appropriate.
  1045.  
  1046.  
  1047. Diffusion Limited Aggregation (type=diffusion)
  1048.  
  1049. This type begins with a single point in the center of the screen.
  1050. Subsequent points move around randomly until coming into contact with
  1051. the first point, at which time their locations are fixed and they are
  1052. colored randomly.  This process repeats until the fractals reaches the
  1053. edge of the screen.  Use the show orbits function to see the points'
  1054. random motion.
  1055.  
  1056. One unfortunate problem is that on a large screen, this process will
  1057. tend to take eons.  To speed things up, the points are restricted to a
  1058. box around the initial point.  The first and only parameter to diffusion
  1059. contains the size of the border between the fractal and the edge of the
  1060. box.  If you make this number small, the fractal will look more solid
  1061. and will be generated more quickly.
  1062.  
  1063. Diffusion was inspired by a Scientific American article a couple of
  1064. years back which includes actual pictures of real physical phenomena
  1065. that behave like this.
  1066.  
  1067. Thanks to Adrian Mariano for providing the diffusion code and
  1068. documentation.
  1069.  
  1070.  
  1071. Magnetic Fractals (type=magnet1m/.../magnet2j)
  1072.  
  1073. These fractals use formulae derived from the study of hierarchical
  1074. lattices, in the context of magnetic renormalisation transformations.
  1075. This kinda stuff is useful in an area of theoretical physics that deals
  1076. with magnetic phase-transitions (predicting at which temperatures a
  1077. given substance will be magnetic, or non-magnetic).  In an attempt to
  1078. clarify the results obtained for Real temperatures (the kind that you
  1079. and I can feel), the study moved into the realm of Complex Numbers,
  1080. aiming to spot Real phase-transitions by finding the intersections of
  1081. lines representing Complex phase-transitions with the Real Axis.  The
  1082. first people to try this were two physicists called Yang and Lee, who
  1083. found the situation a bit more complex than first expected, as the phase
  1084. boundaries for Complex temperatures are (surprise!) fractals.
  1085.  
  1086. And that's all the technical (?) background you're getting here!  For
  1087. more details (are you SERIOUS ?!) read "The Beauty of Fractals".  When
  1088. you understand it all, you might like to re-write this section, before
  1089. you start your new job as a professor of theoretical physics...
  1090.  
  1091. In Fractint terms, the important bits of the above are "Fractals",
  1092. "Complex Numbers", "Formulae", and "The Beauty of Fractals".  Lifting
  1093. the Formulae straight out of the Book and iterating them over the
  1094. Complex plane (just like the Mandelbrot set) produces Fractals.
  1095.  
  1096. The formulae are a bit more complicated than the Z^2+C used for the
  1097. Mandelbrot Set, that's all.  They are :
  1098.  
  1099.                  /  Z^2 + (C-1)  \
  1100.       MAGNET1 : |  -------------  | ^ 2
  1101.                  \  2*Z + (C-2)  /
  1102.  
  1103.                  /      Z^3 + 3*(C-1)*Z + (C-1)*(C-2)      \
  1104.       MAGNET2 : |  ---------------------------------------  | ^ 2
  1105.                  \  3*(Z^2) + 3*(C-2)*Z + (C-1)*(C-2) - 1  /
  1106.  
  1107. These aren't quite as horrific as they look (oh yeah ?!) as they only
  1108. involve two variables (Z and C), but cubing things, doing division, and
  1109. eventually squaring the result (all in Complex Numbers) don't exactly
  1110. spell S-p-e-e-d !  These are NOT the fastest fractals in Fractint !
  1111.  
  1112. As you might expect, for both formulae there is a single related
  1113. Mandelbrot-type set (magnet1m, magnet2m) and an infinite number of
  1114. related Julia-type sets (magnet1j, magnet2j), with the usual toggle
  1115. between the corresponding Ms and Js via the spacebar.
  1116.  
  1117. If you fancy delving into the Julia-types by hand, you will be prompted
  1118. for the Real and Imaginary parts of the parameter denoted by C.  The
  1119. result is symmetrical about the Real axis (and therefore the initial
  1120. image gets drawn in half the usual time) if you specify a value of Zero
  1121. for the Imaginary part of C.
  1122.  
  1123. Fractint Historical Note:  Another complication (besides the formulae)
  1124. in implementing these fractal types was that they all have a finite
  1125. attractor (1.0 + 0.0i), as well as the usual one (Infinity).  This fact
  1126. spurred the development of Finite Attractor logic in Fractint.    Without
  1127. this code you can still generate these fractals, but you usually end up
  1128. with a pretty boring image that is mostly deep blue "lake", courtesy of
  1129. Fractint's standard Periodicity Checking.  See the Finite Attractors
  1130. section for more information on this aspect of Fractint internals.
  1131.  
  1132. (Thanks to Kevin Allen for Magnetic type documentation above).
  1133.  
  1134.  
  1135. L-Systems (type=lsystem)
  1136.  
  1137. These fractals are constructed from line segments using rules specified
  1138. in drawing commands.  Starting with an initial string, the axiom,
  1139. transformation rules are applied a specified number of times, to produce
  1140. the final command string which is used to draw the image.
  1141.  
  1142. Like the type=formula fractals, this type requires a separate data file.
  1143. A sample file, FRACTINT.L, is included with this distribution.    When you
  1144. select type lsystem, you are asked for the filename.  Next you are asked
  1145. for the lsystem name you wish to run.  Last, you are asked for one
  1146. parameter - the "order", or number of times to execute all the
  1147. transformation rules.  It is wise to start with small orders, because
  1148. the size of the substituted command string grows exponentially and it is
  1149. very easy to exceed your resolution.  (Higher orders take longer to
  1150. generate too.)    The command line options "lname=" and "lfile=" can be
  1151. used to over-ride the default file name and lsystem name.
  1152.  
  1153. Each L-System entry in the file contains a specification of the angle,
  1154. the axiom, and the transformation rules.  Each item must appear on its
  1155. own line and each line must be less than 160 characters long.
  1156.  
  1157. The statement "angle n" sets the angle to 360/n degrees; n must be an
  1158. integer greater than two and less than fifty.
  1159.  
  1160. "Axiom string" defines the axiom.
  1161.  
  1162. Transformation rules are specified as "a=string" and convert the single
  1163. character 'a' into "string."  If more than one rule is specified for a
  1164. single character all of the strings will be added together.  This allows
  1165. specifying transformations longer than the 160 character limit.
  1166. Transformation rules may operate on any characters except space, tab or
  1167. '}'.
  1168.  
  1169. A line which starts with ;; is a comment line.
  1170.  
  1171. Here is a sample lsystem:
  1172.  
  1173.                    | This comment section would NOT be legal.
  1174.                    | Comments inside an L-System start with ;; at
  1175.                    | the start of the line.
  1176.   Dragon {         | Name of lsystem, { indicates start
  1177.     ;; Comment!    | This is a comment
  1178.     Angle 8        | Specify the angle increment to 45 degrees
  1179.     Axiom FX       | Starting character string
  1180.     F=             | First rule:  Delete 'F'
  1181.     y=+FX--FY+     | Change 'y' into  "+fx--fy+"
  1182.     x=-FX++FY-     | Similar transformation on 'x'
  1183.   }                | final } indicates end
  1184.  
  1185.   The standard drawing commands are:
  1186.       F Draw forward
  1187.       G Move forward (without drawing)
  1188.       + Increase angle
  1189.       - Decrease angle
  1190.       | Try to turn 180 degrees. (If angle is odd, the turn
  1191.         will be the largest possible turn less than 180 degrees.)
  1192.  
  1193. These commands increment angle by the user specified angle value. They
  1194. should be used when possible because they are fast. If greater
  1195. flexibility is needed, use the following commands which keep a
  1196. completely separate angle pointer which is specified in degrees.
  1197.  
  1198.       D   Draw forward
  1199.       M   Move forward
  1200.       \nn Increase angle nn degrees
  1201.       /nn Decrease angle nn degrees
  1202.  
  1203. Color control:
  1204.       Cnn Select color nn
  1205.       <nn Increment color by nn
  1206.       >nn decrement color by nn
  1207.  
  1208. Advanced commands:
  1209.       !     Reverse directions (Switch meanings of +, - and \, /)
  1210.       @nnn  Multiply line segment size by nnn
  1211.             nnn may be a plain number, or may be preceded by
  1212.                 I for inverse, or Q for square root.
  1213.                 (e.g.  @IQ2 divides size by the square root of 2)
  1214.       [     Push.  Stores current angle and position on a stack
  1215.       ]     Pop.  Return to location of last push
  1216.  
  1217. Other characters are perfectly legal in command strings.  They are
  1218. ignored for drawing purposes, but can be used to achieve complex
  1219. translations.
  1220.