home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_06_06 / v6n6091a.txt < prev   
Text File  |  1989-09-28  |  1KB  |  51 lines

  1.  \NLETTER\6.6\CURVES7.PRGProgram 7
  2.  
  3. void ellipse (xc,yc,a,b,ci)
  4. int xc,yc,a,b,ci;
  5. /*
  6.  * This routine draws an ellipse with centre (xc,yc),
  7.  *  and semi-axes a and b in the X and Y directions
  8.  *  repectively.
  9.  */
  10. {
  11.  int x,y;
  12.  long a2,b2,a22,b22,xderiv,yderiv,fmid;
  13. /*
  14.  *  Initialize variables.
  15.  */
  16. x = a; y = 0; a2 = a*a; b2 = b*b; a22 = a2 + a2; b22 = b2 + b2;
  17. xderiv = b22*aa; yderiv = OL; fmid = b2/4L-b2*a+a2;
  18. /*
  19.  *  Step along Y-axis.
  20.  */
  21. while (xderiv>yderiv)
  22.  {
  23.     points(xc,yc,x,y,ci);
  24.     y++;
  25.     yderiv += a22;
  26.     if (fmid<OL) fmid += (yderiv+a2);
  27.     else
  28.        {
  29.           x--; xderiv -= b22;
  30.           fmid += (yderiv+a2-xderiv);
  31.        }
  32.   }
  33. /*
  34.  *    Step along X-axis.
  35.  */
  36. fmid += (3L*(b2-a2)/2L - (xderiv+yderiv))/2L;
  37. while (x>0)
  38.  {
  39.    points (xc,yc,x,y,ci);
  40.    x--;
  41.    xderiv -= b22;
  42.    if (fmid>OL) fmid += (b2-xderiv);
  43.    else
  44.    {
  45.       y++; yderiv += a22;
  46.       fmid += (yderiv+b2-xderiv);
  47.    }
  48.   }
  49. }
  50.  
  51.