home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / video / 7 / 7_2.c < prev    next >
Encoding:
Text File  |  1988-08-11  |  1.2 KB  |  73 lines

  1. /* Listing 7-2 */
  2.  
  3. Ellipse( xc, yc, a0, b0 )
  4. int    xc,yc;            /* center of ellipse */
  5. int    a0,b0;            /* semiaxes */
  6. {
  7.     int    x = 0;
  8.     int    y = b0;
  9.  
  10.     long    a = a0;                /* use 32-bit precision */
  11.     long    b = b0;
  12.  
  13.     long    Asquared = a * a;        /* initialize values outside */
  14.     long    TwoAsquared = 2 * Asquared;    /*  of loops */
  15.     long    Bsquared = b * b;
  16.     long    TwoBsquared = 2 * Bsquared;
  17.  
  18.     long    d;
  19.     long    dx,dy;
  20.  
  21.  
  22.     d = Bsquared - Asquared*b + Asquared/4L;
  23.     dx = 0;
  24.     dy = TwoAsquared * b;
  25.  
  26.     while (dx<dy)
  27.     {
  28.       Set4Pixels( x, y, xc, yc, PixelValue );
  29.  
  30.       if (d > 0L)
  31.       {
  32.         --y;
  33.         dy -= TwoAsquared;
  34.         d -= dy;
  35.       }
  36.  
  37.       ++x;
  38.       dx += TwoBsquared;
  39.       d += Bsquared + dx;
  40.     }
  41.  
  42.  
  43.     d += (3L*(Asquared-Bsquared)/2L - (dx+dy)) / 2L;
  44.  
  45.     while (y>=0)
  46.     {
  47.       Set4Pixels( x, y, xc, yc, PixelValue );
  48.  
  49.       if (d < 0L)
  50.       {
  51.         ++x;
  52.         dx += TwoBsquared;
  53.         d += dx;
  54.       }
  55.  
  56.       --y;
  57.       dy -= TwoAsquared;
  58.       d += Asquared - dy;
  59.     }
  60. }
  61.  
  62.  
  63. Set4Pixels( x, y, xc, yc, n )        /* set pixels by symmetry in 4 quadrants */
  64. int    x,y;
  65. int    xc,yc;
  66. int    n;
  67. {
  68.     SetPixel( xc+x, yc+y, n );
  69.     SetPixel( xc-x, yc+y, n );
  70.     SetPixel( xc+x, yc-y, n );
  71.     SetPixel( xc-x, yc-y, n );
  72. }
  73.