Mathematically, an IFS is defined by a finite set of functions on a space
ie
.
These functions (typically between two and five) define a subset
by the following recursive set equation:
P is the recursive picture. But given the functions, how
can one solve the equation and produce the picture?
Note that if then
, thus if we have some of P, then we can get more of P. And not just one more
point: so too are
etc in P. To get
all of P we must consider every possible string
of applications. Thus the IFS algorithm
draw point x pick random i x = f[i](x) repeatworks because a string of random digits will, in the limit, include every possible sequence of digits as a subsequence.
But how do we get the first point in P? As long as the functions are contractive, then the above algorithm will work given any x because P is an attractor. You only have to throw out the initial dozen or so iterations while x settles into the fractal.
furthermore, this gives us more than just membership in the set, it gives density: how likely are we to see the point (or one very near it) as the algorithm runs?
a monochrome histogram viewed with a colormap works ok (bomb uses this), but it's possible to do better.
add another dimension to the IFS, and map this value. This coordinate is independent of the others, and its functions are very simple: the first function of the set averages the color value with zero, the other functions average it with one. The colormap value of a point is then simply the base-two interpretation of the string of function choices made by the IFS algorithm, a number between zero and one (the most recent digit has most significance). libifs.c:98
The advantage of this scheme is that the coloring is structural. The disadvantage is that the histogram must now be three channels (RGB) instead of one. Note that the log only applies to intensity, so the RGB values are transformed into YUV coordinates, and the log is applied to Y only.
an alpha channel has also been implemented.