Terraforming --------------- The Plasma Algorithm The plasma algorithm is relatively simple, and I'll try to explain it in psuedocode; to begin with, taking an arbitrary rectangle, _clear_ the entire thing (usually 0 is used to indicate an 'unset' pixel), put random colours at the four corners, and call plasma(x1,y1,x2,y2). Variables: float entropy = chaos component (0 = no chaos, infinity = static) Functions: colour(int x, int y) = colour of pixel at (x, y) average(int a, int b) = integer halfway between (a) and (b) averageColour (colour c1, colour c2) = colour halfway between (c1) and (c2) in each dimension of the colourspace used randomColour (float a) = additive value in each dimension of the colourspace used, in the range (dimensionSize * a) (if a is 0, returns zero in each dimension, if a is 1, returns completely random value in each dimension) plasma(int x1, int y1, int x2, int y2) { if rectangle (x1,y1) (x2,y2) is too small (no more pixels to set) return; if pixel (average(x1, x2), y1) isn't already set, set it to { if (entropy = 0) averageColour(colour(x1, y1), colour(x2, y1); else averageColour(colour(x1, y1), colour(x2, y1)) +/- randomColour ( 0.5 * ((x2 - x1) / (maxX - minX)) ^ (1 / entropy)); } (repeat for pixels at midpoint of each side, and a similar routine for the pixel in the middle) (call plasma() for each of the four quadrant sub-rectangles) } Using differend randomColour() and averageColour() routines, this can be implemented in an arbitrary colourspace, although a single dimension space is usually used because it doesn't give the multi-layered effect and many people enjoy rotating the palette on their plasma for 'animation'. This should be relatively direct to translate to C or the language of your choice (C++ or another OOL is nice because you can have a generic Colour class and use the same plasma routine in an arbitrary colourspace using a derived class). Hope it helps... -Sean Cier (scier@thor.tjhsst.edu) --------------------------------------------------------------------------- Other Related Links * GIS Home Page * Digital Relief Map Terraforming