SHARE
TWEET

Untitled

a guest Oct 21st, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2. #include<graphics.h>
  3. using namespace std;
  4. int xmin,xmax,ymin,ymax;
  5. double slope(int x,int y,int x1,int y1)
  6. {
  7.     return (x-x1)/(y-y1);
  8. }
  9. double findx(double sl,int y,int x1,int y1)
  10. {
  11.     return (double)(x1+(1/sl)*(y-y1));
  12.  
  13. }
  14. double findy(double sl,int x,int x1,int y1)
  15. {
  16.     return (double)(y1+sl*(x-x1));
  17. }
  18.  
  19.   void drawwindow()
  20. {
  21.  
  22.     line(xmin,ymin,xmax,ymin);
  23.     line(xmin,ymin,xmin,ymax);
  24.     line(xmax,ymin,xmax,ymax);
  25.     line(xmin,ymax,xmax,ymax);
  26. }
  27. int main()
  28. {
  29.     // cout<<(5&10)<<endl;
  30.  
  31.     cout<<"ENTER XMIN YMIN :"<<endl;
  32.     cin>>xmin>>ymin;
  33.     cout<<"ENTER XMAX YMAX :"<<endl;
  34.     cin>>xmax>>ymax;
  35.     cout<<"Enter No of line: "<<endl;
  36.     int n;
  37.     cin>>n;
  38.     for(int i=0; i<n; i++)
  39.     {
  40.         int a,b,c,d,x=0,y=0;
  41.         cout<<"Enter first Point X and Y value :";
  42.         cin>>a>>b;
  43.         cout<<"Enter Second Point X and Y value :";
  44.         cin>>c>>d;
  45.         if(a>=xmin)
  46.         {
  47.             x=(x<<1)|0;
  48.         }
  49.         else
  50.             x=(x<<1)|1;
  51.         if(a<=xmax)
  52.         {
  53.             x=(x<<1);
  54.         }
  55.         else
  56.             x=(x<<1)|1;
  57.  
  58.         if(b>=ymin)
  59.         {
  60.             x=(x<<1);
  61.         }
  62.         else
  63.             x=(x<<1)|1;
  64.  
  65.         if(b<=ymax)
  66.         {
  67.             x=(x<<1);
  68.         }
  69.         else
  70.             x=(x<<1)|1;
  71.         if(c>=xmin)
  72.         {
  73.             y=(y<<1);
  74.         }
  75.         else
  76.             y=(y<<1)|1;
  77.         if(c<=xmax)
  78.         {
  79.             y=(y<<1);
  80.         }
  81.         else
  82.             y=(y<<1)|1;
  83.         if(d>=ymin)
  84.         {
  85.             y=(y<<1)|0;
  86.         }
  87.         else
  88.             y=(y<<1)|1;
  89.         if(d<=ymax)
  90.         {
  91.             y=(y<<1)|0;
  92.         }
  93.         else
  94.             y=(y<<1)|1;
  95.         if(x==0 && y==0)
  96.         {
  97.             cout<<endl<<"1st match !!!! .IN THE WINDOW"<<endl;
  98.             int gd=DETECT,v,gm;
  99.             initgraph(&gd,&gm,"");
  100.             drawwindow();
  101.             line(a,b,c,d);
  102.             delay(5000);
  103.             closegraph();
  104.         }
  105.         else if(x&y)
  106.         {
  107.             cout<<endl<<"2nd match !!!! .OUT OF THE WINDOW"<<endl;
  108.             int gd=DETECT,v,gm;
  109.             initgraph(&gd,&gm,"");
  110.             drawwindow();
  111.            line(a,b,c,d);
  112.             delay(5000);
  113.             closegraph();
  114.  
  115.         }
  116.         else
  117.         {
  118.             cout<<endl<<"3rd match !!!! CLIPPING CANDIDATE"<<endl;
  119.            // cout<<x<<" "<<y<<endl;
  120.            set<pair<int,int> >st;
  121.             double m=slope(a,b,c,d);
  122.             if(x&1)
  123.             {
  124.                 double xprime=findx(m,ymax,a,b);
  125.                 if(xprime<=xmax&&xprime>=xmin)
  126.                 st.insert({xprime,ymax});
  127.                   //  cout<<xprime<<" "<<ymax<<endl;
  128.             }
  129.             if(x&(1<<1))
  130.             {
  131.                 double xprime=findx(m,ymin,a,b);
  132.                 if(xprime<=xmax&&xprime>=xmin)
  133.                       st.insert({xprime,ymin});
  134.                 //    cout<<xprime<<" "<<ymin<<endl;
  135.  
  136.             }
  137.             if(x&(1<<2))
  138.             {
  139.                 double yprime=findy(m,xmax,a,b);
  140.                 if(yprime<=ymax&&yprime>=ymin)
  141.                       st.insert({xmax,yprime});
  142.                    // cout<<xmax<<" "<<yprime<<endl;
  143.             }
  144.             if(x&(1<<3))
  145.             {
  146.                 double yprime=findy(m,xmin,a,b);
  147.                 if(yprime<=ymax&&yprime>=ymin)
  148.                       st.insert({xmin,yprime});
  149.                //     cout<<xmin<<" "<<yprime<<endl;
  150.             }
  151.             ////////////////////////
  152.              if(y&1)
  153.             {
  154.                 double xprime=findx(m,ymax,c,d);
  155.                 if(xprime<=xmax&&xprime>=xmin)
  156.                       st.insert({xprime,ymax});
  157.                    // cout<<xprime<<" "<<ymax<<endl;
  158.             }
  159.             if(y&(1<<1))
  160.             {
  161.                 double xprime=findx(m,ymin,c,d);
  162.                 if(xprime<=xmax&&xprime>=xmin)
  163.                       st.insert({xprime,ymin});
  164.                   //  cout<<xprime<<" "<<ymin<<endl;
  165.  
  166.             }
  167.             if(y&(1<<2))
  168.             {
  169.                 double yprime=findy(m,xmax,c,d);
  170.                 if(yprime<=ymax&&yprime>=ymin)
  171.                       st.insert({xmax,yprime});
  172.                   //  cout<<xmax<<" "<<yprime<<endl;
  173.             }
  174.             if(y&(1<<3))
  175.             {
  176.                 double yprime=findy(m,xmin,c,d);
  177.                 if(yprime<=ymax&&yprime>=ymin)
  178.                       st.insert({xmin,yprime});
  179.                   //  cout<<xmin<<" "<<yprime<<endl;
  180.             }
  181.              int gd=DETECT,v,gm;
  182.             initgraph(&gd,&gm,"");
  183.             drawwindow();
  184.             if(x==0)
  185.             {
  186.                 for(auto p:st)
  187.                 {
  188.                     line(a,b,p.first,p.second);
  189.                 }
  190.             }
  191.             else if(y==0)
  192.             {
  193.                 for(auto p:st)
  194.                 {
  195.                     line(c,d,p.first,p.second);
  196.                 }
  197.             }
  198.             else{
  199.                 vector<pair<int,int > >V;
  200.                 for(auto p:st)
  201.                 {
  202.                     V.push_back(p);
  203.                 }
  204.             line(V[0].first,V[0].second,V[1].first,V[1].second);
  205.  
  206.  
  207.             }
  208.             delay(5000);
  209.             closegraph();
  210.  
  211.  
  212.  
  213.         }
  214.         cout<<endl;
  215.  
  216.     }
  217. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top