Comme tu peux le remarquer la rotation se fait par rapport à l'origine du graphique (0,0) et non au centre de l'objet. Pour cela il faut utiliser une macro nommée rotatedaround
Il existe également zscaled qui provoque à la fois une mise à l'échelle et une rotation. Il prend comme argument un couple de valeur (u,v).
\starttext \startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p ;
draw p zscaled (2,0.5);
draw p zscaled (0.5,0.5); \stopMPcode \stoptext
xsized, ysized et xysized
Ces trois commandes sont des macros MetaFun et ne font pas partie du langage MetaPost
Elles permettent de mettre le dessin à l'échelle mais en précisant la dimension du dessin en cm ou mm ou toutes autres unités reconnues. Il ne faut donc pas préciser les unités quand tu écris ton chemin. xsized et xsized prennent un seul argument qui respectivement donne taille du dessin en fonction de sa largeur (axe des x) ou de sa hauteur (axe des y) de ton dessin.xysized prend 1 ou une paire d'arguments, si tu n'en donne qu'un, la largeur et la hauteur auront la même taille.
\starttext \startMPcode
path p;
p:=(0,0) .. (3,2) -- (3,4) -- (0,4)..cycle;
draw p xsized 3cm;
draw p ysized 2cm shifted (4cm,0);
draw p xysized (3cm,2cm) shifted (8cm,0); \stopMPcode \stoptext
Miroir
Elle se fait à l'aide de la commande reflectedabout((x1,y1),(x2,y2)) qui prend comme argument deux couples de coordonnées qui représente l'axe autour duquel se fait la mise en miroir.
\starttext \startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p ;
draw p reflectedabout((4cm,0cm),(4cm,1cm)); \stopMPcode \stoptext
Je vais dessiner l'axe en rouge pour une meilleur compréhension :
Dans notre exemple x1 et x2 sont égaux (=4cm), l'axe de transformation est donc parallèle aux abscisses dans ce cas la valeur des y1 et y2 n'a pas d'importance, il faut juste qu'ils soient différents pour pouvoir dessiner un axe mais la longueur de cet axe n'a aucune importance pour la mise en miroir.
De la même facon si y1 et y2 sont égaux donc ton axe de transformation est parallèle aux ordonnées la valeur des x n'a aucune importance pourvus qu'ils soient différents.
Si tu dois mettre plusieurs options pour décrire ton chemin (path) comme un choix de couleur ou une épaisseur de trait la transformation doit être placée au début sous peine d'erreur de compilation.