Thursday, June 21, 2018

Implementation of ellipse drawing algorithm


  1. #include<iostream.h>
  2. #include<conio.h>
  3. #include<graphics.h>
  4. #include<dos.h>

  5. void main()
  6. {
  7. clrscr();
  8. float rx=0,ry=0,x=0,y=0,dx=0,dy=0,d1=0,d2=0; 
  9. float rxSqr=0,rySqr=0,rx2Sqr=0,ry2Sqr=0;
  10. int x1=0,y1=0; int gd,gm;

  11. detectgraph(&gd,&gm); initgraph(&gd,&gm,"c:\\tc\\bgi");

  12. //textbackground(15);
  13. //textcolor(8);
  14. //setbkcolor(15);
  15. //setcolor(8);


  16. cout<<"Enter pixels for centre of an ellipse (x,y): "; cin>>x1>>y1;

  17. cout<<"Enter rx radius: "; cin>>rx;
  18. cout<<"Enter ry radius: "; cin>>ry;
  19.  
  20. line(0,getmaxy()/2,getmaxx(),getmaxy()/2); line(getmaxx()/2,0,getmaxx()/2,getmaxy());

  21. x=0;
  22. y=ry;

  23. rxSqr=rx*rx; rx2Sqr=2*rxSqr; rySqr=ry*ry; ry2Sqr=2*rySqr; dx=ry2Sqr*x; dy=rx2Sqr*y;
  24. d1=rySqr-rxSqr*ry+(.25*rxSqr);
  25. do
  26. {
  27. putpixel(getmaxx()/2+(x1+x),getmaxy()/2-(y1+y),8); 
  28. putpixel(getmaxx()/2+(x1-x),getmaxy()/2-(y1+y),8); 
  29. putpixel(getmaxx()/2+(x1+x),getmaxy()/2-(y1-y),8); 
  30. putpixel(getmaxx()/2+(x1-x),getmaxy()/2-(y1-y),8); 
  31. if(d1<0)
  32. {
  33. x+=1;
  34. y=y; dx+=ry2Sqr; d1+=dx+rySqr;
  35. }
  36. else
  37. {
  38. x+=1;
  39. y-=1;
  40. dx+=ry2Sqr; dy-=rx2Sqr;
  41. d1+=dx-dy+rySqr;
  42. }
  43. delay(30);
  44. }while(dx<dy);
  45. d2=rySqr*((x+(.5))*(x+(.5)))+rxSqr*((y-1)*(y-1))-rxSqr*rySqr; do
  46. {
  47. putpixel(getmaxx()/2+(x1+x),getmaxy()/2-(y1+y),8); 
  48. putpixel(getmaxx()/2+(x1-x),getmaxy()/2-(y1+y),8);
  49.  putpixel(getmaxx()/2+(x1+x),getmaxy()/2-(y1-y),8); 
  50. putpixel(getmaxx()/2+(x1-x),getmaxy()/2-(y1-y),8); 
  51. if(d2>0)
  52. {
  53. x=x; y-=1;
  54. dy-=rx2Sqr; d2-=dy+rxSqr;
  55. }
  56. else
  57. {
  58. x+=1; y-=1;
  59. dy-=rx2Sqr; dx+=ry2Sqr; d2+=dx-dy+rxSqr;
  60. }
  61. delay(10);
  62. }while(y>0);
  63. getch();
  64. }

Output:

No comments:

Post a Comment