Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. #include <GLUT/GLUT.h>
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5.  
  6.  
  7. void display();
  8. using namespace std;
  9. float xmin=-100;
  10. float ymin=-100;
  11. float xmax=50;
  12. float ymax=50;
  13. float xd1,yd1,xd2,yd2;
  14.  
  15. void init(void)
  16. {
  17. glClearColor(0.0,0,0,0);
  18. glMatrixMode(GL_PROJECTION);
  19. gluOrtho2D(-300,300,-300,300);
  20. }
  21.  
  22. int code(float x,float y)
  23. {
  24. int c=0;
  25. if(y>ymax)c=8;
  26. if(y<ymin)c=4;
  27. if(x>xmax)c=c|2;
  28. if(x<xmin)c=c|1;
  29. return c;
  30. }
  31.  
  32. void cohen_Line(float x1,float y1,float x2,float y2)
  33. {
  34. int c1=code(x1,y1);
  35. int c2=code(x2,y2);
  36. float m=(y2-y1)/(x2-x1);
  37. while((c1|c2)>0)
  38. {
  39. if((c1 & c2)>0)
  40. {
  41. exit(0);
  42. }
  43.  
  44. float xi=x1;float yi=y1;
  45. int c=c1;
  46. if(c==0)
  47. {
  48. c=c2;
  49. xi=x2;
  50. yi=y2;
  51. }
  52. float x = 0.0,y = 0.0;
  53. if((c & 8)>0)
  54. {
  55. y=ymax;
  56. x=xi+ 1.0/m*(ymax-yi);
  57. }
  58. else
  59. if((c & 4)>0)
  60. {
  61. y=ymin;
  62. x=xi+1.0/m*(ymin-yi);
  63. }
  64. else
  65. if((c & 2)>0)
  66. {
  67. x=xmax;
  68. y=yi+m*(xmax-xi);
  69. }
  70. else
  71. if((c & 1)>0)
  72. {
  73. x=xmin;
  74. y=yi+m*(xmin-xi);
  75. }
  76.  
  77. if(c==c1)
  78. {
  79. xd1=x;
  80. yd1=y;
  81. c1=code(xd1,yd1);
  82. }
  83.  
  84. if(c==c2)
  85. {
  86. xd2=x;
  87. yd2=y;
  88. c2=code(xd2,yd2);
  89. }
  90. }
  91.  
  92. display();
  93.  
  94. }
  95. int i = 0;
  96. void useMouse(int button, int state, int x, int y)
  97. {
  98. if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
  99. //cout << "here " << x << " "<< 600 - y << endl;
  100. if (i == 1){
  101. xd2 = x - 300;
  102. yd2 = (600 - y) - 300;
  103.  
  104. cout << xd2 << " " << yd2 << endl;
  105. i++;
  106. }
  107. if (i == 0){
  108. xd1 = x - 300;
  109. yd1 = (600 - y) - 300;
  110. cout << xd1 << " " << yd1 << endl;
  111. i++;
  112. }
  113.  
  114. }
  115. }
  116. void useKey(unsigned char key,int x,int y)
  117. {
  118. if(key=='q')
  119. { cout<<"good! ";
  120. cohen_Line(xd1,yd1,xd2,yd2);
  121. glFlush();
  122. }
  123. }
  124. void display()
  125. {
  126.  
  127. glMatrixMode(GL_MODELVIEW);
  128. glLoadIdentity();
  129.  
  130. glClear(GL_COLOR_BUFFER_BIT);
  131.  
  132. glColor3f(0.0,1.0,1.0);
  133.  
  134. glBegin(GL_LINE_LOOP);
  135. glVertex2i(xmin,ymin);
  136. glVertex2i(xmin,ymax);
  137. glVertex2i(xmax,ymax);
  138. glVertex2i(xmax,ymin);
  139. glEnd();
  140. glColor3f(1.0,1.0,0.0);
  141. if (i == 2){
  142. glBegin(GL_LINES);
  143. glVertex2i(xd1,yd1);
  144. glVertex2i(xd2,yd2);
  145. glEnd();
  146. glFlush();
  147. }
  148. glFlush();
  149.  
  150.  
  151. }
  152.  
  153.  
  154. int main(int argc,char** argv)
  155. {
  156.  
  157.  
  158. glutInit(&argc,argv);
  159. glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
  160. glutInitWindowSize(600,600);
  161. glutInitWindowPosition(0,0);
  162. glutCreateWindow("~");
  163. glutDisplayFunc(display);
  164. glutKeyboardFunc(useKey);
  165. glutMouseFunc(useMouse);
  166. init();
  167. glutMainLoop();
  168.  
  169. return 0;
  170. }
  171. //сделать чтобы несколько прямых рисовалось ,
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement