A la ferme du code heureux, des codes, des programmes, broutent en champ libre.
Straight Lines in Four Directions and All Their Possible Combinations
Ou comment dessiner du Sol LeWitt avec Processing


// Ce sketch Processing montre comment reproduire la gravure de Sol LeWitt 
// Straight Lines in Four Directions & All Their Possible Combinations, Plate #16
// http://www.sollewittprints.org/lewitt-raisonne-1973-05

// (cc) guillaume stagnaro
// atelier hypermedia
// http://www.ecole-art-aix.fr/hypermedia
// http://www.happycodefarm.net


int noir = 1; // masque binaire de la ligne horizontal = 0b00000001
int jaune = 2; // masque binaire de la ligne vertical = 0b00000010
int rouge = 4; // masque binaire de la ligne diagonal montant = 0b00000100
int bleu = 8; // masque binaire de la ligne diagonal descendant = 0b00001000

float marge; // marge entre les carrés
float taille; // taille d'un carré
float demiTaille; // moitié de la taille

// une liste de toutes les conbinaisons
int diagramme[]= {
noir, jaune, rouge, bleu, noir+jaune, noir+rouge, noir+bleu, jaune+rouge, jaune+bleu, rouge+bleu, noir+jaune+rouge, noir+jaune+bleu, noir+rouge+bleu, jaune+rouge+bleu, noir+jaune+rouge+bleu
};

void setup() {
size(666, 666); // taille de la fenetre.
strokeWeight(1.5);

marge = 10;
taille = (width-(marge*5))/4; // on calcul la taille d'un carré en fonction de la taille de la fenetre
demiTaille = taille/2;
}

void draw() {
background(200); // fond de la fenetre.

// dessin de chacune des combinaisons présentes dans la liste
for (int i = 0; i<15; i++) {
dessineDiagramme(diagramme[i], i);
}
fill(33);
text("D'après Sol LeWitt.nnStraight lines in four directions and all their possible combinations.", (3*(taille+marge)+marge), (3*(taille+marge)+marge), taille, taille);
}

void dessineDiagramme(int map, int index) {
noFill();
pushMatrix();
int colone = index%4;
int ligne = floo(index/4);
translate((colone*(taille+marge)+marge), (ligne*(taille+marge)+marge)); // on place notre stylo en fonction des arguments ligne et colone de la fonction

// maintenant on utilise du calcul binaire pour decider quelles lignes dessiner.
// pour cela on compare l'argument 'map' de la fonction avec les masques binnaire de chacun des 4 type de lignes a dessiner.
if ((noir & map)==noir) { // ligne horizontale
stroke(0, 0, 0);
line(0, demiTaille, taille, demiTaille);
}

if ((jaune & map)==jaune) { // ligne verticale
stroke(255, 255, 0);
line(demiTaille, 0, demiTaille, taille);
}

if ((rouge & map)==rouge) { // ligne diagonale montante
stroke(255, 0, 0);
line(0, taille, taille, 0);
}
if ((bleu & map)==bleu) { // ligne digonale descendante
stroke(0, 0, 255);
line(0, 0, taille, taille);
}
stroke(0, 0, 0);
rect(0, 0, 154, 154); // dessin du cadre noir

popMatrix();
}


Your browser does not support the canvas tag.