1. Definició de la classe Rectangle

Un rectangle orientat segons els eixos de coordenades es pot representar mitjançant les coordenades dels seus vèrtexs inferior esquerre i superior dret. Al fitxer rectangles.py disposeu de la classe Rectangle que haureu de fer servir (no l’heu d’implementar). La seva especificació és la següent:

class Rectangle(x0, y0, x1, y1, c)

Crea un rectangle de color c amb vèrtex inferior esquerre (x0, y0) i superior dret (x1, y1).

Atributs:

vmin

Tupla amb les coordenades del vèrtex inferior esquerre (dos valors enters)

vmax

Tupla amb les coordenades del vèrtex superior dret (dos valors enters)

color

Color del rectangle (str)

Mètodes:

amplada()

Retorna l’amplada del rectangle

alçada()

Retorna l’alçada del rectangle

Operacions:

Operació

Resultat

str(r)

Retorna un string amb la informació del rectangle (color i coordenades dels seus vèrtexs extrems)

(x,y) in r

Indica si el punt de coordenades (x, y) és interior a r. Les coordenades dels punts vmin i vmax es consideren interiors a r.

r1 & r2

Rectangle intersecció de r1 i r2, de color negre. Si la intersecció és buida, el resultat és un rectangle de color blanc de vèrtexs (0,0) i (0,0). Es considera que dos rectangles que només comparteixen una aresta o segment d’aresta no intersecten.

1.1. Funció posrel (1 punt)

Implementeu la següent funció i la deseu al mòdul posicio (fitxer posicio.py):

posicio.posrel(x, y, r)
Paràmetres:
  • x (int) – coordenada horitzontal

  • y (int) – coordenada vertical

  • r (Rectangle) – rectangle

Retorna:

String que indica la zona del pla on cau el punt (x, y) respecte a r. Ha de ser un dels valors 'NO', 'N', 'NE', 'O', 'X', 'E', 'SO', 'S', 'SE' en funció de zona del pla on cau el punt respecte al rectangle (nord-oest, nord, nord-est, oest, interior, est, etc.) segons mostra la següent figura:

../../../../_images/posrel.svg

Zones del pla segons un rectangle de color carabassa. El valor 'X' és la zona interior al rectangle, la qual inclou les coordenades dels vèrtexs inferior esquerre (vmin) i superior dret (vmax). Els punt que cauen sobre les línies puntejades pertanyen a alguna de les zones 'E', 'O', 'N' o 'S'.

Exemples d’ús:


>>> from rectangles import Rectangle
>>> from posicio import posrel

>>> r = Rectangle(10, 20, 50, 60, 'blau')
>>> posrel(12, 36, r)
'X'
>>> posrel(0, 0, r)
'SO'
>>> posrel(100, 40, r)
'E'
>>> posrel(100, 100, r)
'NE'
>>> posrel(10, 40, r)
'X'

Disposeu de jocs de prova al fitxer tests-posrel.txt