makeCircleChecks( FILE *image, int nrows, int ncols )
{
const int levelINa = 220; /* gray levels inside and */
const int levelINb = 110;
const int levelOUTa = 170; /* outside of the circle */
const int levelOUTb = 90;
int r, c ; /* row and col of current pixel */
int rc, cc ; /* row and col of center of image */
int rd, cd ; /* row and col difference from center */
int radius; /* radius of circle */
int distSq; /* distance from center, squared */
int radiusSq; /* radius squared */
int sideIn; /* side of inside checkerboard square */
int sideOut; /* side of outside checkerboard square */
int rk, ck; /* row and column of checkerboard */
/* calculate center of image, size of radius */
rc = nrows/2;
cc = ncols/2;
if ( nrows<ncols )
{
radius = nrows/3;
sideIn = nrows/16;
sideOut = nrows/12;
}
else
{
radius = ncols/3;
sideIn = ncols/16;
sideOut = ncols/12;
}
radiusSq = radius*radius;
/* write out the pixel data */
for ( r=0; r<nrows; r++ )
{
rd = r - rc;
for ( c=0; c<ncols; c++ )
{
cd = c - cc;
distSq = rd*rd + cd*cd ;
if ( distSq > radius*radius )
{
/* determine row and col of outer checkerboard */
rk = r/sideIn;
ck = c/sideIn;
if ( (rk+ck)%2 == 0 )
fputc( levelOUTa, image );
else
fputc( levelOUTb, image );
}
else
{
/* determine row and col of inner checkerboard */
rk = r/sideOut;
ck = c/sideOut;
if ( (rk+ck)%2 == 0 )
fputc( levelINa, image );
else
fputc( levelINb, image );
}
}
}
}
Comments: Integer math has been used in this program for determining if pixels are inside or outside of the circle.