Ligne horizontales avec perturbation grâce à cos()

Un script de dessin, avec PDF et police intégrée, pour préparer un dessin à la traceuse.

Précédent | 3/27 | Suivant

Ce dessin utilise cos(), qui va permettre de passer graduellement une variable de 0 à 1 puis de nouveau à 0.
Cos() est utilisé deux fois, une fois sur l’axe horizontal et une fois sur l’axe vertical.
La multiplication d’un chiffre aléatoire par ces deux chiffres permet de perturber le dessin de lignes horizontales, formant un dessin de cercle.

Voici le code commenté :

// double perturbation de lignes horizontales
import processing.pdf.*;
PFont myFont;

// variable du dessin
// nombre de points en largeur,
// nombre de lignes horizontales
//  marges
// largeur du champ du dessin
// largeur du champ du dessin

int nb_x=40;
int nb_y=60;
int marge=40;
int ww=595;
int hh=595;

// la date
String date=day()+"-"+month()+"-"+year();

void setup() {
 size(595, 842);
 background(255);

 beginRecord(PDF, "dessin_"+date+".pdf");
 stroke(0);
 noFill();

 // il faut charger la police après avoir démarré l'enregistrement du PDF
 myFont = createFont("Static.otf", 32);
 textFont(myFont);
 textAlign(CENTER, CENTER);
}

void draw() {


 // calcul de la répartition des intervalles des points horizontaux
 float slu=(ww -(marge*2))/nb_x;

 // calcul des intervalles de lignes verticales
 float shu=(hh-(marge*2))/nb_y;

 // cos() va servir pour faire augmenter les perturbation puis les réduire
 // en passant de 0 à 1
 // ici en vertical

 // angle de départ pour les perturbations verticales
 float av=0;
 // calculer l'évolution de l'angle sur la base du nombre de lignes
 float sav=PI/nb_y;

 for (float y=marge; y<hh-marge; y+=shu) {

   // même chose pour les perturbation horizontales horizontal
   float ah=0;
   float sah=PI/nb_x;

   beginShape();
   curveVertex(marge, y);
   for (float x=marge; x<ww-marge; x+=slu) {
     curveVertex(x, y+(sin(ah)*sin(av)*random(shu)));
     ah+=sah; // augmenter l'angle à chaque boucle
   }
   curveVertex(ww-marge, y);
   endShape();

   av+=sav; // augmenter l'angle à chaque boucle
 }

 fill(0);
 textSize(20);
 text("60 lignes, sin(0) - sin(0)", width/2, height*0.85);

 textSize(12);
 text("Stéphane Noël, "+date, width/2, height*0.90);

 saveFrame();
 endRecord();
 noLoop();
}