```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))
```