您的位置:首页 > 其它

圆生成算法(中点画圆、Bresenham画圆)

2013-07-22 15:32 176 查看
#include <graphics.h>
#include <math.h>

void MidPointCircle(int r, int color);
void CirclePoints(int x,int y,int color);
void BresenhamCircle(int xc,int yc,int r,int color);
void plot_cicle_point(int xc,int yc,int x,int y,int color);

main()
{
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode," ");
cleardevice();
setbkcolor(2);
MidPointCircle(100,4);
getch();
cleardevice();
BresenhamCircle(100,100,50,5);
getch();
closegraph();

}
void MidPointCircle(int r,int color)
{
int x,y;
float d;
x=0;y=r;
d=1.25-r;
CirclePoints(x,y,color);
while(x<=y)
{
if(d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
CirclePoints(x,y,color);
}
}
void CirclePoints(int x,int y,int color)
{
putpixel(x,y,color);
putpixel(y,x,color);
putpixel(-x,y,color);
putpixel(y,-x,color);
putpixel(x,-y,color);
putpixel(-y,x,color);
putpixel(-x,-y,color);
putpixel(-y,-x,color);
}
void plot_circle_point(int xc,int yc,int x,int y,int color)
{
putpixel(xc+x,yc+y,color);
putpixel(xc-x,yc+y,color);
putpixel(xc+x,yc-y,color);
putpixel(xc-x,yc-y,color);
putpixel(xc+y,yc+x,color);
putpixel(xc-y,yc+x,color);
putpixel(xc+y,yc-x,color);
putpixel(xc-y,yc-x,color);
}

void BresenhamCircle(int xc,int yc,int r,int color)
{
int x,y,d;
x=0;y=r;
d=3-2*r;
while(x<y)
{
plot_circle_point(xc,yc,x,y,color);
if(d<0)
d=d+4*x+6;
else
{
d=d+4*(x-y)+10;
y--;
}
x++;
}
if(x==y)
plot_circle_point(xc,yc,x,y,color);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: