Algorithms   

Plasma Fractals

The generation of plasma fractals is discussed in the Types of Fractals section. Basically, the description you can find there is implemented in the algorithm below. The fractal is stored entirely in a 2-dimensional array and then the points from the array are plotted on the screen.

Constants used:

number_of_colors: number of colors available in the computer language you’re using
size: size of the fractal; must be a power of 2
roughness: higher values make the fractal more fragmented

‘ randomly choose the rectangle’s corners
array(0, 0) = RND * number_of_colors
array(size, 0) = RND * number_of_colors
array(0, size) = RND * number_of_colors
array(size, size) = RND * number_of_colors
‘ go through the array, decreasing the interval size every time
FOR p = LOG(size) / LOG(2) TO 0 STEP -1
  FOR x = 0 TO size STEP 2 ^ p
     FOR y = 0 TO size STEP 2 ^ p
        IF x MOD 2 ^ (p + 1) = 0 AND y MOD 2 ^ (p + 1) = 0 GOTO nxt
        IF x MOD 2 ^ (p + 1) = 0 THEN
          average = (array(x, y + 2 ^ p) + array(x, y - 2 ^ p)) / 2
          color = average + roughness * (RND - .5)
          array(x, y) = color: GOTO nxt
        END IF
        IF y MOD 2 ^ (p + 1) = 0 THEN
          average = (array(x + 2 ^ p, y) + array(x - 2 ^ p, y)) / 2
          color = average + roughness * (RND - .5)
          array(x, y) = color: GOTO nxt
        END IF
        IF x MOD 2 ^ (p + 1) > 0 AND y MOD 2 ^ (p + 1) > 0 THEN
          v1 = array(x + 2 ^ p, y + 2 ^ p)
          v2 = array(x + 2 ^ p, x - 2 ^ p)
          v3 = array(x - 2 ^ p, x + 2 ^ p)
          v4 = array(x - 2 ^ p, y - 2 ^ p)
          average = (v1 + v2 + v3 + v4) / 4
          color = average + roughness * (RND - .5)
          array(x, y) = color: GOTO nxt
        END IF
        nxt:
    NEXT y
  NEXT x
NEXT p
‘ go through the array, plotting the points
FOR x = 0 TO size
      FOR y = 0 TO size
           PSET (x, y), array(x, y)
      NEXT y
NEXT x

forward

forward