size(7cm,0); // Définition de deux points de EnsA (qui seront utiles ensuite // pour placer les étiquettes des ensembles). pair pA1=(2,0), pA2=(3,2); // Définition d'une rotation et d'une translation utilisées // pour construire les ensembles EnsB, EnsC et EnsD à partir de EnsA transform r=rotate(50),t=shift(-2,-2); // Définition du chemin définissant l'ensemble EnsA, passant par le point pA path EnsA=(0,0)..pA1..(3,1)..pA2..cycle; // Définition des autres ensembles comme images de EnsA par r, ror et t. path EnsB=r*EnsA; path EnsC=r^2*EnsA; path EnsD=t*EnsA; // et des points où placer les étiquettes. pair pA=pA1, pB=r*pA2, pC=r^2*pA2, pD=t*pA1; // On trace les ensembles, dans la même couleur. // On pourra dans un prochain exemple faire des couleurs distinctes. filldraw(EnsA^^EnsB^^EnsC^^EnsD,paleblue+white,1bp+blue); // On définit le chemin définissant la réunion de EnsA et EnsD. // ... et on trace l'ensemble. path AuD=buildcycle(EnsA,EnsD); // (comprendre buildcycle) filldraw(AuD,palegreen+opacity(.7),1bp+green); // On conclut en plaçant les étiquettes. // Plusieurs enveloppes possibles : box, roundbox, ellipse. draw("$A$",e=roundbox,xmargin=.1cm,pA,p=1bp+red,FillDraw(palered)); draw("$B$",e=ellipse,xmargin=.1cm,pB,p=1bp+blue,FillDraw(paleblue)); draw("$C$",e=ellipse,xmargin=.1cm,pC,p=1bp+blue,FillDraw(paleblue)); draw("$D$",e=roundbox,xmargin=.1cm,pD,p=1bp+red,FillDraw(palered)); draw("$A\cup D$",(2,-2),e=box,xmargin=.1cm, p=1bp+green, FillDraw(palegreen+opacity(.7))); shipout(bbox(5mm,white));