Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<graphics.h>
- using namespace std;
- int xmin,xmax,ymin,ymax;
- double slope(int x,int y,int x1,int y1)
- {
- return (x-x1)/(y-y1);
- }
- double findx(double sl,int y,int x1,int y1)
- {
- return (double)(x1+(1/sl)*(y-y1));
- }
- double findy(double sl,int x,int x1,int y1)
- {
- return (double)(y1+sl*(x-x1));
- }
- void drawwindow()
- {
- line(xmin,ymin,xmax,ymin);
- line(xmin,ymin,xmin,ymax);
- line(xmax,ymin,xmax,ymax);
- line(xmin,ymax,xmax,ymax);
- }
- int main()
- {
- // cout<<(5&10)<<endl;
- cout<<"ENTER XMIN YMIN :"<<endl;
- cin>>xmin>>ymin;
- cout<<"ENTER XMAX YMAX :"<<endl;
- cin>>xmax>>ymax;
- cout<<"Enter No of line: "<<endl;
- int n;
- cin>>n;
- for(int i=0; i<n; i++)
- {
- int a,b,c,d,x=0,y=0;
- cout<<"Enter first Point X and Y value :";
- cin>>a>>b;
- cout<<"Enter Second Point X and Y value :";
- cin>>c>>d;
- if(a>=xmin)
- {
- x=(x<<1)|0;
- }
- else
- x=(x<<1)|1;
- if(a<=xmax)
- {
- x=(x<<1);
- }
- else
- x=(x<<1)|1;
- if(b>=ymin)
- {
- x=(x<<1);
- }
- else
- x=(x<<1)|1;
- if(b<=ymax)
- {
- x=(x<<1);
- }
- else
- x=(x<<1)|1;
- if(c>=xmin)
- {
- y=(y<<1);
- }
- else
- y=(y<<1)|1;
- if(c<=xmax)
- {
- y=(y<<1);
- }
- else
- y=(y<<1)|1;
- if(d>=ymin)
- {
- y=(y<<1)|0;
- }
- else
- y=(y<<1)|1;
- if(d<=ymax)
- {
- y=(y<<1)|0;
- }
- else
- y=(y<<1)|1;
- if(x==0 && y==0)
- {
- cout<<endl<<"1st match !!!! .IN THE WINDOW"<<endl;
- int gd=DETECT,v,gm;
- initgraph(&gd,&gm,"");
- drawwindow();
- line(a,b,c,d);
- delay(5000);
- closegraph();
- }
- else if(x&y)
- {
- cout<<endl<<"2nd match !!!! .OUT OF THE WINDOW"<<endl;
- int gd=DETECT,v,gm;
- initgraph(&gd,&gm,"");
- drawwindow();
- line(a,b,c,d);
- delay(5000);
- closegraph();
- }
- else
- {
- cout<<endl<<"3rd match !!!! CLIPPING CANDIDATE"<<endl;
- // cout<<x<<" "<<y<<endl;
- set<pair<int,int> >st;
- double m=slope(a,b,c,d);
- if(x&1)
- {
- double xprime=findx(m,ymax,a,b);
- if(xprime<=xmax&&xprime>=xmin)
- st.insert({xprime,ymax});
- // cout<<xprime<<" "<<ymax<<endl;
- }
- if(x&(1<<1))
- {
- double xprime=findx(m,ymin,a,b);
- if(xprime<=xmax&&xprime>=xmin)
- st.insert({xprime,ymin});
- // cout<<xprime<<" "<<ymin<<endl;
- }
- if(x&(1<<2))
- {
- double yprime=findy(m,xmax,a,b);
- if(yprime<=ymax&&yprime>=ymin)
- st.insert({xmax,yprime});
- // cout<<xmax<<" "<<yprime<<endl;
- }
- if(x&(1<<3))
- {
- double yprime=findy(m,xmin,a,b);
- if(yprime<=ymax&&yprime>=ymin)
- st.insert({xmin,yprime});
- // cout<<xmin<<" "<<yprime<<endl;
- }
- ////////////////////////
- if(y&1)
- {
- double xprime=findx(m,ymax,c,d);
- if(xprime<=xmax&&xprime>=xmin)
- st.insert({xprime,ymax});
- // cout<<xprime<<" "<<ymax<<endl;
- }
- if(y&(1<<1))
- {
- double xprime=findx(m,ymin,c,d);
- if(xprime<=xmax&&xprime>=xmin)
- st.insert({xprime,ymin});
- // cout<<xprime<<" "<<ymin<<endl;
- }
- if(y&(1<<2))
- {
- double yprime=findy(m,xmax,c,d);
- if(yprime<=ymax&&yprime>=ymin)
- st.insert({xmax,yprime});
- // cout<<xmax<<" "<<yprime<<endl;
- }
- if(y&(1<<3))
- {
- double yprime=findy(m,xmin,c,d);
- if(yprime<=ymax&&yprime>=ymin)
- st.insert({xmin,yprime});
- // cout<<xmin<<" "<<yprime<<endl;
- }
- int gd=DETECT,v,gm;
- initgraph(&gd,&gm,"");
- drawwindow();
- if(x==0)
- {
- for(auto p:st)
- {
- line(a,b,p.first,p.second);
- }
- }
- else if(y==0)
- {
- for(auto p:st)
- {
- line(c,d,p.first,p.second);
- }
- }
- else{
- vector<pair<int,int > >V;
- for(auto p:st)
- {
- V.push_back(p);
- }
- line(V[0].first,V[0].second,V[1].first,V[1].second);
- }
- delay(5000);
- closegraph();
- }
- cout<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement