unitsize(1cm); import math; add(grid(4,4,gray)); // Une grille de 4 sur 4 dot("$O$",(0,0),SE,green); // On place l'origine du repère. pair A=(1,1); // On définit le centre d'un octogone, real r=2; // le rayon de son cercle circonscrit... draw(shift(A)*rotate(22.5)*scale(r)*polygon(8)); // ... et on le trace. /* Quelques explications : polygon(8) : octogone inscrit dans le cercle trigonométrique scale(r) : agrandissement de rapport r=2 rotate(22.5) : rotation de centre O, d'angle 22,5° shift(A) : translation de vecteur vec(OA) */ pen p1=fontsize(12pt)+1bp+red; // Deux stylos différents pen p2=fontsize(9pt)+blue; // pour écrire les étiquettes. label("N",A+r*N,N,p1); // A+r*N désigne le point (1,1)+2*(0,1)=(1,3) label("E",A+r*E,E,p1); label("S",A+r*S,S,p1); // A+r*S désigne le point (1,1)+2*(0,-1)=(1,-1) label("W",A+r*W,W,p1); label(rotate(45)*"NE",A+r*NE,NE,p2); label(rotate(-45)*"NW",A+r*NW,NW,p2); label(rotate(45)*"SW",A+r*SW,SW,p2); label(rotate(-45)*"SE",A+r*SE,SE,p2); // Ajout d'un cadre, distant des bords de l'image de 5mm shipout(bbox(5mm,gray));