
Pour ce premier projet de NSI d’art génératif, nous avons décidé de représenter un micro, un BM 800 avec le module turtle de python.
Sommaire
La vidéo du projet :
Pourquoi le micro ?
Tout simplement car Mathieu fait de la musique plus précisément des instrumentales et Romain lui fait de l’audiovisuel (photos et vidéos). Le micro qui est indispensable dans ces 2 univers. Nous avons choisi le micro BM 800 car pour débuter c’est l’un des meilleurs micros.
Le projet
Pour en revenir au projet, nous avons décidé de faire un micro. Pour cela nous avons utilisé le module turtle ainsi que le module random.
Structure du script
Pour la structure du script nous avons décidé de découper chaque partie de l’image (fond, albums vinyles, cors du micro, prise XLR et bonnette du micro) pour créer des fonctions et pour organiser le script.
Analyse du script
Nous allons analyser le script :
nous allons commencer par par l’appel des modules et la mise en place de turtle :
from turtle import * from random import randint """ Ce fichier est expliqué ici : https://nsi.xyz/py2png Un autre tutoriel permet de commencer : https://nsi.xyz/tutoriels/decouvrir-le-module-turtle-de-python/ """ try: from PIL import Image pillow_installed = True except: print("Oops! - ModuleNotFoundError: No module named 'PIL' - RTFM :") print("https://nsi.xyz/py2png") pillow_installed = False # Uniquement des lettres, des chiffres, un tiret. Rien d'autre. # https://learn.microsoft.com/fr-fr/windows/win32/fileio/naming-a-file titre = "micro bm800 - construit avec turtle" # Définir le titre de la fenêtre de turtle + propagande ^^ title(titre+" | Au lycée, la meilleure spécialité, c'est la spé NSI") # definir la taille de la fenêtre en 720p (Largeur, Hauteur) # La tortue part du centre, au point de coordonnées (0,0) setup(1280, 720) # La tortue va à la vitesse du lièvre et active sa cape d'invisibilité speed(0) hideturtle() """NOUVEAUTE 2023 : Pour un tracé instantané, sans aucun délai, il suffit d'affecter la valeur True à la variable "flash" (False par défaut) mais cela rend le débuggage moins facile Merci @bebertii """ flash = True # False par défaut, on peut mettre True sinon, ou mieux 0x2A if flash: wn = Screen() wn.tracer(0)
Ensuite pour le fond nous avons utilisé une fonction qui se nomme background-color. Nous avons défini avec la couleur bleu marine en hexadécimal.
def fond(): bgcolor("#03224c")
Ce qui nous donne :

Après nous avons fait le corps du micro avec quelques valeurs tel que la couleur, la longueur et la largeur du rectangle. Puis nous avons défini une position à laquelle le corps du micro va se positionner, nous avons tracé un rectangle noir, puis nous avons tracé un trapèze pour représenter le bout du micro.
import turtle ht() def corpmicro(): t = turtle.Turtle() col = ("#000000") l = 100 la = 200 t.goto(-100,0) t.fillcolor(col) t.begin_fill() t.ht() for i in range(2): t.forward(l) t.right(90) t.forward(la) t.right(90) t.end_fill() t.begin_fill() t.penup() t.rt(90) t.forward(la) t.pendown() t.left(45) t.forward(40) t.left(45) t.forward(44) t.left(45) t.forward(40) t.end_fill()
Ce qui nous donne avec le fond :

Après cela, pour la prise XLR, nous avons réalisé une fonction prise XLR puis nous avons tracé un rectangle gris et nous lui avons donné une position finale.
def prisexlr(): p = turtle.Turtle() col3 = ("#c4c4c4") l7 = 44 la6 = 20 p.ht() p.penup() p.goto(-72,-228) p.pendown() p.fillcolor(col3) p.begin_fill() for i in range(2): p.forward(l7) p.right(90) p.forward(la6) p.right(90) p.end_fill()
Ce qui nous donne avec le fond et le corps du micro :

