Week 09 :: Recursion and Form

<< back to Procedural Morphology homepage

Class notes

Concept of Recursion


void setup() {
  size(200, 200);
void draw() {
  drawCircle(126, 170, 6);
void drawCircle(int x, int radius, int level) {
  float tt = 126 * level/4.0;
  ellipse(x, 100, radius*2, radius*2);
  if (level > 1) {
    level = level - 1;
    drawCircle(x - radius/2, radius/2, level);
    drawCircle(x + radius/2, radius/2, level);


myObj[] objs = new myObj[1000];
int objCount = 1;
int endCount;

void setup() {
   size (500,300);
   for (int i=0; i<objCount; i++) {
      objs[i] = new myObj(30, 150, 1);

void draw() {
   endCount = objCount;
   for (int i=0; i<endCount; i++) {

class myObj {
   // fields...
   float x, x1, x2;
   float y, y1, y2;
   float s;
   boolean dead = false;

   // constructor...
   myObj(float _x, float _y, float _s) {
   x = _x;
   y = _y;
   s = _s;
   x1 = random(20,30);
   y1 = random(10,15);
   x2 = random(20,30);
   y2 = random(-10,-15);

   // methods...
   void update() {
      if (!dead) {
         dead = true;

   void drawMe() {

      vertex(x1, y1);
      vertex(0, 0);
      vertex(x2, y2);


   // here the object creates more copies of the same object.

   void begetMe() {
      if (objCount < 444) {
         objs[objCount-1] = new myObj(x+s*x1, y+s*y1, s*random(0.7,1.3));
         objs[objCount-1] = new myObj(x+s*x2, y+s*y2, s*random(0.7,1.3));




Fractals in processing

Daniel Shiffman's examples on using recursion to create fractal shapes in processing.




Mandelbrot set in processing


Thorsten Fleisch

Particularly his film gestalt


Julia Sets

Theory of Quaterion Fractals from Chaos Pro documentation
Quaternion Julia Fractals

Julia Sets implemented in processing


Buddhabrot Set

j.tarbell's implementation



Iterated function system


Eric Green's Computer Science Thesis has some very understandable algorithms for IFS

Iterated Function Systems (a.k.a. Multiple Reduction Copy Machine Algorithms -- MRCMs)

Chaos and Randomness to Generate IFS


Paule Bourke explains how the IFS system can create the types of images below


Scott Draves

electric sheep screen saver


Dave Bollinger's IFS renders

Black and White



Diffusion limited aggregation



wiki entry on Diffusion-limited_aggregation

Diffusion-Limited Aggregation and its Simulation

Diffusion limited aggregation in processing source sample



Andy Lomas

Once a Mathematician, Always an Artist


Lindenmayer system (L-Systems)

wiki entry on L-systems

Algorithmic Botany, University of Calgary



Geraldine Sarmiento's L-Systems in Processing


L-Systems from Marc Fornes


Michael Hansmeyer

Voronoi Systems

Voronoi Description, java source code and applet
Mesh library for voronoi in processing
Brute force version in processing

Flight 404's Voronoi Experiments



Voronoi Morphologies by Andrew Kudless


Voronoi Shelf by Marc Newson


Voromuro project by officeDa

Voromuro project write up on form_ula

flickr set


Assignment for next week.

Work on your final sketch from Part 3 of the class.