Deze oefening is identiek aan de oefening “Punt en rechthoek” met dat verschil dat je nu je de 2 punten met copy() gaat copieren en zodoende loskoppelt van de originele punt objecten.

Definieer een class met de naam “Punt” dat een punt voorstelt in een 2 dimentioneel vlak. Punt bevat 2 attributen, nl. x en y (reële getallen). Gebruik de __repr__ methode om het punt af te printen in het formaat (x, y).

Definieer een tweede class met de naam “Rechthoek” waarmee rechthoeken met horizontale en verticale zijden kunnen voorgesteld worden in een 2 dimentioneel vlak, die gedefineerd worden door 2 punten, dus objecten van de class Punt.

Controleer of de 2 punten niet op een horizontale, vertikale lijn of op elkaar liggen, anders heb je geen rechthoek maar een lijn of een punt. Ontwerp hiervoor een AssertionError (keyword assert) met de boodschap ‘ongeldige rechthoek’.

Class Rechthoek heeft 4 attributen, nl. punt_1 en punt_2, kopies van de meegeleverde argumenten via de methode copy() uit de module copy (begin je code met “from copy import copy”). De volgende 2 attributen, punt_3 en punt_4, zijn afgeleid van de argumenten punt_1 en punt_2 (punt_3 -> (punt_1.x, punt_2.y) en punt_4 -> (punt_2.x, punt_1.y).

Gebruik de __repr__ methode om de rechthoek af te printen in het formaat [punt1, punt2, punt3, punt4].

Maak volgende methodes aan voor de class Rechthoek:

Test je 2 classes zoals in onderstaand voorbeeld. Deze test-code moet je niet indienen in Dodona.

Voorbeeld

>>> p1_1 = Punt(1.0, 2.0)
>>> print(p1_1)
(1.0, 2.0)
>>> p1_2 = Punt(2.0, 1.0)
>>> print(p1_2)
(2.0, 1.0)
>>> r1 = Rechthoek(p1_1, p1_2)
>>> print(r1)
[(1.0, 2.0), (2.0, 1.0), (1.0, 1.0), (2.0, 2.0)]
>>> print(r1.punt_1)
(1.0, 2.0)
>>> print(type(r1.punt_4))
<class 'Punt'>
>>> p1_1.x = 1.0
>>> p1_1.y = 1.0
>>> print(p1_1)
(1.0, 1.0)
>>> p1_2.x = 3.0
>>> p1_2.y = 3.0
>>> print(p1_2)
(3.0, 3.0)
>>> print(r1)
[(1.0, 2.0), (2.0, 1.0), (1.0, 1.0), (2.0, 2.0)]
>>> omtrek_r1 = r1.omtrek()
>>> print(omtrek_r1)
4.0
>>> oppervlakte_r1 = r1.oppervlakte()
>>> print(oppervlakte_r1)
1.0