Logo « Ami » avec l’AxiDraw
L’AxiDraw est une machine permettant de dessiner sur une feuilles avec un stylo selon un programme. En spé Nsi nous avons la possibilité de l’utiliser pour ce projet de fin première.
Introduction
J’ai décidé de reprendre un logo tiré du manga « 20th century boys », car j’aime beaucoup le design et il me semblait simple à recréer avec le code python pour l’AxiDraw.
Le début du travail
Nous avons appris comment utiliser l’AxiDraw avec nos professeurs pendant le cours, et donc la première chose à comprendre a été de coder ce dessin. C’est plutôt simple à comprendre, en effet l’AxiDraw marche seulement avec les coordonnés, on a des fonctions « segment » et « segments » fourni.
def segment(x_depart:int, y_depart:int, x_arrivee:int, y_arrivee:int): if not coord_in_cadre(x_depart,y_depart) or not coord_in_cadre(x_arrivee,y_arrivee): # raise ValueError("Dépassement du cadre imposé") global dessin_valide dessin_valide = False print("Segment ne pouvant être tracé") return if axi_connect and dessin_valide: ad.goto(x_depart * 8.267 / 793.7, y_depart * 8.267 / 793.7) ad.pendown() # Le stylo est baissé ad.lineto(x_arrivee * 8.267 / 793.7, y_arrivee * 8.267 / 793.7) ad.penup() # Le stylo est relevé en fin de tracé else: draw.line((x_depart, y_depart, x_arrivee, y_arrivee), fill = black) # Tracé du segment def segments(points:list): for i in range(len(points) - 1): if not coord_in_cadre(points[i][0],points[i][1]) or not coord_in_cadre(points[i+1][0],points[i+1][1]): global dessin_valide dessin_valide = False print("Segments ne pouvant être tracés") return if axi_connect and dessin_valide: for i in range(len(points)): points[i][0], points[i][1] = points[i][0] * 8.267 / 793.7, points[i][1] * 8.267 / 793.7 ad.goto(points[0][0], points[0][1]) ad.draw_path(points) ad.penup() else: for i in range(len(points)-1): draw.line((points[i][0], points[i][1], points[i+1][0], points[i+1][1]), fill = black)
Ces deux fonctions ont besoin de coordonnés précises pour fonctionner. Pour avoir ces coordonnés j’ai eu une idée plutôt simple à utiliser, j’ai utilisé Paint car l’application donne les coordonné de la souris en temps réel. La dernière étape était de simplifier mon dessin d’origine en usant de segments et de points, puis j’ai pu reprendre tout les coordonnées et les mettre dans mon code python.
Différentes parties du dessin :
Pour l’intérieur de l’oeil j’ai utilisé les fonctions cercles codé par mes professeurs, cette fonction a besoin des coordonnés du centre du cercle et du rayon pour pouvoir dessiner les cercles. C’est assez facile à dessiner, voici le résultat :
Pour tout le contour de l’oeil et la main à l’intérieur, j’ai utilisé la fonction segments qui permet de dessiner plusieurs segments les uns à la suite des autres à partir des coordonné de chaque point noté sur le screenshot de paint juste au dessus.
Le dessin que j’ai choisi n’étant pas vraiment répétitif je n’ai pas pu utilisé de fonction crée par moi même alors j’ai simplement tout fait avec les fonctions segment, segments, cercle et polygone.
Voici tout le code que j’ai écris et l’image final :
Le code python
segments(([443,207],[400,219],[355,254],[289,315],[236,353],[190,374],[230,394],[265,415],[315,455],[360,490],[425,509],[610,510],[708,452],[759,410],[823,380],[840,369],[819,355],[764,324],[699,261],[635,224],[568,202],[482,202])) segment(422,530,422,507) segment(607,530,607,507) segments(([435,507],[435,475],[594,475],[594,507])) segments(([458,475],[435,421],[427,357],[427,283],[440,237],[444,131],[454,120],[468,120],[478,136],[481,255])) segments(([471,266],[490,241],[509,225],[529,230],[539,251])) segments(([524,269],[552,236],[574,240],[587,262])) segments(([566,286],[587,262],[599,256],[612,259],[619,273],[605,302],[604,409],[590,444],[566,475])) polygone([[427,365],[459,335],[486,317],[513,309],[541,316],[575,332],[605,362],[579,392],[550,412],[513,422],[487,416],[464,404],[439,377]]) segments(cercle(514,367,40)) segments(cercle(514,367,19)) segments(cercle(514,367,10))
Conclusion
Ce projet de Nsi était intéressant à faire car l’AxiDraw est un outil nouveau pour moi. J’ai pu apprendre plein de chose
L’image finale
Étudiant en spécialité NSI en classe de 1ère en 2022.