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)
Implementeu la classe
Poligoni deseu la implementació al fitxer (fitxerpoligon.py). Descarregueu la solució de la implementació de la classePunt2Dper 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 fitxertest-poligon-1.txt.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.txtAfegiu a la classe
Poligonel mètodeiter_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 fitxertest-poligon-3.txt.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 fitxertest-area.txt.![]()
Nota
Disposeu d’una solució de l’exercici als fitxers poligon.py i area.py.