Classe Punt2D

Disseny de la classe

  1. Dissenyeu la classe Punt2D que permet de representar punts de l’espai 2D i deseu-la al fitxer punt2D.py. L’especificació de la classe Punt2D és la següent:

    class punt2D.Punt2D(x=0, y=0)

    Atributs:

    x

    Coordenada x del punt (enter)

    y

    Coordenada y del punt (enter)

    Mètodes:

    dist(p)

    Retorna la distància entre la instància i el punt p.

    La classe suporta a més la funció str que retorna un string de format “Punt2D(coordx, coordy)”.

    Vegeu els exemples:

    >>> from punt2D import Punt2D
    >>> t = Punt2D(1, 34)
    >>> str(t)
    'Punt2D(1, 34)'
    >>> print(t)
    Punt2D(1, 34)
    >>> t = Punt2D(0, 0)
    >>> q = Punt2D(1, 1)
    >>> print('{:2.1f}'.format(t.dist(q)))
    1.4
    

    Per implementar aquesta classe, haureu de crear el mètode Punt2D.__init__() que inicialitza els atributs del punt, el mètode Punt2D.dist() i també el mètode Punt2D.__str__() per tal donar suport a la funció str.

  2. En un shell de python, creeu una instància de la classe Punt2D. Consulteu i modifiqueu els seus atributs. Feu-ne un print. Vegeu com s’ha invocat el mètode Punt2D.__str__(). Creeu una segona instància a la classe Punt2D i comproveu el valor de la seva distància a la primera instància. Comproveu que el valor de p.dist(q) és el mateix que q.dist(p).

Nota

Disposeu de jocs de proves al fitxer punt2D_1.txt

Utilització de la classe

  1. En el mòdul punts_pla.py dissenyeu la funció llista_punts2D() que a partir d’una llista de tuples, on cada tupla representa un punt amb les seves coordenades (x, y), retorna la llista d’instàncies a la classe Punt2D.

  2. Un polígon es representa com una llista de punts ordenats topològicament de tal forma que entre dos punts consecutius d’una llista hi ha una aresta i que la darrera aresta és la que uneix el darrer punt amb el primer. En el mòdul punts_pla.py dissenyeu la funció perímetre_polígon() que donada una llista d’instàncies a la classe Punt2D retorna el perímetre del polígon corresponent.

Nota

Disposeu de jocs de proves al fitxer punts_pla.txt.

Sobrecàrrega i còpia

  1. En el shell de python, proveu de fer el següent experiment:

    >>> p = Punt2D(6, 7)
    >>> q = p
    >>> p.x = 4
    

    Quin és el valor de q?

    Afegiu a la classe Punt2D el mètode copia() que retorna una còpia del punt (no un àlies) utilitzant la funció copy() del mòdul copy.

  2. Afegiu a la classe Punt2D el mètode __eq__(self, p) que retorna True si les dues coordenades dels dos punts tenen el mateix valor i retorna False altrament. Per exemple:

    >>> p = Punt2D(1, 1)
    >>> q = p
    >>> p == q
    True
    >>> q = Punt2D(1, 1)
    >>> p == q
    True
    >>> q = Punt2D(2, 1)
    >>> p == q
    False
    

Nota

Disposeu de jocs de proves al fitxer punt2D_2.txt

Herència

  1. En el mòdul punt2D_plus dissenyeu la classe Punt2D_plus que es deriva de la classe Punt2D però li afegeix dos atributs, el diàmetre de la circumferència amb la que es representa gràficament el punt i el seu color.

    class punt2D.Punt2D_plus(x, y, color, diàmetre)

    Té els atributs de la classe base i, a més:

    col

    Color del punt (una tupla (r, g, b))

    diam

    Diàmetre de la circumferència que representa gràficament el punt (float)

    Proveu de crear una instància a la classe Punt2D_plus. Intenteu utilitzar el mètode dist() amb aquesta instància. Ho podeu fer? Per què?

Nota

Disposeu de jocs de proves al fitxer punt2D_plus.txt

Nota

Disposeu de solucions als fitxers punt2D.py, punts_pla.py i punt2D_plus.py