/*----INF 111 2004/2005 oct 2004--------------------------*/
/*TP4, section2 "régions, une correction par Laure Gonnord*/
/*-------------------------------------------------------*/

#include<stdio.h>

/*  le type bool est égal au type entier, mais comme ca*/
/*  on sait ce qu'on fait.*/
#define bool int

/*dit si les 3 nbs sont tous différents*/
bool tous_diff(int x,int y,int z)
{
  return ((x!=y) && (y!=z) && (z!=x));
}

/*dessin du bloc dans le cas des régions simples*/
void dessine_bloc(int case1,int case2,int case3)
{
  printf("          |          |          \n");
  printf("    %d     |    %d     |    %d    \n",case1,case2,case3);
  printf("          |          |          \n");
}

/*dessin d'un bloc avec reg = region dessinée [reg]*/
void dessine_bloc2(int case1,int case2,int case3,int reg)
{
  printf("          |          |          \n");
  if ((reg != case1) && (reg != case2) && (reg !=case3))
    {
      printf("    %d     |    %d     |    %d   \n",case1,case2,case3);
    }
  else
    {
      if (reg == case1)
	{
	  printf("    [%d]   |    %d     |    %d    \n",case1,case2,case3);	  
	}
      else
	{
	  if (reg == case2)
	    {
	      printf("    %d     |   [%d]    |    %d    \n",case1,case2,case3);
	    }
	  else
	    {
	      printf("     %d    |    %d     |   [%d]   \n",case1,case2,case3);
	    }
	}
    };
  printf("          |          |          \n");
}


/*symboles P1 et P2*/
char symbole(int i)
{
  if (i==1)
    {return 'o';}
  else
    {return '*';};
}

/* dessine la ligne avec le premier symbole au premier tiers,  */
/*   et deuxieme symbole au deuxieme tiers  */
void dessine_ligne(char symb1,char symb2)
{
  printf("----------%c----------%c----------\n",symb1,symb2);
}


/*dessin des régions simples, on suppose x1 diff de x2 et y1 diff de y2*/
void dessine_region(x1,y1,x2,y2)
{
  int symb1,symb2,symb3,symb4;
  if (x2>x1)
    {
      if (y2>y1)
	{
	  symb1 = '-';
	  symb2 = symbole(2);  
	  symb3 = symbole(1);
	  symb4 = '-';
	}
      else
	{
	  symb1 = symbole(1);
	  symb2 = '-';  
	  symb3 = '-';
	  symb4 = symbole(2);
	}
    }
  else
    {
      if (y2>y1)
	{
	  symb1 = symbole(2);
	  symb2 = '-';  
	  symb3 = '-';
	  symb4 = symbole(1);
	}
      else
	{
	  symb1 = '-';
	  symb2 = symbole(1);  
	  symb3 = symbole(2);
	  symb4 = '-';
	}
    }
  dessine_bloc(1,2,3);
  dessine_ligne(symb1,symb2);
  dessine_bloc(4,5,6);
  dessine_ligne(symb3,symb4);
  dessine_bloc(7,8,9);
}

/*on sait deja que xg<xd, et yh<yb*/
/*cette fonction cherche la region de P3*/
int choisit_region(int xg,int xd,int yb,int yh,int x3,int y3)
{
 if (y3>yh && x3<xg)
   { return(1); }
 else 
   {
     if (y3>yh && x3>xg && x3<xd)
       { return(2); }
     else
       {
	 if (y3>yh && x3>xd)
	   { return(3); }
	 else 
	   {
	     if (yb<y3 && y3<yh && x3<xg)
	       { return(4); }
	     else
	       {
		 if (yb<y3 && y3<yh && xg<x3 && x3<xd)
		   { return(5); }
		 else 
		   {
		     if (yb<y3 && y3<yh && x3>xd)
		       { return(6); }
		     else 
		       {
			 if (y3<yb && x3<xg)
			   { return(7); }
			 else 
			   {
			     if (y3<yb && xg<x3 && x3<xd)
			       { return(8); }
			     else 
			       {
				 if (y3<yb && xd<x3)
				   { return(9); }
				 else
				   { return(-1);}
			       }
			   }
		       }
		   }
	       }
	   }
       }
   }
}

/*dessin avec P3, on suppose x1,x2,x3 diff et yi pareil*/
void dessine_region2(x1,y1,x2,y2,x3,y3)
{
  int symb1,symb2,symb3,symb4,reg;
  if (x2>x1)
    {
      if (y2>y1)
	{
	  symb1 = '-';
	  symb2 = symbole(2);  
	  symb3 = symbole(1);
	  symb4 = '-';
	  reg=choisit_region(x1,x2,y1,y2,x3,y3);
	    }
      else
	{
	  symb1 = symbole(1);
	  symb2 = '-';  
	  symb3 = '-';
	  symb4 = symbole(2);
	  reg=choisit_region(x1,x2,y2,y1,x3,y3);
	}
    }
  else
    {
      if (y2>y1)
	{
	  symb1 = symbole(2);
	  symb2 = '-';  
	  symb3 = '-';
	  symb4 = symbole(1);
	  reg=choisit_region(x2,x1,y1,y2,x3,y3);
	}
      else
	{
	  symb1 = '-';
	  symb2 = symbole(1);  
	  symb3 = symbole(2);
	  symb4 = '-';
	  reg=choisit_region(x2,x1,y2,y1,x3,y3);
	}
    }
  dessine_bloc2(1,2,3,reg);
  dessine_ligne(symb1,symb2);
  dessine_bloc2(4,5,6,reg);
  dessine_ligne(symb3,symb4);
  dessine_bloc2(7,8,9,reg);
}

int main(void)
{
  int x1,y1,x2,y2,x3,y3;

  /*Demande des coordonnées*/
  printf("Donnez les coordonnées de P1, abscisse ?\n");
  scanf("%d",&x1);
  printf("ordonnée ?\n");
  scanf("%d",&y1);
  printf("Donnez les coordonnées de P2, abscisse ?\n");
  scanf("%d",&x2);
  printf("ordonnée ?\n");
  scanf("%d",&y2);
  printf("Donnez les coordonnées de P3, abscisse ?\n");
  scanf("%d",&x3);
  printf("ordonnée ?\n");
  scanf("%d",&y3);


  /*On dessine si x1 different de x2, y1 diff de y2*/
  if (tous_diff(x1,x2,x3) && tous_diff(y1,y2,y3))
    {
      /*dessin sans appartenance à region*/
      dessine_region(x1,y1,x2,y2);

      /*dessin avec le 3ieme point*/
      dessine_region2(x1,y1,x2,y2,x3,y3);
    }
  else
    {printf("mauvaises coordonnées\n");}
  return 0;
}
