Classe Poligon

La classe Poligon representa polígons de l’espai 2D. Un polígon es representa com una llista ordenada dels seus vèrtexs, és a dir que hi ha una aresta entre dos vèrtexs consecutius de la llista. La darrera aresta del polígon és la que té per extrems el darrer vèrtex i el primer. Un vèrtex és una instància de la classe Punt2D. Vegeu l’especificació de la classe:

class poligon.Poligon

Construeix un polígon buit, sense cap vèrtex.

Mètodes

afegir_vertex(v)

Afegeix el vèrtex v al final de la llista de vèrtexs del polígon. El primer vèrtex que s’afegeixi tindrà índex 0, el segon índex 1, etc.

obtenir_aresta(i)

Retorna una tupla format pels dos vèrtexs de l’aresta i-èssima del polígon, essent \(0 \leq i<len(p)\).

Aquesta classe ha de suportar les operacions següents:

Operació

Resultat

p[i]

Retorna el vèrtex i-èssim del polígon essent: \(0 \leq i<len(p)\)

A més, aquesta classe ha de suportar la funció len() que retorna el nombre de vèrtexs del polígon.

Vegeu un exemple de funcionament de la classe:

>>> from poligon import Poligon
>>> p = Poligon()
>>> len(p)
0
>>> from punt2D import Punt2D
>>> p1 = Punt2D(2, 3)
>>> p.afegir_vertex(p1)
>>> len(p)
1
>>> print(p[0])
Punt2D(2, 3)

  1. Implementeu la classe Poligon i deseu la implementació al fitxer (fitxer poligon.py). Descarregueu la solució de la implementació de la classe Punt2D per fer proves. Observeu que la classe no té cap atribut públic. En implementar-la, doteu-la d’un atribut privat que sigui la llista de vèrtexs del polígon, inicialment buida. Disposeu dels jocs de proves al fitxer test-poligon-1.txt.

  2. Comproveu que es pot iterar sobre una instància d’un Polígon. En un intèrpret de python proveu de fer el següent. Sobre quins elements s’itera? Com és que funciona?

    for vert in p:
        print(vert)
    

    Podeu usar els jocs de prova del fitxer test-poligon-2.txt

  3. Afegiu a la classe Poligon el mètode iter_arestes() que permet d’iterar sobre les arestes del polígon. Per tant, aquest mètode ha de ser una funció generadora.

    Per a resoldre aquest exercici, en la implementació utilitzeu el mètode obtenir_aresta() per obtenir les arestes. Disposeu dels jocs de proves al fitxer test-poligon-3.txt.

  4. En el fitxer area.py, implementeu la funció:

    area.area(pol)

    Donat un polígon, retorna la seva àrea.

Per a resoldre aquest exercici, apliqueu el mètode dels trapezis 1. Aquest mètode suma les àrees amb signe de tots els trapezis rectangles definits per cadascuna de les arestes del polígon i l’eix x i retorna el valor absolut de la suma. El mètode està il·lustrat a la figura adjunta. L’àrea del polígon de l’esquerra és la suma de les àrees positives (figura del mig) i les àrees negatives (figura de la dreta). Utilitzeu l’iterador d’arestes iter_arestes() per a recórrer les arestes del poligon. Disposeu dels jocs de proves al fitxer test-area.txt.

../../../_images/area_pol.svg

Nota

Disposeu d’una solució de l’exercici als fitxers poligon.py i area.py.