Ensuite pour les 2 albums vinyles, nous avons fait 2 fonctions distincts pour chacun des 2 albums vinyles dans lesquels nous avons rentré les même valeurs tel que les couleurs et le rayon des 2 cercles qui compose l’album vinyle ainsi que la longueur du carré. Ensuite nous avons juste modifié les positions des cercles et carrés.
1er album vinyle :
def albumvinyle(): a = turtle.Turtle() col4 = ("#000000") col5 = ("#2f4f4f") col6 = ("#f9429e") l8 = 80 r = 35 r2 = 35/2 a.penup() a.goto(-400,300) a.pendown() a.fillcolor(col5) #carton de l'album a.begin_fill() for i in range (4): a.forward(l8) a.right(90) a.end_fill() #vinyle a.penup() a.goto(-360,225) a.pendown() a.fillcolor(col4) a.begin_fill() a.circle (r2) a.end_fill() #centre du vinyle a.penup() a.goto(-360,242) a.pendown() a.fillcolor(col6) a.ht() a.begin_fill()
2e album vinyle :
def albumvinyle2(): a = turtle.Turtle() col4 = ("#000000") col5 = ("#2f4f4f") col6 = ("#f9429e") l8 = 80 r = 35 r2 = 35/2 a.penup() a.goto(360,-220) a.pendown() a.fillcolor(col5) #carton de l'album a.begin_fill() for i in range (4): a.forward(l8) a.right(90) a.end_fill() #vinyle a.penup() a.goto(400,-295) a.pendown() a.fillcolor(col4) a.begin_fill() a.circle (r2) a.end_fill() #centre du vinyle a.penup() a.goto(400,-277) a.pendown() a.fillcolor(col6) a.ht() a.begin_fill() a.circle (r2) a.end_fill()
Ce qui nous donne avec le fond, le corps du micro et la prise XLR :

De plus pour la bonnette du micro, nous avons défini un rectangle noir pour faire ressortir le quadrillage gris de la bonnette.
def bonettefond(): #fond permetant de faire un quadrillage noir b = turtle.Turtle() col2 = ("#000000") l2 = 125 la2 = 150 b.penup() b.goto(-225/2,150) b.pendown() b.fillcolor(col2) b.ht() b.begin_fill() for i in range(2): b.forward(l2) b.right(90) b.forward(la2) b.right(90) b.end_fill()
Ensuite pour la grille de la bonnette, nous avons fait le quadrillage de la bonnette pour cela nous avons réalisé une fonction qui va permettre de faire des lignes horizontales et verticales.
def bonettegrille(): g = turtle.Turtle() col3 = ("#c4c4c4") l3 = 150 la3 = 4 l4 = 125 g.penup() g.goto(-230/2,150) g.pendown() g.fillcolor(col3) g.begin_fill() g.ht() #grille horizontale for i in range(16): g.right (90) g.forward(l3) g.left(90) g.forward(la3) g.left(90) g.forward(l3) g.right(90) g.forward(la3) g.right(90) #grille verticale for i in range(19): g.right (90) g.forward(l4) g.left(90) g.forward(la3) g.left(90) g.forward(l4) g.right(90) g.forward(la3) g.end_fill()
Et pour finir pour les barres de la bonnette, nous avons créer une fonction qui va nous permettre de faire 4 rectangles de longueurs et de largeurs différentes et aussi de positions différentes pour créer les barres de la bonnette.
def barrebonette(): bo = turtle.Turtle() col3 = ("#c4c4c4") l5 = 127 la4 = 25 l6 =6 la5 =145 bo.penup() bo.goto(-230/2,145) bo.pendown() bo.fillcolor(col3) bo.ht() #première barre horizontale bo.begin_fill() for i in range(2): bo.forward(l5) bo.right(90) bo.forward(la4) bo.right(90) bo.end_fill() bo.goto(-230/2,25) #deuxième barre horizontale bo.begin_fill() for i in range(2): bo.forward(l5) bo.right(90) bo.forward(la4) bo.right(90) bo.end_fill() bo.goto(-232/2,145) #première barre vertical bo.begin_fill() for i in range(2): bo.forward(l6) bo.right(90) bo.forward(la5) bo.right(90) bo.end_fill() bo.goto(10,145) #deuxième barre vertical bo.begin_fill() for i in range(2): bo.forward(l6) bo.right(90) bo.forward(la5) bo.right(90) bo.end_fill()
Ce qui nous donne avec juste la bonnette et le fond :

De plus, nous avons une fonction très importante qui sert pas à dessiner quelque chose mais elle rassemble toutes les fonctions afin de les mettre dans le bonne ordre. Donc cela nous a permis de faire chacun nos fonctions chez nous et les mettre en commun.
def immagemicro(): fond() corpmicro() bonettefond() bonettegrille() barrebonette() prisexlr() albumvinyle() albumvinyle2() immagemicro()
L’image finale
