Solved

# Bresenhams Circle Algorithm

Posted on 1997-07-02

This is problem I understand his line algorithm but not his circle. This is the one I have got can some one explain what he does with these variables and why he does it. I mean actually explain line by line what he does and why?

//THE CODE

typedef long fixed16_16;

fixed16_16 SIN_ACOS[1024];

/**************************************************************************

* circle_fast *

* Draws a circle by using fixed point numbers and a trigonometry *

* table. *

**************************************************************************/

void circle(int x,int y, int radius, byte color)

{

fixed16_16 n=0,invradius=(1/(float)radius)*0x10000L;

int dx=0,dy=radius-1;

word dxoffset,dyoffset,offset = (y<<8)+(y<<6)+x;

while (dx<=dy)

{

dxoffset = (dx<<8) + (dx<<6);

dyoffset = (dy<<8) + (dy<<6);

VGA[offset+dy-dxoffset] = color; /* octant 0 */

VGA[offset+dx-dyoffset] = color; /* octant 1 */

VGA[offset-dx-dyoffset] = color; /* octant 2 */

VGA[offset-dy-dxoffset] = color; /* octant 3 */

VGA[offset-dy+dxoffset] = color; /* octant 4 */

VGA[offset-dx+dyoffset] = color; /* octant 5 */

VGA[offset+dx+dyoffset] = color; /* octant 6 */

VGA[offset+dy+dxoffset] = color; /* octant 7 */

dx++;

n+=invradius;

dy = (radius * SIN_ACOS[n>>6]) >>16;

}

}

void main()

{

int i;

setvmode(0x13);

for(i=0;i<1024;i++) /* create the sin(arccos(x)) table. */

SIN_ACOS[i]=sin(acos((float)i/1024)) * 0x10000L;

circle(160, 100, 50, 7);

setvmode(0x03);

}

//

THANK YOU VERY MUCH... THIS IS VERY IMPORTANT!!!