Skip to content
Snippets Groups Projects
Commit 1c9ee4ad authored by Dellandrea Emmanuel's avatar Dellandrea Emmanuel
Browse files

Ajout correction

parent 70ff7e09
Branches main
No related tags found
No related merge requests found
class Forme:
def __init__(self, x, y):
self.__x = x
self.__y = y
def get_pos(self):
return self.__x, self.__y
def set_pos(self, x, y):
self.__x = x
self.__y = y
def translation(self, dx, dy):
self.__x += dx
self.__y += dy
class Rectangle(Forme):
def __init__(self, x, y, l, h):
Forme.__init__(self, x, y)
self.__l = l
self.__h = h
def __str__(self):
return f"Rectangle d'origine {self.get_pos()} et de dimensions {self.__l}x{self.__h}"
def get_dim(self):
return self.__l, self.__h
def set_dim(self, l, h):
self.__l = l
self.__h = h
def contient_point(self, x, y):
X, Y = self.get_pos()
return X <= x <= X + self.__l and \
Y <= y <= Y + self.__h
def redimension_par_points(self, x0, y0, x1, y1):
self.set_pos(min(x0, x1), min(y0, y1))
self.__l = abs(x0 - x1)
self.__h = abs(y0 - y1)
class Ellipse(Forme):
def __init__(self, x, y, rx, ry):
Forme.__init__(self, x, y)
self.__rx = rx
self.__ry = ry
def __str__(self):
return f"Ellipse de centre {self.get_pos()} et de rayons {self.__rx}x{self.__ry}"
def get_dim(self):
return self.__rx, self.__ry
def set_dim(self, rx, ry):
self.__rx = rx
self.__ry = ry
def contient_point(self, x, y):
X, Y = self.get_pos()
return ((x - X) / self.__rx) ** 2 + ((y - Y) / self.__ry) ** 2 <= 1
def redimension_par_points(self, x0, y0, x1, y1):
self.set_pos((x0 + x1) // 2, (y0 + y1) // 2)
self.__rx = abs(x0 - x1) / 2
self.__ry = abs(y0 - y1) / 2
class Cercle(Ellipse):
def __init__(self, x, y, r):
Ellipse.__init__(self, x, y, r, r)
def __str__(self):
return f"Cercle de centre {self.get_pos()} et de rayon {self.get_dim()}"
def get_dim(self):
return Ellipse.get_dim(self)[0]
def set_dim(self, r):
Ellipse.set_dim(self, r, r)
def redimension_par_points(self, x0, y0, x1, y1):
r = min(abs(x0 - x1), abs(y0 - y1)) / 2
self.set_dim(r)
self.set_pos(round(x0 + r if x1 > x0 else x0 - r),
round(y0 + r if y1 > y0 else y0 - r))
class Forme:
def __init__(self, x, y):
self.__x = x
self.__y = y
self.__dessins = []
def get_pos(self):
return self.__x, self.__y
def set_pos(self, x, y):
self.__x = x
self.__y = y
def translation(self, dx, dy):
self.__x += dx
self.__y += dy
def add_dessin(self,d):
self.__dessins.append(d)
def del_dessin(self,d):
self.__dessins.remove(d)
def print_dessins(self):
print("Liste des dessins de la forme : ")
for d in self.__dessins:
print(d.get_nom())
class Rectangle(Forme):
def __init__(self, x, y, l, h):
Forme.__init__(self, x, y)
self.__l = l
self.__h = h
def __str__(self):
return f"Rectangle d'origine {self.get_pos()} et de dimensions {self.__l}x{self.__h}"
def get_dim(self):
return self.__l, self.__h
def set_dim(self, l, h):
self.__l = l
self.__h = h
def contient_point(self, x, y):
X, Y = self.get_pos()
return X <= x <= X + self.__l and \
Y <= y <= Y + self.__h
def redimension_par_points(self, x0, y0, x1, y1):
self.set_pos(min(x0, x1), min(y0, y1))
self.__l = abs(x0 - x1)
self.__h = abs(y0 - y1)
class Ellipse(Forme):
def __init__(self, x, y, rx, ry):
Forme.__init__(self, x, y)
self.__rx = rx
self.__ry = ry
def __str__(self):
return f"Ellipse de centre {self.get_pos()} et de rayons {self.__rx}x{self.__ry}"
def get_dim(self):
return self.__rx, self.__ry
def set_dim(self, rx, ry):
self.__rx = rx
self.__ry = ry
def contient_point(self, x, y):
X, Y = self.get_pos()
return ((x - X) / self.__rx) ** 2 + ((y - Y) / self.__ry) ** 2 <= 1
def redimension_par_points(self, x0, y0, x1, y1):
self.set_pos((x0 + x1) // 2, (y0 + y1) // 2)
self.__rx = abs(x0 - x1) / 2
self.__ry = abs(y0 - y1) / 2
class Cercle(Ellipse):
def __init__(self, x, y, r):
Ellipse.__init__(self, x, y, r, r)
def __str__(self):
return f"Cercle de centre {self.get_pos()} et de rayon {self.get_dim()}"
def get_dim(self):
return Ellipse.get_dim(self)[0]
def set_dim(self, r):
Ellipse.set_dim(self, r, r)
def redimension_par_points(self, x0, y0, x1, y1):
r = min(abs(x0 - x1), abs(y0 - y1)) / 2
self.set_dim(r)
self.set_pos(round(x0 + r if x1 > x0 else x0 - r),
round(y0 + r if y1 > y0 else y0 - r))
class Dessin:
def __init__(self,n):
self.__nom = n
self.__formes = []
def get_nom(self):
return self.__nom
def add_forme(self,f):
self.__formes.append(f)
f.add_dessin(self)
def del_forme(self,position):
f = self.__formes.pop(position)
f.del_dessin(self)
def print_formes(self):
print('--- Dessin ---')
for f in self.__formes:
print(f)
def __str__(self):
s = '--- Dessin (avec print) ---'
for f in self.__formes:
s += '\n' + str(f)
return s
\ No newline at end of file
from formes import *
def test_Rectangle():
r = Rectangle(10, 20, 100, 50)
str(r)
assert r.contient_point(50, 50)
assert not r.contient_point(0, 0)
r.redimension_par_points(100, 200, 1100, 700)
assert r.contient_point(500, 500)
assert not r.contient_point(50, 50)
def test_Ellipse():
e = Ellipse(60, 45, 50, 25)
str(e)
assert e.contient_point(50, 50)
assert not e.contient_point(11, 21)
e.redimension_par_points(100, 200, 1100, 700)
assert e.contient_point(500, 500)
assert not e.contient_point(101, 201)
def test_Cercle():
c = Cercle(10, 20, 30)
str(c)
assert c.contient_point(0, 0)
assert not c.contient_point(-19, -9)
c.redimension_par_points(100, 200, 1100, 700)
assert c.contient_point(500, 500)
assert not c.contient_point(599, 500)
if __name__ == '__main__':
test_Rectangle()
test_Ellipse()
test_Cercle()
from formes_avec_dessin import *
def test_Rectangle():
r = Rectangle(10, 20, 100, 50)
str(r)
assert r.contient_point(50, 50)
assert not r.contient_point(0, 0)
r.redimension_par_points(100, 200, 1100, 700)
assert r.contient_point(500, 500)
assert not r.contient_point(50, 50)
def test_Ellipse():
e = Ellipse(60, 45, 50, 25)
str(e)
assert e.contient_point(50, 50)
assert not e.contient_point(11, 21)
e.redimension_par_points(100, 200, 1100, 700)
assert e.contient_point(500, 500)
assert not e.contient_point(101, 201)
def test_Cercle():
c = Cercle(10, 20, 30)
str(c)
assert c.contient_point(0, 0)
assert not c.contient_point(-19, -9)
c.redimension_par_points(100, 200, 1100, 700)
assert c.contient_point(500, 500)
assert not c.contient_point(599, 500)
def test_Dessin():
# Partie pour aller plus loin : Creation et manipulation d'objets Dessin
r = Rectangle(10, 20, 100, 50)
e = Ellipse(60, 45, 50, 25)
c = Cercle(10, 20, 30)
print("Création d'un dessin A composé des trois formes")
d1 = Dessin("A")
d1.add_forme(r)
d1.add_forme(e)
d1.add_forme(c)
d1.print_formes()
print("Création d'un dessin B composé de l'ellipse et du cercle")
d2 = Dessin("B")
d2.add_forme(e)
d2.add_forme(c)
d2.print_formes()
print("Affichage des dessins auxquels les formes sont associées")
r.print_dessins()
e.print_dessins()
c.print_dessins()
print("Suppression de l'ellipse dans le dessin A")
d1.del_forme(1)
print(d1)
print("Affichage des dessins auxquels les formes sont associées")
r.print_dessins()
e.print_dessins()
c.print_dessins()
if __name__ == '__main__':
test_Rectangle()
test_Ellipse()
test_Cercle()
test_Dessin()
TD1/correction/diagramme_classes_formes.png

250 KiB

TD1/correction/diagramme_classes_formes_avec_dessin.png

176 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment