# -*- coding: utf-8 -*-

# definition de la classe Point
# qui modelise des points sur un plan 2D
# avec une abcisse x et une ordonnee y

from math import sqrt

class Point:
    """Definit les points de l'espace 2D."""

    def __init__(self, x=0, y=0):
        " Constructeur avec valeurs par defaut des coordonnées "
        self.x_ = x
        self.y_ = y

    def __repr__(self):
        " Modele d'affichage des attributs d'un Point."
        return "coordonnee horizontale = " + str(self.x_)  + " coordonnees verticale = " + str(self.y_)

    def getx(self):
        """ Accesseur sur x

        :return:     valeur attribut abscisse
        """
        return self.x_

    def gety(self):
        """ Accesseur sur y

        :return:    valeur attribut ordonnée
        """
        return self.y_

    def setx(self, newx):
        """ Mutateur sur x
        :param newx:    nouvelle valeur pour attribut abscisse
        :return:        modifie l'attribut
        """

        self.x_ = newx

    def sety(self, newy):
        """ Mutateur sur y
        :param newy:    nouvelle valeur pour attribut ordonnée
        :return:        modifie l'attribut
        """

        self.y_ = newy

    def deplace(self, dx, dy):
        """

        :param dx:  déplacement sur l'axe des x
        :param dy:  déplacement sur l'axe des y
        :return:    modifie les attributs de la forme
        """

        self.x_ += dx
        self.y_ += dy

    def distance(self):
        """

        @return:    distance du point à l'origine
        """
        return sqrt(self.x_**2 + self.y_**2)

    def longueur(self, other):
        """

        @param other:   autre point
        @return:        distance entre les deux points self et other
        """
        return sqrt((self.x_-other.x_)**2 + (self.y_-other.y_)**2)

if __name__ == "__main__":
    # O = Point()            # test creation point par défaut
    # print(O)

    # pt = Point(3, 4)        # test creation point quelconque
    # print(pt)
    # pt2 = pt.copy()
    # print(pt)
    # print(pt.getx(), pt.gety())     # test accesseurs
    #
    # pt.setx(34)     # test mutateurs
    # pt.sety(45)
    # print(pt)
    #
    # pt.deplace(10, 100)
    # print(pt)
    #
    # print(pt.distance())
    #
    A = Point(0, 1)
    B = Point(7,3)
    C = Point(2,5)
    # calcul périmètre triangle A - B - C
    print(A.longueur(B) + B.longueur(C) + C.longueur(A))