More on filled circles

Search this archive.

From: Jay Link (jlink@interlink-bbs.com)
Date: Tue 30 Nov 1999 - 19:38:54 IST


Hi Everyone,

> hmmmm ... have you tested these routines with all possible radii ?
>
> without testing them myself, i suspect that there will be certain values
> for r (radius) that result in a less than perfectly filled circle or
> semi-circle. this being because of the rounding errors in the math
> functions and the line algorithm. nothing can be done about that except to
> be aware that these things happen :)

Ok, Ivan was right. If you draw a large circle with the function I posted,
you'll end up with some blank areas. BUT, the following "fix" accounts for
that. See what you think:


void filled_circle(int xc, int yc, int radius, int color)
{
   double theta,
          costheta,
          sintheta;

   int    i,
          y,
          old_y = 0;

   for (i = 0; i < 360; i++)
   {
      theta = (PI / 360) * i;
      costheta = cos(theta);
      sintheta = sin(theta);
      y = yc + radius * costheta;
      if (i > 0)
      {
         while ((old_y - y) > 1)
         {
            old_y--;
            gl_hline(xc - radius * sintheta, old_y, xc + radius * sintheta, color);
         }
      }
      gl_hline(xc - radius * sintheta, y, xc + radius * sintheta, color);
      old_y = y;
   }
}


This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:22 IST