4. Graf de rectangles (2 punts)¶
En aquest exercici haureu de fer servir la classe networkx.Graph per a representar un graf de rectangles. Cada node del graf serà un Rectangle i hi haurà una aresta entre dos rectangles sempre que la seva intersecció no sigui buida. Cada aresta del graf tindrà associat l’atribut àrea amb el valor de l’àrea de la intersecció entre els dos rectangles.
Per exemple
Conjunt de quatre rectangles i graf corresponent¶
Al fitxer crea.py (mòdul crea), escriviu-hi la funció següent:
- crea.crea_graf_rects(lr)¶
Crea un graf a partir de la llista de rectangles lr.
- Paràmetres:
lr – llista de rectangles
- Retorna:
graf de rectangles, que inclou com a nodes tots els rectangles de lr i les arestes entre els rectangles que intersecten amb l’atribut de l’àrea, tal com es descriu més amunt
- Tipus de retorn:
Per exemple,
>>> from crea import crea_graf_rects
>>> from rectangles import Rectangle
>>> r0 = Rectangle(25, 75, 33, 90, 'groc') # Rectangle groc de la figura
>>> r1 = Rectangle(74, 19, 105, 32, 'blau marí') # Rectangles blaus de la figura
>>> r2 = Rectangle(83, 26, 111, 38, 'blau')
>>> r3 = Rectangle(89, 15, 125, 29, 'blau cel')
>>> l = [r0, r1, r2, r3]
>>> g = crea_graf_rects(l)
>>> g.number_of_nodes()
4
>>> set(g.nodes()) == {r0, r1, r2, r3}
True
>>> g.number_of_edges()
3
>>> g[r1][r2]
{'àrea': 132}
>>> g[r1][r3]
{'àrea': 160}
>>> g[r3][r2]
{'àrea': 66}
Suggeriment
Fixeu-vos bé en l’especificació de la classe Rectangle, ja que disposa de mètodes i operacions que us ajudaran a implementar aquesta funció.
Disposeu d’un joc de proves al fitxer tests-crea.txt.