Skip to content

Latest commit

 

History

History
192 lines (145 loc) · 6.35 KB

Cours_n3_2018_11_05.md

File metadata and controls

192 lines (145 loc) · 6.35 KB

Creative coding avec p5.js : (cours #3) 05/11/2018

Objectifs de la séance :

  • Voir quelques exemples de creative coding et pratiques similaires
  • Retour sur l'exercice donné à la séance précédente
  • La fonction random() (p5.js)
  • Les tableaux, ou "arrays" en anglais (JavaScript)

Exemple de creative coding / design generatif

The Spite (aka Jaume Sanchez Elias)

The Spite est un développeur web qui participe activement à l'amélioration de certains outils open source pour faire la 3D dans le navigateur (en WebGL).
https://twitter.com/thespite
https://www.clicktorelease.com/code/polygon-shredder/

----------------------- Let's code ---------------------------

Retour sur l'exercice donné à la séance précédente

Solution envisageable :

(décommenter les parties du codes pour voir des effets supplémentaires)

let t;  // variable qui sert de compteur (t pour time)

let x1, x2, x3, x4;
let y1, y2, y3, y4;

let rndmRange;  // variable qui définie l'espace où les carrés apparaîssent

let rndmRedValue;
let rndmGreenValue;
let rndmBlueValue;

let diametreCercle;

let backgroundColor;

function setup() {
    createCanvas(windowWidth * 0.9, windowHeight * 0.9);
    noStroke();

    t = 0;

    x1 = random(0, width);
    y1 = random(0, height);

    //  x2 = random(0, width);
    //  y2 = random(0, height);

    //  x3 = random(0, width);
    //  y3 = random(0, height);

    //  x4 = random(0, width);
    //  y4 = random(0, height);

    rndmRange = random(30, 300);

    rndmRedValue = random(0, 127);
    rndmGreenValue = random(75, 200);
    rndmBlueValue = random(127, 255);

    diametreCercle = random(40, 170);

    // // Le code ci-dessous utilise un tableau (ou array), cf. cours #3
    //  backgroundColor = [
    //      random(0, 40),
    //      random(30, 70),
    //      random(60, 100)
    //  ];
}


function draw() {
    t += 0.01;
    background(0, 50, 60);
    //  background(backgroundColor[0], backgroundColor[1], backgroundColor[2]);

    let r = rndmRedValue;
    let g = rndmGreenValue;
    let b = rndmBlueValue;
    fill(r, g, b);

    x1 += random(-0.7 * t, 0.7 * t);
    y1 += random(-0.7 * t, 0.7 * t);
    ellipse(x1, y1, diametreCercle);
    //  ellipse(x2, y2, diametreCercle);
    //  ellipse(x3, y3, diametreCercle);
    //  ellipse(x4, y4, diametreCercle);

    for (let i = 0; i < t * 2; i++) {
        //  fill(random(20 + i * 20), random(i * 5), random(i * 10));
        let rndmRectX = random(width / 2 - rndmRange, width / 2 + rndmRange);
        let rndmRectY = random(height / 2 - rndmRange, height / 2 + rndmRange);

        rect(rndmRectX, rndmRectY, 25, 25);
    }
}

La fonction random()

La fonction random() de p5.js est très utile :
Elle permet de générer une nouvelle valeur aléatoire à chaque fois qu'elle s'execute.
En mettant deux arguments, on précise le minimum et le maximum de cette valeur aléatoire :

function setup() {
  createCanvas(400, 400);
  background(128);
  let x = random(0, width); // donne une valeur aléatoire entre 0 et width
  let y = random(0, height); // donne une valeur aléatoire entre 0 et height
  ellipse(x, y, 50, 50);
}
// Dessine un cercle à une position aléatoire dans le canvas.

Les tableaux

Un tableau (ou "array" en Anglais) est une collection de données. Il s'écrit grâce à des crochets [] .
On peut par exemple faire un tableau qui contient plusieurs variables :

// On déclare un tableau comme ci-dessous :
let monTableau = [5, 9, 15];

// Pour des questions de lisibilité, on peut très bien déclarer un tableau en le répartissant sur plusieurs lignes :
let monTableau = [
    1.61803398875,
    3.14159265359,
    6.28318530718
];

// Si besoin, on peut déclarer un tableau vide et le remplir plus tard :
let monTableauARemplir = [];

Pour accéder à une valeur dans un tableau, on écrit le nom du tableau suivi de crochets où figure l'index de la valeur : monTableau[index]
L'index est le chiffre qui donne la "position" d'une valeur dans le tableau.
La première valeur est à l'index 0, la deuxième à l'index 1, ensuite 2, 3 etc.
On doit donc compter à partir de 0 (ce qui est souvent le cas en programmation).

Exemple :

// On déclare un tableau avec 2 variables à l'intérieur
let monTableau = [20, 40];

// Ensuite on peut accéder à ces variables comme ceci :
console.log( monTableau[0] );    // ici on affichera la première variable du tableau.

// Ici on ajoute 3 à la première valeur du tableau :
monTableau[0] += 3;

// On peut assigner directement une valeur dans le tableau comme ceci :
monTableau[2] = 60;    // ici on assigne 60 à la troisième valeur du tableau

console.log( monTableau )    // ici on affiche le tableau entier : [23, 40, 60]

Utiliser une boucle for() pour parcourir un tableau

Il s'agit de quelque chose qu'on peut être amenés à faire très souvent quand on travaille avec une multitude d'objets auxquels on veut faire faire les même choses.
Pour parcourir un tableau avec une boucle for(), on utilise l'index qu'on incrémente à chaque itération de la boucle, comme ceci :

// On crée un tableau avec 4 variables
let monTableau = [10, 11, 12, 13];

// On utilise une boucle qui multiplie par 2 chaque élément du tableau
for (let i = 0 ; i < 4 ; i++) {
    monTableau[i] *= 2;
}

console.log( monTableau )   // On obtient [20, 22, 24, 26]

On peut aussi créer un tableau directement avec une boucle :

// On doit d'abord créer un tableau vide :
let monTableau = [];

// On crée une variable qui précise la taille du tableau (facultatif)
let tailleDeMonTableau = 6;

// On utilise une boucle qui assigne une nouvelle valeur à chaque index
for (let i = 0 ; i < tailleDeMonTableau ; i++) {
    monTableau[i] = i + 2;
}

console.log( monTableau )   // On obtient [2, 3, 4, 5, 6, 7]

Pratique :

  • Déclarer un tableau vide (nommé par exemple positionsX) en dehors des fonctions setup() et draw()
  • Déclarer une variable qui spécifie la taille du tableau (le nombre de valeurs qu'il y aura dans celui-ci)
  • Dans la fonction setup(), utiliser une boucle for() et la fonction random()pour assigner des valeur aléatoires (entre 0 et width par exemple) à celui-ci
  • Dans la fonciton draw(), utiliser une autre fonction for() pour dessiner des ellipses, en assignant chaque position x avec les valeurs du tableau précédemment créé