46 views
```python from kandinsky import * def horizontal(xi, yi, xf, col): """ une fonction qui trace une droite horizontale à partir des coordonnées (x, yi) jusqu'à l'abscisse xf """ for i in range(xi, xf + 1): set_pixel(i, yi, col) horizontal(10, 10, 50, (255, 0, 0)) # ligne rouge horizontal(10, 20, 50, (0, 255, 0)) # ligne verte en-dessous horizontal(10, 15, 50, (0, 0, 255)) # ligne bleue intermédiaire def vertical(xi, yi, yf, col): """ une fonction qui trace une droite verticale à partir des coordonnées (x, yi) jusqu'à l'ordonnée yf """ for i in range(yi, yf + 1): set_pixel(xi, i, col) return vertical(10, 10, 50, (255, 0, 0)) # ligne rouge vertical(20, 20, 50, (0, 255, 0)) # ligne verte en-dessous vertical(15, 15, 50, (0, 0, 255)) # ligne bleue intermédiaire def rectangle(xa, ya, xb, yb, col): """ une fonction qui trace le périmètre d'un rectangle défini par les coordonnées de son sommet supérieur gauche et de son sommet inférieur droit """ horizontal(xa, ya, xb, col) horizontal(xa, yb, xb, col) vertical(xa, ya, yb, col) vertical(xb, ya, yb, col) return rectangle(100,50,200,200,(255,255,0)) # un rectangle rouge entre # (100,50) et (200, 200) def rectangle_rempli(xa, ya, xb, yb, col): """ une fonction qui remplit un rectangle défini par les coordonnées de son sommet supérieur gauche et de son sommet inférieur droit """ for i in range(xa, xb + 1): for j in range(ya, yb + 1): set_pixel(i, j, col) return def tricolore(xa, ya, xb, yb, col1, col2, col3): """ Une fonction qui trace un rectangle tricolore sur le modèle du drapeau français entre les coordonnées (xa, ya) et (xb, yb) """ for i in range(xa, xb + 1): if i < xa + (xb-xa)//3: coul = col1 elif i < xa + 2*(xb-xa)//3: coul = col2 else : coul = col3 for j in range(ya, yb + 1): set_pixel(i, j, coul) return # tricolore(10,10,200,100,(0,0,255),(255,255,255),(255,0,0)) def oblique(xi, yi, xf, yf, col): """ une fonction qui trace une droite oblique partant du point supérieur gauche (xi, yi) et finissant au point inférieur droit (xf, yf) """ for i in range(0, xf - xi): set_pixel(xi + i, int(yi + i * (yf - yi)/(xf - xi)), col) return oblique(50,50,150,150,(255,0,0)) # faites varier la position des points de départ # si la droite est très pentue, vous devriez observer un problème ! def cercle(xc, yc, r, col = (0, 0, 0), ep = 1): """ Une fonction qui trace un cercle de centre (xc, yc) de rayon r elle prend en paramètres facultatifs la couleur du trait ainsi que son épaisseur """ xa = xc - r ya = yc - r xb = xc + r yb = yc + r for i in range(xa, xb + 1): for j in range(ya, yb + 1): distance = ((i - xc)**2 + (j - yc)**2)**0.5 if r-ep <= distance <= r : set_pixel(i, j, col) return cercle(75 , 75, 25, (0,0,0),4) def disque(xc, yc, r, col = (0, 0, 0)): """ Une fonction qui trace un disque de centre (xc, yc) de rayon r elle prend en paramètre facultatif sa couleur """ xa = xc - r ya = yc - r xb = xc + r yb = yc + r for i in range(xa, xb + 1): for j in range(ya, yb + 1): distance = ((i - xc)**2 + (j - yc)**2)**0.5 if distance <= r : set_pixel(i, j, col) return disque(75 , 75, 15, (255,0,0)) ```