Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement