Standard
Class Standard_ExponentialSmoothing

Object
  extended by common:Generic
      extended by common:Coloring
          extended by common:GradientColoring
              extended by Standard:Standard_ExponentialSmoothing

class 
GradientColoring:Standard_ExponentialSmoothing

Object version of ExponentialSmoothing in Standard.ucl. This coloring method provides smooth iteration colors for all fractal types, convergent or divergent (or both). It combines the two methods developed by Ron Barnett. It doesn't map precisely to iterations, but it's close. Originally written by Damien M. Jones


Ultra Fractal Source

Toggle UF Source Code Display

 class Standard_ExponentialSmoothing(common.ulb:GradientColoring) {
 ;
 ; Object version of ExponentialSmoothing in Standard.ucl.
 ;
 ; This coloring method provides smooth iteration colors for all fractal types,
 ; convergent or divergent (or both).  It combines the two methods developed by
 ; Ron Barnett.  It doesn't map precisely to iterations, but it's close.
 ;
 ; Originally written by Damien M. Jones
 ;
 public:
   func Init(complex pz, complex ppixel)
     fSum = 0
     fSum2 = 0
     fZOld = (0, 0)
   endfunc
   
   func Iterate(complex pz)
     if @diverge
       fSum = fSum + exp(-cabs(pz))
     endif
     if @converge
       fSum2 = fSum2 + exp(-1 / cabs(fZOld - pz))
     endif
     fZOld = pz
   endfunc
 
   float func ResultIndex(complex pz)
     if |pz - fZOld| < 0.5  ; convergent bailout.
       if @converge
         return fSum2
       else
         return 0
       endif
     else  ; divergent bailout
       if @diverge
         return fSum * @divergeScale
       else
         return 0
       endif
     endif
   endfunc
 
 private:
   float fSum
   float fSum2
   complex fZOld
 
 default:
   title = "Exponential Smoothing"
   helpfile = "Uf*.chm"
   helptopic = "Html/coloring/standard/exponentialsmoothing.html"
   rating = recommended
   param diverge
     caption = "Color Divergent"
     default = false
     hint = "If checked, points which escape to infinity will be \
             colored."
   endparam
   param converge
     caption = "Color Convergent"
     default = true
     hint = "If checked, points which collapse to one value will be \
             colored."
   endparam
   param divergescale
     caption = "Divergent Density"
     default = 1.0
     exponential = true
     hint = "Sets the divergent coloring density, relative to the \
             convergent coloring. If set to 1.0, they will use \
              the same color density."
   endparam
 }
 


Constructor Summary
Standard_ExponentialSmoothing()
           
 
Method Summary
 void Init(complex pz, complex ppixel)
          Set up for a sequence of values
 void Iterate(complex pz)
          Process the next value in the sequence
 float ResultIndex(complex pz)
          Produce a resulting color index after a sequence is finished
 
Methods inherited from class common:GradientColoring
IsGradient, IsSolid, Result
 
Methods inherited from class common:Coloring
GetPixel
 
Methods inherited from class common:Generic
GetParent
 
Methods inherited from class Object
 

Constructor Detail

Standard_ExponentialSmoothing

public Standard_ExponentialSmoothing()
Method Detail

Init

public void Init(complex pz,
                 complex ppixel)
Description copied from class: GradientColoring
Set up for a sequence of values

This function will be called at the beginning of each sequence of values (e.g. at the beginning of each fractal orbit).

Overrides:
Init in class GradientColoring
Parameters:
pz - first value for the sequence; for a normal coloring formula, this will be #z
ppixel - seed value for the sequence; for a normal coloring formula, this will be #pixel

Iterate

public void Iterate(complex pz)
Description copied from class: GradientColoring
Process the next value in the sequence

As long as the sequence has not bailed out, this function will be continually called to produce sequence values. Note that such processing generally will not know in advance precisely how long the sequence is, and should be prepared to deal with sequences of arbitrary length.

Your coloring may determine at some point that a solid color should be used rather than an index value.

Overrides:
Iterate in class GradientColoring
Parameters:
pz - next value in the sequence; corresponds to #z in a coloring formula

ResultIndex

public float ResultIndex(complex pz)
Description copied from class: GradientColoring
Produce a resulting color index after a sequence is finished

This corresponds to the final: section in a coloring formula. Once it is called, no further calls to Iterate() should be made without calling Init() first.

Overrides:
ResultIndex in class GradientColoring
Returns:
the gradient index (corresponding to #index in a coloring formula)