# -*- encoding:utf8 -*-

# Ajouter une méthode deepcopy à la classe de base Rectangle

from math import sqrt                   # fonction racine carrée

# Définition des classes

class Point(object):
    """ Définition d'un point géométrique """
    
    def __init__(self, coord_x=0, coord_y=0):       # la méthode constructeur
        """
        Point(float coord_x, float coord_y) --> Obj
        Retourne un objet de la classe Point dont les coordonnées sont <coord_x> et <coord_y>
        """
        self.x =coord_x                             # initialise les attributs d'instance
        self.y =coord_y                             # à coord_x et coord_y

    def affiche_point(self):
        """
        affiche_point() --> None
        Affiche les coordonnées du point sous la forme (x;y)
        """
        print("({};{})".format(self.x, self.y))

    def distance(self, P):
        """
        distance(Point P) --> float
        Retourne la distance séparant l'instance d'un point <P>
        """
        dx = abs(self.x - P.x)          # abs() => valeur absolue
        dy = abs(self.y - P.y)
        distance = sqrt(dx**2 + dy**2)  # théorème de Pythagore
        return distance

class Rectangle(object):
    """Définition d'un rectangle"""
    
    def __init__(self, coin, largeur, hauteur):
        """Rectangle(Point coin, float largeur, float hauteur) --> Obj
        Retourne un objet de la classe Rectangle
        """
        self.coin = coin
        self.largeur =largeur
        self.hauteur = hauteur

    def trouveCentre(self):
        """
        trouveCentre() --> Point
        Retourne les coordonnées du centre du rectangle sous forme d'un objet de la classe Point
        """
        
        xc = self.coin.x + self.largeur/2
        yc = self.coin.y + self.hauteur/2
        return Point(xc, yc)

    def deepCopy(self):
        """
        deepCopy() --> Rectangle
        Retourne une copie véritable de l'instance
        """
        newRectangle = Rectangle(self.coin, self.largeur, self.hauteur) # création d'une nouvelle instance
        return newRectangle

# Programme de test

if __name__ == "__main__":

    # Définition d'un rectangle:
    coin = Point(12, 27)
    boite = Rectangle(coin, 50, 35)

    # Création d'une copie de la boite
    copie = boite.deepCopy()
    

    # Test de similitude:
    if boite == copie:
        print("'copie' est un alias de 'boite'")
        print("L'adresse de 'boite' est", boite)
        print("L'adresse de 'copie' est", copie)
    else:
        print("'copie' est une véritable copie de 'boite'")
        print("L'adresse de 'boite' est", boite)
        print("L'adresse de 'copie' est", copie)

    input("Appuyez sur une touche pour fermer la fenetre !")

