Documentation
Formes
Le canvas est une grille de pixels.
Le système de coordonnées
// (0,0) ──────────────→ x
// │
// │ · (300, 200)
// │
// ↓ y
// (width, height)
width et height
p5 met à disposition deux variables qui contiennent les dimensions du canvas.
function setup() {
createCanvas(600, 400);
}
function draw() {
background(240);
circle(width / 2, height / 2, 100); // toujours centré
}
Les formes de base
point(x, y)un pixelline(x1, y1, x2, y2)segment entre deux pointscircle(x, y, d)cercle ; centre + diamètreellipse(x, y, w, h)ellipse ; centre + largeur et hauteursquare(x, y, c)carré ; coin supérieur gauche + côtérect(x, y, w, h)rectangle ; coin supérieur gauche + dimensionstriangle(x1, y1, x2, y2, x3, y3)triangle ; trois sommetsarc(x, y, w, h, start, fin)portion d'ellipse ; angles en radiansAttention aux points d'ancrage !
Changer le point d'ancrage
rectMode(CENTER); // rect() se positionne par son centre
rectMode(CORNER); // valeur par défaut
ellipseMode(CORNER); // ellipse() se positionne par son coin
ellipseMode(CENTER); // valeur par défaut
Coins arrondis
rect(100, 100, 200, 100, 20); // même rayon aux 4 coins
rect(100, 100, 200, 100, 20, 0, 20, 0); // haut-gauche, haut-droit, bas-droit, bas-gauche
L'ordre de dessin
Le code s'exécute ligne par ligne, de haut en bas. Chaque forme se dessine par-dessus les précédentes. Il n'y a pas de calques ou de z-index.
background(240);
fill(255, 0, 0);
circle(200, 200, 200); // dessiné en premier
fill(0, 0, 255);
circle(200, 200, 100); // dessiné après (dessus)
Formes libres
Pour dessiner un polygone, on décrit chaque sommets avec `vertex(x, y)` entre beginShape() et endShape().
beginShape();
vertex(100, 100);
vertex(300, 150);
vertex(250, 350);
vertex(120, 280);
endShape(CLOSE); // CLOSE referme la forme sur le premier point
Déplacer et tourner le repère
Plutôt que de recalculer les coordonnées de chaque point, on peut déplacer le repère lui-même.
push(); // sauvegarde l'état actuel
translate(width/2, height/2); // l'origine (0,0) se déplace ici
rect(0, 0, 100, 100); // dessiné au centre
rotate(PI / 4); // rotation autour de la nouvelle origine
rect(0, 0, 100, 100); // dessiné à 45°
pop(); // restaure l'état sauvegardé
rect(0, 0, 100, 100);
translate(x, y)déplace l'originerotate(angle)tourne le repère ; angle en radiansscale(n)agrandit ou réduitpush()mémorise l'état (repère + styles)pop()revient à l'état mémoriséLes angles sont en radians par défaut : un tour complet vaut TWO_PI ou 2 * PI. Pour passer en degrés :
angleMode(DEGREES); // dans setup()
rotate(45); // désormais en degrés
// ou ponctuellement
rotate(radians(45));