Exemple 3 : un tracé aléatoire continu

Cette fonction permet de dessiner une ligne continue aléatoire, qui s’arrête en s’approchant du bord de page.

Précédent | 8/15 | Suivant

La boucle While()

Ce code utilise la boucle while(). While() est une boucle qui s’exécute un nombre indéfini de fois, en fonction de la condition qui se trouve àl’intérieur de ses parenthèses. Tant que le résultat du test des parenthèses est vrai, la boucle tourne.
Dans notre cas, on demande àchaque fois si x et y sont àl’intérieur des marges définies en tête du script. Si les coordonnées de x et y dépassent les marges d’un seul des côtés, la boucle s’arrête.
Lorsqu’on utilise while(), on fait bien attention que while sera faux àun moment ou un autre, sans quoi le script sera bloqué...

Sin et cos()

Sin et cos() sont utilisés pour produire les lignes. Les deux fonctions s’utilisent de la même manière : on leur donne un angle en radians (un chiffre entre 0 et deux fois la valeur de PI, soit 6,28 et des poussières) et la fonction répond par un chiffre qui va de -1 à1, qui exprime la tangente. Les coordonnées du bord d’un point sur le bord d’un cercle, donc.
Ce chiffre qui va de -1 à1 (sin() sur l’axe x, cos() sur l’axe y) peut ensuite être multiplié par la taille du déplacement (dans ce script, 5).

Voici le code :

int marges=60;

void setup() {
  size(800, 1000);
}

void draw() {
  background(255);

  stroke(180);
  dessin_aleatoire();

  saveFrame("couverture-####.jpg");
  noLoop();
}

void keyPressed() {
  loop();
}

void dessin_aleatoire() {
  int saut=5; // saute entre chaque ligne, en pixels
  float x=random(width*0.3, width*0.7); // point de départ en x
  float y=random(height*0.5, height*0.7); // point de départ en y

  // la boucle s'exécute tant que le dessin reste à l'intérieur des marges
  while (x > marges && x < width-marges && y > marges && marges < height-marges) {
    float angle=random(TWO_PI); // angle du prochain mouvement
    float nx=x+sin(angle)*saut; // calcul du déplacement en x avec sin()
    float ny=y+cos(angle)*saut; // calcul du déplacement en y avec cos()
    line(x, y, nx, ny); // ligne entre le point actuel et le nouveu
    x=nx; // on stocke la nouvelle valeur nx dans x
    y=ny; // on stocke la nouvelle valeur ny dans y
  }
}

Sur notre exercice, ça donne ça :