Definieer een class met de naam “Punt” waarvan de objecten punten voorstellen in een 2 dimentioneel vlak. De class Punt bevat 2 attributen, nl. de x- en y-coordinaten, voorgesteld door x en y (reële getallen). Gebruik de __repr__ methode om het punt af te printen in het formaat (<x>, <y>). Definieer de methode __eq__ (operator overloading) om 2 punten met elkaar te vergelijken (True als x1 gelijk is aan x2, en y1 gelijk aan y2).

Definieer een subclass “Hoekpunt” van de superclass Punt. Hoekpunt stelt een hoekpunt voor van een rechthoekige driehoek met één horizontale en één vertikale rechthoekszijde (zie tekening). Naast de attributen en methodes die het erft van de superclass heeft het een derde attribuut “naam”, waarmee wordt aangegeven over welk punt het gaat, nl. rechthoekpunt (punt_rh), het punt aan de rechterkant (punt_b) en het bovenste punt (punt_h). Gebruik de super() methode om de attributen van de class Punt over te nemen in deze class.

Definieer een derde class met de naam “RechthoekigeDriehoek” waarmee rechthoekige driehoeken kunnen voorgesteld worden in een 2 dimentioneel vlak (zie tekening) die gedefineerd worden door 3 hoekpunten, objecten van de class Hoekpunt. Maakt een kopie van deze objecten via de methode copy() uit de module copy (begin je code met “from copy import copy”).

Ontwerp een AssertionError (keyword assert) om te controle of de driehoek voldoet aan de voorwaarden van een rechthoekige driehoek met een horizontale en een vertikale rechthoekszijde waarvan de scherpe hoeken (<90 gr) rechts van en boven de rechte hoek liggen. Indien dit niet het geval is geeft het systeem de boodschap ‘ongeldige rechthoekige driehoek’.

Gebruik de __repr__ methode om de rechthoekige driehoek af te printen in het formaat “punt_rh: <punt_rh>, punt_b: <punt_b>, punt_h: <punt_h>”. Definieer de methode __eq__ om te controleren of 2 objecten van de class RechthoekigeDriehoek gelijk zijn. Dit is het geval als de hoekpunten van de 2 driehoeken gelijk zijn, dus punt_rh gelijk, punt_b gelijk en punt_h gelijk.

Maak volgende methode aan voor de class RechthoekigeDriehoek:

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

Voorbeeld

>>> p_rh1 = Hoekpunt(1.0, 1.0, "punt_rh")
>>> print(p_rh1)
(1.0, 1.0)
>>> p_b1 = Hoekpunt(3.0, 1.0, "punt_b")
>>> print(p_b1 == p_rh1)
False
>>> p_h1 = Hoekpunt(1.0, 2.0, "punt_h")
>>> recht_driehoek1 = RechthoekigeDriehoek(p_rh1, p_b1, p_h1)
>>> print(recht_driehoek1)
punt_rh: (1.0, 1.0), punt_b: (3.0, 1.0), punt_h: (1.0, 2.0)
>>> print(f"schuine zijde: {recht_driehoek1.schuine_zijde()}")
schuine zijde: 2.24
>>> p_rh2 = Hoekpunt(1.0, 1.0, "punt_rh")
>>> p_b2 = Hoekpunt(3.0, 1.0, "punt_b")
>>> p_h2 = Hoekpunt(1.0, 2.0, "punt_h")
>>> recht_driehoek2 = RechthoekigeDriehoek(p_rh2, p_b2, p_h2)
>>> print(recht_driehoek1 == recht_driehoek2)
True
>>> p_rh3 = Hoekpunt(2.0, 2.0, "punt_rh")
>>> p_b3 = Hoekpunt(3.0, 2.0, "punt_b")
>>> p_h3 = Hoekpunt(2.0, 5.0, "punt_h")
>>> recht_driehoek3 = RechthoekigeDriehoek(p_rh3, p_b3, p_h3)
>>> print(f"schuine zijde: {recht_driehoek3.schuine_zijde()}")
schuine zijde: 3.16
>>> print(recht_driehoek1 == recht_driehoek3)
False
>>> p_h1.y = 3.0
>>> print(recht_driehoek1)
punt_rh: (1.0, 1.0), punt_b: (3.0, 1.0), punt_h: (1.0, 2.0)