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) overlappen, 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.
Neem bij conventie aan dat de y-as naar benenden gericht is, waardoor Punt(1, 1)
dus boven Punt(1, 2)
ligt.
>>> 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