"""Ce fichier permet de dessiner des formes à l'aide des fonctions suivantes + triangle_equilateral(cote, info_feutre, coordonnees) + arc_de_cercle(rayon, angle, info_feutre, coordonnees) Exemples d'utilisation : >>> informations_feutre = {'écriture':'blue', 'fond':'#FF88FF', 'épaisseur':5} >>> triangle_equilateral(50, informations_feutre, (50,100)) >>> arc_de_cercle(75, 360, informations_feutre, (200,-200)) """ # Importation import turtle as trt import random as rd # Déclaration des fonctions privées def nouveau_stylo(ecriture, fond, largeur): """Renvoie la référence d'un stylo configuré :: param ecriture(str) :: la couleur d'écriture ('red', '#FF0000') :: param fond(str) :: la couleur de fond pour ce stylo :: param largeur(int) :: la largeur du trait :: return (Turtle) :: renvoie un objet de la classe Turtle """ feutre = trt.Turtle() feutre.color(ecriture) feutre.fillcolor(fond) feutre.pensize(largeur) feutre.speed(0) return feutre def deplacer(feutre, x, y): """Lève le feutre, déplace le feutre et abaisse le feutre :: param feutre(Turtle) :: la référence de l'objet Turtle :: param x(int) :: coordonnée horizontale (abscisse) :: param y(int) :: coordonnée verticale (ordonnée) :: return (None) :: c'est une fonction sans retour .. effet de bord :: modifie l'état de feutre """ feutre.penup() # On lève la pointe feutre.goto(x, y) # On déplace le crayon feutre.pendown() # On abaisse la pointe def trace_triangle_equilateral(feutre, cote): """Trace un triangle (equilatéral) à l'aide du crayon feutre :: param feutre(Turtle) :: la référence de l'objet Turtle :: param cote(int) :: la valeur en pixel des côtés :: return (None) :: fonction sans retour .. effet de bord :: modifie l'état de feutre """ feutre.begin_fill() for x in range(3): feutre.forward(cote) feutre.left(120) feutre.end_fill() feutre.hideturtle() def trace_arc(feutre, rayon, angle): """Trace un arc de cercle à l'aide du crayon feutre :: param feutre(Turtle) :: la référence de l'objet Turtle :: param rayon(int) :: la valeur en pixel du rayon :: param angle(int) :: l'angle à tracer (360 pour un cercle) :: return (None) :: fonction sans retour .. effet de bord :: modifie l'état de feutre """ feutre.begin_fill() feutre.circle(rayon, angle) feutre.end_fill() feutre.hideturtle() def trace_rec(feutre, rayon, angle): """Trace un arc de cercle à l'aide du crayon feutre :: param feutre(Turtle) :: la référence de l'objet Turtle :: param rayon(int) :: la valeur en pixel du rayon :: param angle(int) :: l'angle à tracer (360 pour un cercle) :: return (None) :: fonction sans retour .. effet de bord :: modifie l'état de feutre """ feutre.begin_fill() feutre.circle(rayon, angle) feutre.end_fill() feutre.hideturtle() # Déclarations des fonctions publiques def triangle_equilateral(cote, info_feutre, coordonnees): """Trace un triangle (equilatéral) à partir des info_feutre et aux bonnees coordonnées :: param cote(int) :: la valeur en pixel des côtés :: param info_feutre(dict) :: un dictionnaire {"écriture":str, "fond":str, "épaisseur":int} :: param coordonnees(tuple (int,int) ) :: un tuple (x,y) """ ecriture = info_feutre['écriture'] fond = info_feutre['fond'] epaisseur = info_feutre['épaisseur'] x = coordonnees[0] # ou x,y = coordonnees (par désempaquetage) y = coordonnees[1] feutre = nouveau_stylo(ecriture, fond, epaisseur) deplacer(feutre, x, y) trace_triangle_equilateral(feutre, cote) return feutre def arc_de_cercle(rayon, angle, info_feutre, coordonnees): """Trace un arc de cercle à partir des info_feutre et aux bonnees coordonnées :: param rayon(int) :: la valeur en pixel du rayon :: param angle(int) :: la valeur en ° de l'angle :: param info_feutre(dict) :: un dictionnaire {"écriture":str, "fond":str, "épaisseur":int} :: param coordonnees(tuple (int,int) ) :: un tuple (x,y) """ ecriture = info_feutre['écriture'] fond = info_feutre['fond'] epaisseur = info_feutre['épaisseur'] x = coordonnees[0] # ou x,y = coordonnees (par désempaquetage) y = coordonnees[1] feutre = nouveau_stylo(ecriture, fond, epaisseur) deplacer(feutre, x, y) trace_arc(feutre, rayon, angle) return feutre # def rectangle(long1,long2,info_feutre,coorodonnees): # """Trace un rectangle à partir des info_feutre et aux bonnes coordonnées # # :: param long1(int) # :: param long2(int) # :: param info_feutre(dict) # :: param coordonnees(tuple(int,int)) # # """ # ecriture = info_feutre['écriture'] # fond = info_feutre['fond'] # epaisseur = info_feutre['épaisseur'] # x = coordonnees[0] # y = coordonnees[1] # # feutre = nouveau_stylo(ecriture, fond, epaisseur) # deplacer(feutre,x,y) def rectangle(long1, long2, info_feutre, coordonnees): """Trace un rectangle à partir des info_feutre et aux bonnes coordonnées :: param long1(int) : Longueur du rectangle :: param long2(int) : Largeur du rectangle :: param info_feutre(dict) : Informations sur le stylo pour le dessin :: param coordonnees(tuple(int,int)) : Coordonnées du coin supérieur gauche du rectangle """ ecriture = info_feutre['écriture'] fond = info_feutre['fond'] epaisseur = info_feutre['épaisseur'] x = coordonnees[0] y = coordonnees[1] # Créer le stylo avec les caractéristiques spécifiées feutre = nouveau_stylo(ecriture, fond, epaisseur) # Déplacer le stylo aux coordonnées de départ deplacer(feutre, x, y) # Dessiner le rectangle feutre.begin_fill() for _ in range(2): feutre.forward(long1) feutre.left(90) feutre.forward(long2) feutre.left(90) feutre.end_fill() feutre.hideturtle() def rectangle_arrondi(long1, long2, info_feutre, coordonnees): """Trace un rectangle à partir des info_feutre et aux bonnes coordonnées :: param long1(int) : Longueur du rectangle :: param long2(int) : Largeur du rectangle :: param info_feutre(dict) : Informations sur le stylo pour le dessin :: param coordonnees(tuple(int,int)) : Coordonnées du coin supérieur gauche du rectangle """ ecriture = info_feutre['écriture'] fond = info_feutre['fond'] epaisseur = info_feutre['épaisseur'] x = coordonnees[0] y = coordonnees[1] # Créer le stylo avec les caractéristiques spécifiées feutre = nouveau_stylo(ecriture, fond, epaisseur) # Déplacer le stylo aux coordonnées de départ deplacer(feutre, x, y) # Dessiner le rectangle feutre.begin_fill() for _ in range(2): feutre.forward(long1) feutre.circle(long2/2,180) feutre.end_fill() feutre.hideturtle() # Instructions du programme principal if __name__ == '__main__': informations_feutre = {'écriture':"blue", 'fond':'#FF88FF', 'épaisseur':5} triangle_equilateral(50, informations_feutre, (50,100)) arc_de_cercle(75, 360, informations_feutre, (200,-200)) rectangle_arrondi(200, 100, informations_feutre, (-200,-200)) rectangle(200, 100, informations_feutre, (-200,-100))