Advertisement
Shailrshah

Circle Drawing Algorithms

Aug 28th, 2014
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <graphics.h>
  4. #include <math.h>
  5.  
  6. void startgraphics(){
  7.     int gd = DETECT, gm;
  8.     initgraph(&gd, &gm, "");
  9.     cleardevice();
  10. }
  11.  
  12. void dda(int a, int b, int r){
  13.     int n, count = 0;
  14.     float x = 0, y = r, e;
  15.     for(n=1; ; n++)
  16.         if(pow(2, n-1) <= r && r < pow(2, n)) break;
  17.     e = pow(2, -n);
  18.     do{
  19.         x+=e*y;
  20.         y-=e*x;
  21.         putpixel((int)x+a, (int)y+b, 3);
  22.     }while(count++<r*10); //while(y-sy < e || sx-x > e) gives infinite loop
  23. }
  24.  
  25. void bres(int a, int b, int r){
  26.     int x = 0, y = r, d = 3-2*r;
  27.     do{
  28.         putpixel(x+a, y+b, 3);
  29.         putpixel(-x+a, y+b, 3);
  30.         putpixel(x+a, -y+b, 3);
  31.         putpixel(-x+a, -y+b, 3);
  32.         putpixel(y+a, x+b, 3);
  33.         putpixel(-y+a, x+b, 3);
  34.         putpixel(y+a, -x+b, 3);
  35.         putpixel(-y+a, -x+b, 3);
  36.  
  37.         if(d < 0)   d+=4*x+6;
  38.         else {d+= 4*(x-y)+10; y--;}
  39.         x++;
  40.     } while(x < y);
  41. }
  42.  
  43. void mid(int a, int b, int r){
  44.     int x = 0, y = r;
  45.     float d = 1.25 - r;
  46.     do{
  47.         putpixel(x+a, y+b, 3);
  48.         putpixel(-x+a, y+b, 3);
  49.         putpixel(x+a, -y+b, 3);
  50.         putpixel(-x+a, -y+b, 3);
  51.         putpixel(y+a, x+b, 3);
  52.         putpixel(-y+a, x+b, 3);
  53.         putpixel(y+a, -x+b, 3);
  54.         putpixel(-y+a, -x+b, 3);
  55.         if(d<0){x++; d+=2*x+1;}
  56.         else{x++; y--; d+=2*(x-y)+1;}
  57.     }while(x < y);
  58. }
  59.  
  60. void main(){
  61.     startgraphics();
  62.  
  63.     dda(getmaxx()/2, getmaxy()/2, 80);
  64.     bres(getmaxx()/2, getmaxy()/2, 100);
  65.     mid(getmaxx()/2, getmaxy()/2, 150);
  66.  
  67.     getch();
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement