Agir sur le système de coordonnées
PyProcessing propose 3 fonctions très importantes (mais relativement complexes à prendre en main) :
la fonction translate() qui permet de translater les axes de coordonnées.
la fonction rotate() qui permet de faire faire une rotation aux axes de coordonnées.
la fonction scale() qui permet de modifier l'échelle.
Il faut bien que vous compreniez que ces fonctions agissent sur le système de coordonnées et pas directement sur les dessins.
La fonction rotate()
Commençons par la fonction rotate() qui permet de tourner le système de coordonnées d'un certain angle. Cette fonction prend un seul paramètre : l'angle de rotation (en radian, la fonction radians() permet de convertir les degrés en radian).
Appliquons la fonction rotate() :
rotate(alpha)
Exemple :
Saisissez et testez ce code
def setup():
size(200,200)
background(255,255,255)
fill(255,255,0)
rotate(radians(20))
rect(60,50,20,20)
def draw():
pass
Complément : Quelques explications :
Attention :
Saisissez et testez ce code
def setup():
size(200,200)
background(255,255,255)
fill(255,255,0)
rect(60,50,20,20)
rotate(radians(20))
def draw():
pass
Comme vous pouvez le constater, le rotate() n'a aucune action sur un élément déjà dessiné au moment de son application.
La fonction translate()
Exemple :
Saisissez et testez ce code
def setup():
size(200,200)
background(255,255,255)
fill(255,255,0)
rect(60,50,20,20)
translate(80,30)
rect(60,50,20,20)
def draw():
pass
Mise à l'échelle avec scale()
Si vous avez compris le fonctionnement de la translation et de la rotation, la fonction scale() ne devrait pas vous poser de difficultés.
Saisissez et testez ce code
def setup():
size(200,200)
background(255,255,255)
fill(255,255,0)
rect(60,50,20,20)
scale(2)
rect(60,50,20,20)
def draw():
pass
scale() est l'équivalent d'un zoom (ou d'une loupe) si son argument est supérieur à un. Je vous laisse deviner l'effet d'un argument compris entre 0 et 1.
A vous de jouer
push et pop
La fonction pushMatrix() permet d'effectuer une sauvegarde de l'état du système de coordonnées au moment où cette fonction est exécutée. popMatrix() restaure cette sauvegarde.
Saisissez et testez ce code :
def setup():
size(200,200)
background(255,255,255)
translate(80,30)
fill(255,0,0)
rect(60,50,20,20)
pushMatrix()
translate(0,50)
fill(0,255,0)
rect(60,50,20,20)
popMatrix()
fill(0,0,255)
rect(80,50,20,20)
def draw():
pass
Complément : Quelques explications
Comme vous devez le constater le carré bleu n'a pas bénéficié de la même translation vers le bas que le carré vert. Le popMatrix() a en effet annulé cette translation vers le bas : toutes les transformations comprises entre un pushMatrix() et un popMatrix() sont annulées au moment du popMatrix().