[C] Calcolo di sovrapposizioni e di adiacenze

di il
4 risposte

[C] Calcolo di sovrapposizioni e di adiacenze

Ciao a tutti.

ho bisogno di un aiuto per un programmino in c composto da due funzioni: una che mi stampi a video se due strutture rettangolari sono o no sovrapposte e una che mi stampi a video se sono o no adiacenti (cioè se hanno in comune uno o più punti di uno dei lati)

le strutture rettangolari sono composte da 4 coordinate (x1 e y1 che sono il vertice in basso a sinistra e x2 e y2 che sono il vertice in alto a destra) e un puntatore char al nome.
struct rettangolo
{
int x1,y1,x2,y2;
char *nome;
};
le due funzioni devono essere chiamate con due argomenti, che sono i nomi delle due strutture rettangolari.

avete qualche idea?

grazie!

4 Risposte

  • Re: [C] Calcolo di sovrapposizioni e di adiacenze

    Sovrapposte intendi che hanno più di 1 punto in comune? o hanno tutti i punti in comune?
  • Re: [C] Calcolo di sovrapposizioni e di adiacenze

    No, non completamente. però per quel controllo ho risolto.

    mi manca il controllo delle adiacenze, cioè quando due rettangoli sono attaccati (se hanno una parte di base o di altezza in comune praticamente)
  • Re: [C] Calcolo di sovrapposizioni e di adiacenze

    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;
  • Re: [C] Calcolo di sovrapposizioni e di adiacenze

    Ciao,

    il tuo codice va bene, ma solo in certi casi.
    ad esempio se due rettangolo hanno un solo vertice in comune non mi stampa nulla e per quello che mi serve la funzione, bisogna anche che funzioni con coordinate negative!

    comunque è un ottimo inizio! se hai altre idee sulle modifiche da fare, dimmi pure!
Devi accedere o registrarti per scrivere nel forum
4 risposte