Guest User

Untitled

a guest
Dec 16th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include<GL/glut.h>
  5. #include<GL/gl.h>
  6. #include<GL/glu.h>
  7.  
  8. float xa,ya,xb,yb;
  9. int id;
  10.  
  11. void linebrsnm(float xi, float yi, float xf, float yf)
  12. {
  13. float dx = (xf - xi), dy = (yf - yi);
  14. float slope = dy / dx;
  15. float x, y, xlast, ylast;
  16.  
  17.  
  18. glBegin(GL_POINTS);
  19. float p = 2 * dy - dx;
  20. float q = -(2 * dx + dy);
  21. //glVertex2f(0, 0);
  22.  
  23. if(dx==0) //lines parallel to y-axis
  24. {
  25. if(yi<yf)
  26. {
  27. y=yi;
  28. x=xi;
  29. glColor3f(0,0,1);
  30. for(int i=0;i<abs(dy);i++)
  31. {
  32. glVertex2f(x, y);
  33. y++;
  34. }
  35. }
  36. else
  37. {
  38. y=yf;
  39. x=xf;
  40. glColor3f(0,0,1);
  41. for(int i=0;i<abs(dy);i++)
  42. {
  43. glVertex2f(x, y);
  44. y++;
  45. }
  46. }
  47. }
  48. else if(dy==0) //lines parallel to x-axis
  49. {
  50. if(xi<xf)
  51. {
  52. y=yi;
  53. x=xi;
  54. glColor3f(0,0,1);
  55. for(int i=0;i<abs(dx);i++)
  56. {
  57. glVertex2f(x, y);
  58. x++;
  59. }
  60. }
  61. else
  62. {
  63. y=yf;
  64. x=xf;
  65. glColor3f(0,1,0);
  66. for(int i=0;i<abs(dx);i++)
  67. {
  68. glVertex2f(x, y);
  69. x++;
  70. }
  71. }
  72. }
  73. else if(abs(dx)>abs(dy))
  74. {
  75. if(xi<xf)
  76. {
  77. x=xi;
  78. y=yi;
  79. xlast=xf;
  80. if(yi<yf) //octant 1
  81. {
  82. glColor3f(1,0,0);
  83. glVertex2f(x, y);
  84. while(x<xlast)
  85. {
  86. x++;
  87. if(p<0)
  88. p+=2*dy;
  89. else
  90. {
  91. y++;
  92. p+=2*(dy-dx);
  93. }
  94. glVertex2f(x, y);
  95. }
  96. }
  97. else //octant 8
  98. {
  99. glColor3f(1,1,0);
  100. glVertex2f(x, y);
  101. while(x<xlast)
  102. {
  103. x++;
  104. if(p<0)
  105. //p+=2*(dy+dx);
  106. p-=2*dy;
  107. else
  108. {
  109. y--;
  110. //p+=2*dy;
  111. p-=2*(dy+dx);
  112. }
  113. glVertex2f(x, y);
  114. }
  115. }
  116. }
  117. else
  118. {
  119. x=xf;
  120. y=yf;
  121. xlast=xi;
  122. if(yi<yf) //octant 4
  123. {
  124. glColor3f(0,1,1);
  125. glVertex2f(x, y);
  126. while(x<xlast)
  127. {
  128. x++;
  129. if(p<0)
  130. p+=2*dy;
  131. else
  132. {
  133. y--;
  134. p+=2*(dy+dx);
  135. }
  136. glVertex2f(x, y);
  137. }
  138. }
  139. else //octant 5
  140. {
  141. glColor3f(1,0,1);
  142. glVertex2f(x, y);
  143. while(x<xlast)
  144. {
  145. x++;
  146. if(p<0)
  147. //p-=2*(dy-dx);
  148. p-=2*dy;
  149. else
  150. {
  151. y++;
  152. //p-=2*dy;
  153. p-=2*(dy-dx);
  154. }
  155. glVertex2f(x, y);
  156. }
  157. }
  158. }
  159. }
  160. else
  161. {
  162. if(yi<yf)
  163. {
  164. x=xi;
  165. y=yi;
  166. ylast=yf;
  167. if(xi<xf) //octant 2
  168. {
  169. glColor3f(0.5,0,1);
  170. glVertex2f(x, y);
  171. while(y<ylast)
  172. {
  173. y++;
  174. if(q<0)
  175. q+=2*dx;
  176. else
  177. {
  178. x++;
  179. q+=2*(dx-dy);
  180. }
  181. glVertex2f(x, y);
  182. }
  183. }
  184. else //octant 3
  185. {
  186. glColor3f(1,0.5,0);
  187. glVertex2f(x, y);
  188. while(y<ylast)
  189. {
  190. y++;
  191. if(q<0)
  192. //q+=2*(dy+dx);
  193. q-=2*dx;
  194. else
  195. {
  196. x--;
  197. //q+=2*dx;
  198. q-=2*(dy+dx);
  199. }
  200. glVertex2f(x, y);
  201. }
  202. }
  203. }
  204. else
  205. {
  206. x=xf;
  207. y=yf;
  208. ylast=yi;
  209. if(xi<xf) //octant 7
  210. {
  211. glColor3f(0.5,0.5,0);
  212. glVertex2f(x, y);
  213. while(y<ylast)
  214. {
  215. y++;
  216. if(q<0)
  217. q+=2*dx;
  218. else
  219. {
  220. x--;
  221. q+=2*(dy+dx);
  222. }
  223. glVertex2f(x, y);
  224. }
  225. }
  226. else //octant 6
  227. {
  228. glColor3f(0,0.5,0.5);
  229. glVertex2f(x, y);
  230. while(y<ylast)
  231. {
  232. y++;
  233. if(q<0)
  234. q-=2*dx;
  235. else
  236. {
  237. x++;
  238. q-=2*(dx-dy);
  239. }
  240. glVertex2f(x, y);
  241. }
  242. }
  243. }
  244. }
  245.  
  246. glEnd();
  247. glFlush();
  248. }
  249.  
  250.  
  251. void drawBitmapText(char *menu, int o, int p)
  252. {
  253. glRasterPos2i(o, p);
  254. for (int i = 0; i < strlen(menu); ++i)
  255. {
  256. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, menu[i]);
  257. }
  258. glFlush();
  259. }
  260.  
  261. void myMouseFunc(int button, int state, int x, int y)
  262. {
  263. if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
  264. xa = x-300;
  265. ya = 300-y;
  266. }
  267. else if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
  268. xb = x-300;
  269. yb = 300-y;
  270. linebrsnm(xa,ya,xb,yb);
  271. }
  272.  
  273. }
  274.  
  275. void myKeyboardFunc(unsigned char key, int x, int y)
  276. {
  277. switch (key)
  278. {
  279. case 27: // Escape key
  280. glutDestroyWindow(id);
  281. break;
  282. }
  283. }
  284.  
  285. void line(void)
  286. {
  287. glClearColor(0, 0, 0, 0);
  288. glClear(GL_COLOR_BUFFER_BIT);
  289.  
  290. glMatrixMode(GL_PROJECTION);
  291.  
  292. glLoadIdentity();
  293. gluOrtho2D(-300.0, 300.0, -300.0, 300.0);
  294.  
  295. glColor3f(1, 1, 1);
  296. glBegin(GL_LINES);
  297. glVertex2f(0, -200);
  298. glVertex2f(0, 200);
  299. glEnd();
  300.  
  301. glColor3f(1, 1, 1);
  302. glBegin(GL_LINES);
  303. glVertex2f(200, 0);
  304. glVertex2f(-200, 0);
  305. glEnd();
  306.  
  307. glFlush();
  308. }
  309.  
  310. int main(int argc, char **argv)
  311. {
  312. glutInit(&argc, argv);
  313. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  314. glutInitWindowPosition(0, 0);
  315. glutInitWindowSize(600, 600);
  316. id = glutCreateWindow("Bresenham's");
  317.  
  318. glutDisplayFunc(line);
  319. glutMouseFunc(myMouseFunc);
  320. glutKeyboardFunc(myKeyboardFunc);
  321. glutMainLoop();
  322. return 0;
  323. }
Add Comment
Please, Sign In to add comment