Ciao io ho pensato ad una cosa del genere:
struct Rettangolo
{
int x1;
int y1;
int x2;
int y2;
char nome[20];
};
/********** verifica se sono adiacenti ***********/
int CalcRettangoliAdiacenti(struct Rettangolo* ret1,struct Rettangolo* ret2)
{
int i;
/* verifico se le basi hanno una base in comune */
if (ret2->y1==ret1->y2 || ret2->y2== ret1->y1)
{
for(i=ret2->x1;i<ret2->x2 && !(i>ret1->x1 && i<ret1->x2);i++);
if (i>ret1->x1 && i<ret1->x2)
printf("%s","I rettangoli sono adiacenti perchè hanno una base in comune");
}
/* verifico se hanno un lato in comune */
if(ret2->x1==ret1->x2 || ret2->x2 == ret1->x1)
{
for(i=ret2->y1;i<ret2->y2 && !(i>ret1->y1 && i<ret1->y2) ;i++);
if (i>ret1->y1 && i<ret1->y2)
printf("%s","I rettangoli sono adiacenti perchè hanno un lato in comune");
}
return 1;
}
ad esempio questi rettangoli sono adiacenti perchè hanno una base in comune:
Rettangolo ret1;
Rettangolo ret2;
strcpy(ret1.nome, "Rettangolo1");
strcpy(ret2.nome, "Rettangolo2");
/*rettangolo uno */
ret1.x1 = 2; /*punto D*/
ret1.y1 = 2;
ret1.y2 = 10; /*punto B*/
ret1.x2 = 5;
/*rettangolo due */
ret2.x1 = 4; /*punto D*/
ret2.y1 = 10;
ret2.y2 = 13; /*punto B*/
ret2.x2 = 20;
e questi invece sono adiacenti perchè hanno un lato in comune
ret1.x1 = 2; /*punto D*/
ret1.y1 = 2;
ret1.y2 = 12; /*punto B*/
ret1.x2 = 5;
/*rettangolo due */
ret2.x1 = 4; /*punto D*/
ret2.y1 = 10;
ret2.y2 = 13; /*punto B*/
ret2.x2 = 2;