/****************************************************************************
 * This formula file or any formula file derived from it cannot be used for
 * commercial purposes or to create hard copy output without the explicit
 * consent of the original author.
 ****************************************************************************/

fractal {

   // Establish the mapping between complex coordinates
   // and display coordinates

   mapping {
      (-0.31230315742903181000,
       0.66474991613077905000,
       -0.04176892947018956400,
       0.88448097385089430000) => (1186,960)
   }

   formula
   {
      z              = current;
      c              = current;     
      $stop          = 0;
      $maxIterations = 20;      

      $xmax = 0; $xmin = 0; $xtot = 0;
      $ymax = 0; $ymin = 0; $ytot = 0;
      $mmax = 0; $mmin = 0; $mtot = 0;

      // some constants ...

      while($count < $maxIterations)
      {
         $x = real(z);
         $y = imag(z);
         $m = ssq(z);

         $xtot = $xtot + $x; $xmax = max($xmax, $x); $xmin = min($xmin, $x);
         $ytot = $ytot + $y; $ymax = max($ymax, $y); $ymin = min($ymin, $y);
         $mtot = $mtot + $m; $mmax = max($mmax, $m); $mmin = min($mmin, $m);

         z = z * csc(c+z);         
      }

      $r = 0;
      $g = 0;
      $b = 0;

      $r = (($xtot / $count) - $xmin) / ($xmax - $xmin);
      $g = (($ytot / $count) - $ymin) / ($ymax - $ymin);
      $b = (($mtot / $count) - $mmin) / ($mmax - $mmin);

      // adjust these to taste ... they should be: 0 <= value <= 255

      $rStart = 255;
      $gStart = 255;
      $bStart = 255;

      // adjust these to taste ... they should be: 0 <= value <= 2

      $rStep = 1;
      $gStep = 1;
      $bStep = 1;

      $pi    = 3.14159265358979323846;
      $twopi = 2 * $pi;

      // Calculate the colors ...

      $r = -cos($twopi * $r);
      $g = -cos($twopi * $g);
      $b = -cos($twopi * $b);

      $r = $r * 127 + 127;
      $g = $g * 127 + 127;
      $b = $b * 127 + 127;

      $r = $r * $rStep + $rStart;
      $g = $g * $gStep + $gStart;
      $b = $b * $bStep + $bStart;

      $r = $r / 360;
      $g = $g / 360;
      $b = $b / 360;

      $r = sin($pi * $r);
      $g = sin($pi * $g);
      $b = sin($pi * $b);

      $r = $r * 128 + 127;
      $g = $g * 128 + 127;
      $b = $b * 128 + 127;


      set_color($r, $g, $b);
   }
}
