Advertisement
Guest User

line cliping

a guest
Oct 23rd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define intt double
  3. using namespace std ;
  4. int Xmin ,Xmax,Ymin,Ymax ;
  5. int top=8 ,btm=4,rgt=2,lft=1 ;
  6.  
  7.  
  8. int gen(int x,int y)
  9. {
  10.     int p=0 ;
  11.     if(x<Xmin)
  12.     p=p|lft ;
  13.     if(x>Xmax)
  14.     p=p|rgt ;
  15.     if(y<Ymin)
  16.     p=p|btm ;
  17.     if(y>Ymax)
  18.     p=p|top ;
  19.     return p ;
  20. }
  21. void call(intt x1,intt y1,intt x2,intt y2)
  22. {
  23.     int c1=gen(x1,y1) ;
  24.     int c2=gen(x2,y2) ;
  25.  
  26.     bool flag=0 ;
  27.  
  28.     while(1)
  29.     {
  30.         if(c1==0 && c2==0)
  31.         {
  32.             flag=1 ;
  33.             break ;
  34.         }
  35.         else if(c1&c2)
  36.         {
  37.             flag=0 ;
  38.             break;
  39.         }
  40.         else
  41.         {
  42.              int co;
  43.             intt  x, y;
  44.  
  45.  
  46.             if (c1!= 0)  co = c1;
  47.  
  48.             else  co = c2;
  49.  
  50.  
  51.            if (co&lft)
  52.             {
  53.                 y = y1 + (y2 - y1) * (Xmin - x1) / (x2 - x1);
  54.                 x = Xmin;
  55.             }
  56.             else if (co & rgt)
  57.             {
  58.  
  59.                 y = y1 + (y2 - y1) * (Xmax - x1) / (x2 - x1);
  60.                 x = Xmax;
  61.             }
  62.             else if (co& btm)
  63.             {
  64.  
  65.                 x = x1 + (x2 - x1) * (Ymin - y1) / (y2 - y1);
  66.                 y = Ymin;
  67.             }
  68.            else if (co & top)
  69.             {
  70.  
  71.                 x = x1 + (x2 - x1) * (Ymax - y1) / (y2 - y1);
  72.                 y = Ymax;
  73.             }
  74.              if (co == c1)
  75.             {
  76.                 x1 = x;
  77.                 y1 = y;
  78.                 c1 = gen(x1, y1);
  79.             }
  80.             else
  81.             {
  82.                 x2 = x;
  83.                 y2 = y;
  84.                 c2 = gen(x2, y2);
  85.             }
  86.         }
  87.     }
  88.  
  89.     if(flag)
  90.     {
  91.         cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl ;
  92.     }
  93.     else {
  94.         cout<<"Sorry" ;
  95.     }
  96. }
  97.  
  98. int main()
  99. {
  100.     cout<<"Give me boundary : " ;
  101.     cin>>Xmin>>Ymin>>Xmax>>Ymax ;
  102.  
  103.     int x1,y1,x2,y2 ;
  104.     cout<<"Give me line \n" ;
  105.     while(cin>>x1>>y1>>x2>>y2)
  106.     {
  107.         call(x1,y1,x2,y2) ;
  108.  
  109.     }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement