#include <math.h>
#include <stdlib.h>
#include "types.h"

/*----------------------------------------------------------------*/
/* Lab 2, Var 1 */
/*----------------------------------------------------------------*/
RelDrepte inters_dr(Dreapta d1, Dreapta d2, Punct& p)
{
   TCoord dt;
   if( d1.A*d2.B == d1.B*d2.A )
   {
     if( d1.A*d2.C == d1.C*d2.A ) return incident;
     else return vid;  
   }
   else
   {
      dt  = (d1.A*d2.B - d1.B*d2.A) ;
      p.x = (d1.C*d2.B - d1.B*d2.C) / dt;
      p.y = (d1.A*d2.C - d1.C*d2.A) / dt;
      return inters;
   }
}
//    A               d            x           y
// A1 B1 C1         A1 B1        C1 B1       A1 C1
// A2 B2 C2         A2 B2        C2 B2       A2 C2

/*----------------------------------------------------------------*/
/* Lab 2, Var 2 */
/*----------------------------------------------------------------*/
RelDrepte inters_dr_seg(Dreapta d, Segment s, Punct& p)
{
   int i, j, k;
   i = poz_punct_dr(d, s.p1);
   j = poz_punct_dr(d, s.p2);
   k = i*j;
   if( k == 0 )
   {
      if(i == 0) p = s.p2; else       /* s.p2 este punctul de intersectie */
      if(j == 0) p = s.p1; else       /* s.p1 este punctul de intersectie */ 
                 return incident;     /* segmentul se afla pe dreapta */
      return inters;
   }
   else if( k > 0 ) /* p1 si p2 sunt de aceeasi parte a d */
   {
      return vid ;   /* dreapta si segmentul nu se intersecteaza */
   }
   else /* k < 0 => p1 si p2 sunt de parti diferite a d */
   {
   
      return inters;
   }
}
/*----------------------------------------------------------------*/
/* Lab 2, Var 3 */
/*----------------------------------------------------------------*/

/*----------------------------------------------------------------*/
/* Lab 2, Var 4 */
/*----------------------------------------------------------------*/

/*----------------------------------------------------------------*/
int sarrus(Punct &p1, Punct &p2, Punct &p3)
{
   return p2.x*p1.y + p1.x*p3.y + p3.x*p2.y -
          p1.x*p2.y - p3.x*p1.y - p2.x*p3.y ; 
}

int poz_punct_vec(Segment &v, Punct &p){ return sarrus(v.p1, v.p2, p); }
int poz_punct_dr(Dreapta &d, Punct &p){ return d.A*p.x + d.B*p.y + d.C; }


/*----------------------------------------------------------------*/
          
