Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include<graphics.h>
  3. using namespace std;
  4.  
  5. // Defining region codes
  6. const int INSIDE = 0;
  7. const int LEFT = 1;
  8. const int RIGHT = 2;
  9. const int BOTTOM = 4;
  10. const int TOP = 8;
  11.  
  12. int x_max;
  13. int y_max;
  14. int x_min;
  15. int y_min;
  16. int computeCode(double x, double y)
  17. {
  18. int code = INSIDE;
  19.  
  20. if (x < x_min)
  21. code |= LEFT;
  22. else if (x > x_max)
  23. code |= RIGHT;
  24. if (y < y_min)
  25. code |= BOTTOM;
  26. else if (y > y_max)
  27. code |= TOP;
  28.  
  29. return code;
  30. }
  31. void drawwindow()
  32. {
  33.  
  34. line(x_min,y_min,x_max,y_min);
  35. line(x_min,y_min,x_min,y_max);
  36. line(x_max,y_min,x_max,y_max);
  37. line(x_min,y_max,x_max,y_max);
  38. }
  39. void Clip(double x1, double y1, double x2, double y2)
  40. {
  41.  
  42. int code1 = computeCode(x1, y1);
  43.  
  44. int code2 = computeCode(x2, y2);
  45. if(code1==0&&code2==0)
  46. {
  47. line(x1,y1,x2,y2);
  48. }
  49.  
  50. bool accept = false;
  51.  
  52. while (true)
  53. {
  54. if ((code1 == 0) && (code2 == 0))
  55. {
  56. accept = true;
  57. break;
  58. }
  59. else if (code1 & code2)
  60. {
  61. break;
  62. }
  63. else
  64. {
  65. int code_out;
  66. double x, y;
  67. if (code1 != 0)
  68. code_out = code1;
  69. else
  70. code_out = code2;
  71. if (code_out & TOP)
  72. {
  73. x = x1 + (x2 - x1) * (y_max - y1) / (y2 - y1);
  74. y = y_max;
  75. }
  76. else if (code_out & BOTTOM)
  77. {
  78. x = x1 + (x2 - x1) * (y_min - y1) / (y2 - y1);
  79. y = y_min;
  80. }
  81. else if (code_out & RIGHT)
  82. {
  83. y = y1 + (y2 - y1) * (x_max - x1) / (x2 - x1);
  84. x = x_max;
  85. }
  86. else if (code_out & LEFT)
  87. {
  88. y = y1 + (y2 - y1) * (x_min - x1) / (x2 - x1);
  89. x = x_min;
  90. }
  91. if (code_out == code1)
  92. {
  93. x1 = x;
  94. y1 = y;
  95. code1 = computeCode(x1, y1);
  96. }
  97. else
  98. {
  99. x2 = x;
  100. y2 = y;
  101. code2 = computeCode(x2, y2);
  102. }
  103. }
  104. }
  105. if (accept)
  106. {
  107. line(x1,y1,x2,y2);
  108. }
  109.  
  110. }
  111.  
  112. int main()
  113. {
  114. cout<<"ENTER XMIN YMIN :"<<endl;
  115. cin>>x_min>>y_min;
  116. cout<<"ENTER XMAX YMAX :"<<endl;
  117. cin>>x_max>>y_max;
  118. cout<<"Enter No of Points "<<endl;
  119. int n;
  120. cin>>n;
  121. vector<pair<int,int> >v1;
  122.  
  123. for(int i=1;i<=n;i++)
  124. {
  125. cout<<"Input x"<<i<<" y"<<i<<": ";
  126. int x1,y1;
  127. cin>>x1>>y1;
  128. v1.push_back({x1,y1});
  129. }
  130. int gd=DETECT,v,gm;
  131. initgraph(&gd,&gm,"");
  132. drawwindow();
  133. for(int i=1;i<n;i++)
  134. {
  135. int a=v1[i].first;
  136. int b=v1[i].second;
  137. int c=v1[i-1].first;
  138. int d=v1[i-1].second;
  139. Clip(a, b, c, d);
  140.  
  141. }
  142. int a=v1[0].first;
  143. int b=v1[0].second;
  144. int c=v1[n-1].first;
  145. int d=v1[n-1].second;
  146. Clip(a, b, c, d);
  147.  
  148.  
  149.  
  150. getch();
  151. closegraph();
  152.  
  153.  
  154.  
  155. return 0;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement