Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define intt double
- using namespace std ;
- int Xmin ,Xmax,Ymin,Ymax ;
- int top=8 ,btm=4,rgt=2,lft=1 ;
- int gen(int x,int y)
- {
- int p=0 ;
- if(x<Xmin)
- p=p|lft ;
- if(x>Xmax)
- p=p|rgt ;
- if(y<Ymin)
- p=p|btm ;
- if(y>Ymax)
- p=p|top ;
- return p ;
- }
- void call(intt x1,intt y1,intt x2,intt y2)
- {
- int c1=gen(x1,y1) ;
- int c2=gen(x2,y2) ;
- bool flag=0 ;
- while(1)
- {
- if(c1==0 && c2==0)
- {
- flag=1 ;
- break ;
- }
- else if(c1&c2)
- {
- flag=0 ;
- break;
- }
- else
- {
- int co;
- intt x, y;
- if (c1!= 0) co = c1;
- else co = c2;
- if (co&lft)
- {
- y = y1 + (y2 - y1) * (Xmin - x1) / (x2 - x1);
- x = Xmin;
- }
- else if (co & rgt)
- {
- y = y1 + (y2 - y1) * (Xmax - x1) / (x2 - x1);
- x = Xmax;
- }
- else if (co& btm)
- {
- x = x1 + (x2 - x1) * (Ymin - y1) / (y2 - y1);
- y = Ymin;
- }
- else if (co & top)
- {
- x = x1 + (x2 - x1) * (Ymax - y1) / (y2 - y1);
- y = Ymax;
- }
- if (co == c1)
- {
- x1 = x;
- y1 = y;
- c1 = gen(x1, y1);
- }
- else
- {
- x2 = x;
- y2 = y;
- c2 = gen(x2, y2);
- }
- }
- }
- if(flag)
- {
- cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl ;
- }
- else {
- cout<<"Sorry" ;
- }
- }
- int main()
- {
- cout<<"Give me boundary : " ;
- cin>>Xmin>>Ymin>>Xmax>>Ymax ;
- int x1,y1,x2,y2 ;
- cout<<"Give me line \n" ;
- while(cin>>x1>>y1>>x2>>y2)
- {
- call(x1,y1,x2,y2) ;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement