Dessin inspiré par le tableau de Sol Lewitt, Untitled 2001.

/* Dessin inspiré par le tableau de Sol Lewitt, Untitled 2001
 * http://www.artlex.com/ArtLex/kl/images/linocut_lewit.lg.jpg
 *
 * Lou Feraud, Cassandre Poirier, Douglas Edric Stanley
 * (cc) 2009 Creative Commons BY-SA 2.0 Some Rights Reserved
 */

// créer une liste des couleurs qui seront utilisées dans le dessin
int[] couleurs={
  240,0,55,130,20,200};

// utilisé pour ne pas répéter deux fois la même couleur
int derniereCouleur=-1;

// taille du sketch
size(500,500);

// commencer au milieu
translate(250,250);

// couleur de fond
background(245);

// effet soyeux
smooth();

// utiliser le mode teinte/saturation/luminosité
// http://fr.wikipedia.org/wiki/Teinte_saturation_lumi%C3%A8re
colorMode(HSB,360,100,100);

// pas de traits
noStroke();

// une variable qui sera utilisée pour décaler chaque tranche d'un angle aléatoire
float decalage=20.0;
// la longeur des tranches
float rayon=200.0;

// une boucle pour créer toutes les tranches en rond
for(float a=0.0; a<360.0; a+=decalage){

  // un tout petit peu de bordel pour les longeurs des tranches (cf. Lewitt)
  rayon=random(200,220);

  // choisir un nouveau angle de décalage
  decalage=int(random(3,20));

  // se décaler pour la première moitié de ce décalage
  rotate(radians(decalage/2));

  // calculer les côtés du triangle en fonction de l'angle et du rayon
  float x = cos(radians(decalage/2))*rayon;
  float y = sin(radians(decalage/2))*rayon;

  // choisir une nouvelle couleur qui ne sera jamais pareille que la dernière couleur utilisée
  int quelleCouleur=derniereCouleur;
  while(quelleCouleur==derniereCouleur){      // boucler tant que la nouvelle couleur est identique à la dernière
    quelleCouleur= int(random(couleurs.length)); // choisir une nouvelle valeur
  }
  derniereCouleur=quelleCouleur; // se souvenir de cette couleur pour la prochaine tranche
  int cetteCouleur=couleurs[quelleCouleur]; // extraire de la liste des couleur, la teinte

  // utiliser (enfin) la couleur
  fill(cetteCouleur,100,85);

  // commencer une forme (un triangle)
  beginShape();
  vertex(0,0);
  vertex(x,-y);
  vertex(x,y);
  endShape(CLOSE);

  // se décaler pour la deuxième moitié de ce décalage
  rotate(radians(decalage/2));

}