Definieer een klasse Punt
waarmee punten kunnen voorgesteld worden in het tweedimensionale Euclidische vlak. Bij het aanmaken van een punt \((x, y)\) (Punt
) moeten twee argumenten doorgeven worden: i) de \(x\)-coördinaat (int
) van het punt en ii) de \(y\)-coördinaat (int
) van het punt.
Definieer een klasse Rechthoek
waarmee rechthoeken kunnen voorgesteld worden in het tweedimensionale Euclidische vlak. Bij het aanmaken van een rechthoek (Rechthoek
) moeten drie argumenten doorgeven worden: i) het punt \(p\) (Punt
) in de linkerbovenhoek van de rechthoek, ii) de breedte \(b\) (int
) van de rechthoek en iii) de hoogte \(h\) (int
) van de rechthoek. Hierbij moet gelden dat \(b,h > 0\). Indien dat niet het geval is, dan moet een AssertionError
opgeworpen worden met de boodschap ongeldige rechthoek
. Rechthoeken (Rechthoek
) moeten minstens de volgende methoden ondersteunen:
Een methode oppervlakte
die de oppervlakte (int
, \(b \times h\)) van de rechthoek teruggeeft.
Een methode omtrek
die de omtrek (int
, \(2(b + h)\)) van de rechthoek teruggeeft.
Een methode rechtsonder
die het punt (Punt
) in de rechteronderhoek van de rechthoek teruggeeft.
Een methode overlap
waaraan een rechthoek (Rechthoek
) moet doorgegeven worden. Als de twee rechthoeken (de rechthoek waarop de methode wordt aangeroepen en de rechthoek die als argument wordt doorgegeven) overlapen, dan moet de methode een rechthoek (Rechthoek
) teruggeven die het overlappende gebied van de twee rechthoeken beschrijft. Anders moet de waarde None
teruggegeven worden.
Als een punt (Punt
) of een rechthoek (Rechthoek
) doorgegeven wordt aan de ingebouwde functies repr
of str
, dan moet een stringvoorstelling (str
) van het punt of de rechthoek teruggegeven worden die leest als een Python expressie waarmee een punt of een rechthoek op dezelfde positie aangemaakt wordt.
>>> p = Punt(3, 4)
>>> p
Punt(3, 4)
>>> print(p)
Punt(3, 4)
>>> r1 = Rechthoek(Punt(1, 1), 8, 5)
>>> r2 = Rechthoek(Punt(2, 3), 9, 2)
>>> r1
Rechthoek(Punt(1, 1), 8, 5)
>>> print(r2)
Rechthoek(Punt(2, 3), 9, 2)
>>> r1.oppervlakte()
40
>>> r1.omtrek()
26
>>> r1.rechtsonder()
Punt(9, 6)
>>> r1.overlap(r2)
Rechthoek(Punt(2, 3), 7, 2)
>>> r2.overlap(Rechthoek(Punt(0, 0), 2, 2))
>>> Rechthoek(Punt(3, 4), -2, 7)
Traceback (most recent call last):
AssertionError: ongeldige rechthoek