Advertisement
saske_7

intersecting_line.cpp

Oct 15th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std ;
  4. #define M 100
  5. #define pf printf
  6. #define sf scanf
  7. #define sf1(x) scanf("%d",&x)
  8. #define sf2(x,y) scanf("%d %d",&x,&y)
  9. #define pf1(x) printf("%d\n",x)
  10. #define pf2(x,y) printf("%d %d\n",x,y)
  11. #define rep(i,n) for(i = 0 ;i< n ; i++)
  12. #define pb push_back
  13.  
  14. struct kkk {
  15. double a, b, c , m  , x1 , y1 , x2 ,y2;
  16.  
  17. }data[5];
  18.  
  19. void call(double x1, double y1 , double x2 , double y2 , int tag){
  20. data[tag].x1 =  x1;
  21. data[tag].x2 =  x2;
  22.  
  23. data[tag].y1 =  y1;
  24. data[tag].y2 =  y2;
  25.  
  26. if(y1 ==  y2){
  27.   data[tag].a = 0;
  28.   data[tag].b = 1;
  29.   data[tag].c = -y1;
  30.   data[tag].m = 0;
  31.  
  32.   return ;
  33. }
  34.  
  35. else if(x1 == x2 ){
  36.   data[tag].a = 1;
  37.   data[tag].b = 0;
  38.   data[tag].c = -x1;
  39.   data[tag].m = 0;
  40.   return ;
  41. }
  42. else {
  43.  
  44. double ret ;
  45.   ret =(double) (y2 - y1)/(x2 -  x1);
  46.   data[tag].a = ret ;
  47.   data[tag].b = -1;
  48.   data[tag].c = -ret*x1  +y1;
  49.   data[tag].m = ret ;
  50.  
  51.  
  52. return ;
  53.  
  54.   }
  55. }
  56.  
  57. ///-1 if paralll
  58. ///0 ifi intersecting line
  59. ///else if line ,,
  60.  
  61. int parall(void){
  62. if(data[1].m  == data[2].m){
  63. if(data[1].a !=  data[2].a ||
  64.      data[1].b !=  data[2].b)
  65.       return 0;
  66.   if(data[1].c ==  data[2].c &&
  67.      data[1].a ==  data[2].a &&
  68.      data[1].b ==  data[2].b  ){
  69.     return 1;
  70.  
  71.   }
  72.   else
  73.     return -1;
  74.  
  75. }
  76.  
  77. else
  78.   return 0 ;
  79.  
  80. }
  81. double p_1 , p_2 ;
  82. int i_sec(void){
  83.  
  84. double ret , ret1, ret2 , x1 ,y1 ,x2 ,y2;
  85. double px1, px2 , py1 ,py2;
  86.  
  87.     x1 = data[1].x1;
  88.     y1 = data[1].y1;
  89.     x2 = data[1].x2;
  90.     y2 = data[1].y2;
  91.  
  92.     px1 = data[2].x1;
  93.     py1 = data[2].y1;
  94.     px2 = data[2].x2;
  95.     py2 = data[2].y2;
  96.  
  97. double a1, b1 ,c1 , a2 ,b2 ,c2 ;
  98.   a1 = data[1].a ;
  99.   b1 = data[1].b ;
  100.   c1 = data[1].c ;
  101.  
  102.   a2 = data[2].a ;
  103.   b2 = data[2].b ;
  104.   c2 = data[2].c ;
  105.  
  106. double hold ,k1 ,k2;
  107.   hold = a1*b2 - a2*b1 ;
  108.   k1 = (double) (b1*c2 - b2*c1)/hold ;
  109.   k2 = (double)(c1*a2 - c2*a1)/hold ;
  110. /*
  111.   pf("from insec ....%lf %lf %lf\n", k1, k2 , hold);
  112. ////
  113.   ret = sqrt( (x1- x2)*(x1- x2) + (y1-y2)*(y1-y2) );
  114.  
  115.     ret1 = sqrt( (x1- k1)*(x1- k1) + (y1- k2)*(y1- k2) );
  116.     ret2 = sqrt( (x2- k1)*(x2- k1) + (y2- k2)*(y2- k2) );
  117.  
  118.     int flag = 0;
  119.     if(ret1 + ret2 - ret <= .000001 && ret - ret1 -ret2 <= .0000001)
  120.       flag =1;
  121. */
  122. //if(flag ==1 ){
  123.   p_1  = k1 ;
  124.   p_2 =  k2 ;
  125.   return 1;
  126. //}
  127.  
  128. }
  129.  
  130.  
  131. int main(){
  132.   //freopen("in.txt","r",stdin);
  133. //freopen("out.txt","w",stdout);
  134.  
  135. int i, j , k ,tc;
  136. sf1(tc);
  137. pf("INTERSECTING LINES OUTPUT\n");
  138.   while(tc--){
  139.     double x1 ,x2, y1, y2 , px1 , px2 , py1,py2 ;
  140.     scanf("%lf%lf %lf%lf %lf%lf %lf%lf",&x1,&y1 ,&x2, &y2 , &px1,&py1,&px2,&py2 );
  141.  
  142.     call(x1, y1,x2 ,y2, 1 );
  143.     call(px1 , py1 , px2 , py2 , 2);
  144. ///*
  145.     k = parall();
  146.     if(k ==  -1) {
  147.         pf("NONE\n");
  148.         continue ;
  149.     }
  150.  
  151.     else if(k == 1){
  152.      pf("LINE\n");
  153.      continue ;
  154.  
  155.     }
  156. //*/
  157.     k =  i_sec();
  158.     if(k == -1) pf("NONE\n");
  159.     else{
  160.       pf("POINT %.2lf %.2lf\n",p_1 , p_2);
  161.  
  162.  
  163.     }
  164.  
  165.   }
  166. pf("END OF OUTPUT\n");
  167. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement