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

../../../../_images/grafrects.svg

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:

networkx.Graph

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.