home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / SGTOOL12.ARC / LIBC128.ARC / VDCCIR.C < prev    next >
C/C++ Source or Header  |  1993-08-10  |  1KB  |  52 lines

  1. /*
  2. SG C Tools 1.2
  3.  
  4. (C) 1993 Steve Goldsmith
  5. All Rights Reserved
  6.  
  7. Compiled with HI-TECH C 3.09 (CP/M-80).
  8. */
  9.  
  10. #include <hitech.h>
  11. #include <vdc.h>
  12.  
  13. /* plot circle points in eights.  (y >> 1) and (x >> 1) used to help correct */
  14. /* aspect ratio. */
  15.  
  16. void circlepointsvdc(int XC, int YC, int X, int Y)
  17. {
  18.   setpixvdc(XC+X,YC+(Y >> 1));
  19.   setpixvdc(XC-X,YC+(Y >> 1));
  20.   setpixvdc(XC+X,YC-(Y >> 1));
  21.   setpixvdc(XC-X,YC-(Y >> 1));
  22.   setpixvdc(XC+Y,YC+(X >> 1));
  23.   setpixvdc(XC-Y,YC+(X >> 1));
  24.   setpixvdc(XC+Y,YC-(X >> 1));
  25.   setpixvdc(XC-Y,YC-(X >> 1));
  26. }
  27.  
  28. /* draw circle using bresenham's algorithm */
  29.  
  30. void circlevdc(int XC, int YC, int R)
  31. {
  32.   int P, X, Y;
  33.  
  34.   X = 0;          /* select first point as (x,y) = (0,r) */
  35.   Y = R;
  36.   P = 3-(R << 1);
  37.   while(X < Y)
  38.   {
  39.     circlepointsvdc(XC,YC,X,Y);
  40.     if(P < 0)
  41.       P += (X << 2)+6;      /* next point (x+1,y) */
  42.     else
  43.     {
  44.       P += ((X-Y) << 2)+10; /* next point (x+1,y-1) */
  45.       Y--;
  46.     }
  47.     X++;
  48.   }
  49.   if(X == Y)
  50.     circlepointsvdc(XC,YC,X,Y);
  51. }
  52.