home *** CD-ROM | disk | FTP | other *** search
/ BURKS 2 / BURKS_AUG97.ISO / SLAKWARE / XAP3 / XFRACT.TGZ / XFRACT.tar / usr / lib / xfractint / fractint.frm < prev    next >
Text File  |  1997-04-10  |  15KB  |  648 lines

  1. comment {
  2.  FRACTINT.DOC has instructions for adding new formulas to this file.
  3.  There are several hard-coded restrictions in the formula interpreter:
  4.  
  5.  1) The fractal name through the open curly bracket must be on a single line.
  6.  2) There is a hard-coded limit of 200 formulas per formula file, only
  7.     because of restrictions in the prompting routines.
  8.  3) Formulas can containt at most 250 operations (references to variables and
  9.     arithmetic); this is bigger than it sounds, no formula in the default
  10.     fractint.frm uses even 100
  11.  3) Comment blocks can be set up using dummy formulas with no formula name
  12.     or with the special name "comment".
  13.  
  14.  The formulas at the beginning of this file are from Mark Peterson, who
  15.  built this fractal interpreter feature.  The rest are grouped by contributor.
  16.  (Scott Taylor sent many but they are no longer here - they've been
  17.  incorporated as hard-coded types.  Lee Skinner also sent many which have
  18.  now been hard-coded.)
  19.  
  20.  Note that the builtin "cos" function had a bug which was corrected in
  21.  version 16.  To recreate an image from a formula which used cos before
  22.  v16, change "cos" in the formula to "cosxx" which is a new function
  23.  provided for backward compatibility with that bug.
  24.  }
  25.  
  26. Mandelbrot(XAXIS) {; Mark Peterson
  27.   ; Classical fractal showing LastSqr speedup
  28.   ; TW modified to allow inside= options to work correctly
  29.   z = Pixel, y = Sqr(z):  ; Start with z**2 to initialize LastSqr
  30.    z = y
  31.    z = z + Pixel
  32.    y = Sqr(z)             ; z is still the orbit value for inside=bof60
  33.     LastSqr <= 4      ; Use LastSqr instead of recalculating
  34.   }
  35.  
  36. Dragon (ORIGIN) {; Mark Peterson
  37.   z = Pixel:
  38.    z = sqr(z) + (-0.74543, 0.2),
  39.     |z| <= 4
  40.   }
  41.  
  42. Daisy (ORIGIN) {; Mark Peterson
  43.   z = pixel:
  44.    z = z*z + (0.11031, -0.67037),
  45.     |z| <= 4
  46.   }
  47.  
  48. InvMandel (XAXIS) {; Mark Peterson
  49.   c = z = 1 / pixel:
  50.    z = sqr(z) + c;
  51.     |z| <= 4
  52.   }
  53.  
  54. DeltaLog(XAXIS) {; Mark Peterson
  55.   z = pixel, c = log(pixel):
  56.    z = sqr(z) + c,
  57.     |z| <= 4
  58.   }
  59.  
  60. Newton4(XYAXIS) {; Mark Peterson
  61.   ; Note that floating-point is required to make this compute accurately
  62.   z = pixel, Root = 1:
  63.    z3 = z*z*z;
  64.    z4 = z3 * z;
  65.    z = (3 * z4 + Root) / (4 * z3);
  66.     .004 <= |z4 - Root|
  67.   }
  68.  
  69. comment {
  70.    The following are from Chris Green:
  71.    These fractals all use Newton's or Halley's formula for approximation
  72.    of a function.  In all of these fractals, p1 real is the "relaxation
  73.    coefficient". A value of 1 gives the conventional newton or halley
  74.    iteration. Values <1 will generally produce less chaos than values >1.
  75.    1-1.5 is probably a good range to try.  P1 imag is the imaginary component
  76.    of the relaxation coefficient, and should be zero but maybe a small
  77.    non-zero value will produce something interesting. Who knows?
  78.    For more information on Halley maps, see "Computers, Pattern, Chaos,
  79.    and Beauty" by Pickover.
  80.    }
  81.  
  82. Halley (XYAXIS) {; Chris Green. Halley's formula applied to x^7-x=0.
  83.   ; P1 real usually 1 to 1.5, P1 imag usually zero. Use floating point.
  84.   ; Setting P1 to 1 creates the picture on page 277 of Pickover's book
  85.   z=pixel:
  86.    z5=z*z*z*z*z;
  87.    z6=z*z5;
  88.    z7=z*z6;
  89.    z=z-p1*((z7-z)/ ((z6*7.0-1)-(z5*42.0)*(z7-z)/(z6*14.0-2))),
  90.     0.0001 <= |z7-z|
  91.   }
  92.  
  93. CGhalley (XYAXIS) {; Chris Green -- Halley's formula
  94.   ; P1 real usually 1 to 1.5, P1 imag usually zero. Use floating point.
  95.   z=(1,1):
  96.    z5=z*z*z*z*z;
  97.    z6=z*z5;
  98.    z7=z*z6;
  99.    z=z-p1*((z7-z-pixel)/ ((7.0*z6-1)-(42.0*z5)*(z7-z-pixel)/(14.0*z6-2))),
  100.     0.0001 <= |z7-z-pixel|
  101.   }
  102.  
  103. halleySin (XYAXIS) {; Chris Green. Halley's formula applied to sin(x)=0.
  104.   ; Use floating point.
  105.   ; P1 real = 0.1 will create the picture from page 281 of Pickover's book.
  106.   z=pixel:
  107.    s=sin(z), c=cos(z)
  108.    z=z-p1*(s/(c-(s*s)/(c+c))),
  109.     0.0001 <= |s|
  110.   }
  111.  
  112. NewtonSinExp (XAXIS) {; Chris Green
  113.   ; Newton's formula applied to sin(x)+exp(x)-1=0.
  114.   ; Use floating point.
  115.   z=pixel:
  116.    z1=exp(z)
  117.    z2=sin(z)+z1-1
  118.    z=z-p1*z2/(cos(z)+z1),
  119.     .0001 < |z2|
  120.   }
  121.  
  122. CGNewton3 {; Chris Green -- A variation on newton iteration.
  123.   ; The initial guess is fixed at (1,1), but the equation solved
  124.   ; is different at each pixel ( x^3-pixel=0 is solved).
  125.   ; Use floating point.
  126.   ; Try P1=1.8.
  127.   z=(1,1):
  128.    z2=z*z;
  129.    z3=z*z2;
  130.    z=z-p1*(z3-pixel)/(3.0*z2),
  131.     0.0001 < |z3-pixel|
  132.   }
  133.  
  134. HyperMandel {; Chris Green.
  135.   ; A four dimensional version of the mandelbrot set.
  136.   ; Use P1 to select which two-dimensional plane of the
  137.   ; four dimensional set you wish to examine.
  138.   ; Use floating point.
  139.   a=(0,0),b=(0,0):
  140.    z=z+1
  141.    anew=sqr(a)-sqr(b)+pixel
  142.    b=2.0*a*b+p1
  143.    a=anew,
  144.     |a|+|b| <= 4
  145.   }
  146.  
  147.  
  148. MTet (XAXIS) {; Mandelbrot form 1 of the Tetration formula --Lee Skinner
  149.   z = pixel:
  150.    z = (pixel ^ z) + pixel,
  151.     |z| <= (P1 + 3)
  152.   }
  153.  
  154. AltMTet(XAXIS) {; Mandelbrot form 2 of the Tetration formula --Lee Skinner
  155.   z = 0:
  156.    z = (pixel ^ z) + pixel,
  157.     |z| <= (P1 + 3)
  158.   }
  159.  
  160. JTet (XAXIS) {; Julia form 1 of the Tetration formula --Lee Skinner
  161.   z = pixel:
  162.    z = (pixel ^ z) + P1,
  163.     |z| <= (P2 + 3)
  164.   }
  165.  
  166. AltJTet (XAXIS) {; Julia form 2 of the Tetration formula --Lee Skinner
  167.   z = P1:
  168.    z = (pixel ^ z) + P1,
  169.     |z| <= (P2 + 3)
  170.   }
  171.  
  172. Cubic (XYAXIS) {; Lee Skinner
  173.   p = pixel, test = p1 + 3,
  174.   t3 = 3*p, t2 = p*p,
  175.   a = (t2 + 1)/t3, b = 2*a*a*a + (t2 - 2)/t3,
  176.   aa3 = a*a*3, z = 0 - a :
  177.    z = z*z*z - aa3*z + b,
  178.     |z| < test
  179.  }
  180.  
  181. { The following are from Lee Skinner, have been partially generalized. }
  182.  
  183. Fzppfnre  {; Lee Skinner
  184.   z = pixel, f = 1./(pixel):
  185.    z = fn1(z) + f,
  186.     |z| <= 50
  187.   }
  188.  
  189. Fzppfnpo  {; Lee Skinner
  190.   z = pixel, f = (pixel)^(pixel):
  191.    z = fn1(z) + f,
  192.     |z| <= 50
  193.   }
  194.  
  195. Fzppfnsr  {; Lee Skinner
  196.   z = pixel, f = (pixel)^.5:
  197.    z = fn1(z) + f,
  198.     |z| <= 50
  199.   }
  200.  
  201. Fzppfnta  {; Lee Skinner
  202.   z = pixel, f = tan(pixel):
  203.    z = fn1(z) + f,
  204.     |z|<= 50
  205.   }
  206.  
  207. Fzppfnct  {; Lee Skinner
  208.   z = pixel, f = cos(pixel)/sin(pixel):
  209.    z = fn1(z) + f,
  210.     |z|<= 50
  211.   }
  212.  
  213. Fzppfnse  {; Lee Skinner
  214.   z = pixel, f = 1./sin(pixel):
  215.    z = fn1(z) + f,
  216.     |z| <= 50
  217.   }
  218.  
  219. Fzppfncs  {; Lee Skinner
  220.   z = pixel, f = 1./cos(pixel):
  221.    z = fn1(z) + f,
  222.     |z| <= 50
  223.   }
  224.  
  225. Fzppfnth  {; Lee Skinner
  226.   z = pixel, f = tanh(pixel):
  227.    z = fn1(z)+f,
  228.     |z|<= 50
  229.   }
  230.  
  231. Fzppfnht  {; Lee Skinner
  232.   z = pixel, f = cosh(pixel)/sinh(pixel):
  233.    z = fn1(z)+f,
  234.     |z|<= 50
  235.   }
  236.  
  237. Fzpfnseh  {; Lee Skinner
  238.   z = pixel, f = 1./sinh(pixel):
  239.    z = fn1(z) + f,
  240.     |z| <= 50
  241.   }
  242.  
  243. Fzpfncoh  {; Lee Skinner
  244.   z = pixel, f = 1./cosh(pixel):
  245.    z = fn1(z) + f,
  246.     |z| <= 50
  247.   }
  248.  
  249.  
  250. { The following resulted from a FRACTINT bug. Version 13 incorrectly
  251.   calculated Spider (see above). We fixed the bug, and reverse-engineered
  252.   what it was doing to Spider - so here is the old "spider" }
  253.  
  254. Wineglass(XAXIS) {; Pieter Branderhorst
  255.   c = z = pixel:
  256.    z = z * z + c
  257.    c = (1+flip(imag(c))) * real(c) / 2 + z,
  258.     |z| <= 4 }
  259.  
  260.  
  261. { The following is from Scott Taylor.
  262.   Scott says they're "Dog" because the first one he looked at reminded him
  263.   of a hot dog. This was originally several fractals, we have generalized it. }
  264.  
  265. FnDog(XYAXIS)  {; Scott Taylor
  266.   z = Pixel, b = p1+2:
  267.    z = fn1( z ) * pixel,
  268.     |z| <= b
  269.   }
  270.  
  271. Ent {; Scott Taylor
  272.   ; Try params=.5/.75 and the first function as exp.
  273.   ; Zoom in on the swirls around the middle.  There's a
  274.   ; symmetrical area surrounded by an asymmetric area.
  275.   z = Pixel, y = fn1(z), base = log(p1):
  276.    z = y * log(z)/base,
  277.     |z| <= 4
  278.   }
  279.  
  280. Ent2 {; Scott Taylor
  281.   ; try params=2/1, functions=cos/cosh, potential=255/355
  282.   z = Pixel, y = fn1(z), base = log(p1):
  283.    z = fn2( y * log(z) / base ),
  284.     |z| <= 4
  285.   }
  286.  
  287. { From Kevin Lee: }
  288.  
  289. LeeMandel1(XYAXIS) {; Kevin Lee
  290.   z=Pixel:
  291. ;; c=sqr(pixel)/z, c=z+c, z=sqr(z),  this line was an error in v16
  292.    c=sqr(pixel)/z, c=z+c, z=sqr(c),
  293.     |z|<4
  294.   }
  295.  
  296. LeeMandel2(XYAXIS) {; Kevin Lee
  297.   z=Pixel:
  298.    c=sqr(pixel)/z, c=z+c, z=sqr(c*pixel),
  299.     |z|<4
  300.    }
  301.  
  302. LeeMandel3(XAXIS) {; Kevin Lee
  303.   z=Pixel, c=Pixel-sqr(z):
  304.    c=Pixel+c/z, z=c-z*pixel,
  305.     |z|<4
  306.   }
  307.  
  308. { These are a few of the examples from the book,
  309.   Fractal Creations, by Tim Wegner and Mark Peterson. }
  310.  
  311. MyFractal {; Fractal Creations example
  312.   c = z = 1/pixel:
  313.    z = sqr(z) + c;
  314.     |z| <= 4
  315.   }
  316.  
  317. Bogus1 {; Fractal Creations example
  318.   z = 0; z = z + * 2,
  319.    |z| <= 4 }
  320.  
  321. M