Esercizio II Si definisca una classe PuntoSuPiano che rappresenta un punto sul piano (chiaramente avrà due coordinate x e y). ------ Si definisca una classe Rettangolo costituita da due PuntiSuPiano "a" e "b", che rappresentano due "spigoli" del rettangolo. Rettangolo deve avere due costruttori uno con due e uno senza parametri (i due spigoli). Se non vi è alcun parametro, il costruttore costruisce un rettangolo con due spigoli rispettivamente in 0,0 e 1,1. ------ Si definisca un metodo di istanza "isSquare" che restituisce true se il rettangolo ha i lati uguali, e false altrimenti. ------ Si definisca un metodo di istanza "getArea" che restituisce l'area del rettangolo. ------ Si definisca un metodo di istanza "isIn" che riceve come parametro un PuntoSuPiano e restituisce true se il punto è nell'area del rettangolo e false altrimenti. ------ Si definisca un metodo di istanza "intersect" che riceve come parametro un altro Rettangolo e che restituisce l'area dell'intersezione dei due rettangoli. ------ Si definisca un metodo di classe "join" che riceve come parametri due Rettangoli e restituisce un nuovo Rettangolo: tale rettangolo è il più piccolo rettangolo che contiene entrambi i rettangoli passati per parametro. ------ Si definisca un metodo di istanza "sum" che riceve come parametro un altro rettangolo e modifica l'istanza in modo da "agganciare" il rettangolo ricevuto per parametro in modo da ottenere un rettangolo con area maggiore. Se non è possibile agganciare il rettangolo, l'istanza non è modificata. Esempio A=[(1,1).(3,4)] B=[(3,1).(4,4)] C=[(2,2).(4,4)] A.sum(B) modifica A, A.sum(C) non modifica A.