kane020397
asked on
Bresenhams Circle Algorithm
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)ra dius)*0x10 000L;
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((floa t)i/1024)) * 0x10000L;
circle(160, 100, 50, 7);
setvmode(0x03);
}
//
THANK YOU VERY MUCH... THIS IS VERY IMPORTANT!!!
//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)ra
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((floa
circle(160, 100, 50, 7);
setvmode(0x03);
}
//
THANK YOU VERY MUCH... THIS IS VERY IMPORTANT!!!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.