I23Answer


/* Draw a circle in the image */
void drawCircle( image img, int row, int col,
                 int radius, unsigned char value )
{
  int r, c;
  int boxLeft, boxRight, boxTop, boxBottom;


  /* find the bounding box for the circle */
  boxLeft = col-radius;
  if ( boxLeft < 0 ) boxLeft = 0;
  boxTop = row-radius;
  if ( boxTop < 0  ) boxTop  = 0;

  boxRight = col+radius;
  if ( boxRight >= img.ncols  ) boxRight  = img.ncols-1 ;
  boxBottom = row+radius;
  if ( boxBottom >= img.nrows ) boxBottom = img.nrows-1 ;

  /* scan thru the pixels in the bounding box, setting */
  /* those inside the circle to the forground color    */
  for ( r = boxTop; r<boxBottom; r++ )
    for ( c = boxLeft; c<boxRight; c++ )
      if ( (r-row)*(r-row)+(c-col)*(c-col) <= radius*radius )
        setPixel( img, r, c, value );
}

Comments: The idea of a bounding box might not have occured to you. It is a common way to speed up such drawing operations.


back