A la ferme du code heureux, des codes, des programmes, broutent en champ libre.
La chaine à Markov

Your browser does not support the canvas tag.





float x= 333;
float y = 167;
float scale = 10;
Character mkValues[] = {'N', 'S', 'E', 'W'};
int index = 0;

ArrayList<Character> mkChain; // un arraylist qui contient des Char

void setup() {
size(666, 333);
stroke(0, 127);

mkChain = new ArrayList<Character>();

for (int i = 0; i<1000; i++) { // on remplis la chaine aléatoirement de N,S,E,W
int v = int(random(4));
mkChain.add(mkValues[v]);
}
}


void draw() {
Character nextMkValue = mkChain.get(index); // valeur de l'element index de la chaine.

float lastX = x;
float lastY = y;

// gestion de la valeur actuelle de la chaine
switch(nextMkValue) {
case 'N':
y-=scale;
break;
case 'S':
y+=scale;
break;
case 'E':
x+=scale;
break;
case 'W':
x-=scale;
break;
}

// repositionement si hors limilte de la fenetre
if (x>width) {
x-=width;
lastX-=width;
}
if (x<0) {
x+=width;
lastX+=width;
}
if (y>height) {
y-=height;
lastY-=height;
}
if (y<0) {
y+=height;
lastY+=height;
}

// dessin du déplacement
line(lastX, lastY, x, y);

// incrementation de l'index de la chaine
index++;

// boucle si on arrive à la fin de la chaine
if (index >= mkChain.size()) index = 0;
}