我的中点圆算法C程序如下:
InterlockedIncrement
当我提供中心坐标为#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void cir(int,int,float);
void main()
{
int gd=DETECT;
int gm=DETECT;
int x1,y1;
float r;
initgraph(&gd,&gm,"C:\\TurboC3\\BGI");
printf("\nenter the cordinates of center: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("\nenter the radius : ");
scanf("%f",&r);
cir(x1,y1,r);
getch();
closegraph();
}
void cir(int x1,int y1,float r)
{
int x,y;
float d;
x=0;
y=r;
d=1.25-r;
putpixel(x1+x,y1+y,RED);
putpixel(y1+y,x1+x,RED);
putpixel(y1+y,x1-x,RED);
putpixel(x1+x,y1-y,RED);
putpixel(x1-x,y1-y,RED);
putpixel(y1-y,x1-x,RED);
putpixel(y1-y,x1+x,RED);
putpixel(x1-x,y1+y,RED);
while(x<y){
if(d<0){
x=x+1;
d=d+2*x+1;
}else{
x=x+1;
y=y-1;
d=d+2*(x-y)+1;
}
putpixel(x1+x,y1+y,RED);
putpixel(y1+y,x1+x,RED);
putpixel(y1+y,x1-x,RED);
putpixel(x1+x,y1-y,RED);
putpixel(x1-x,y1-y,RED);
putpixel(y1-y,x1-x,RED);
putpixel(y1-y,x1+x,RED);
putpixel(x1-x,y1+y,RED);
}
}
时,输出是一个完美的圆,但当我提供(200,200)
示例(Y<X)
的任何其他坐标时,输出不是一个完美的圆。
如果我的代码中有任何更改,请建议。
cir函数实现中点圆算法。 中点算法是否仅适用于相等的中心坐标
答案 0 :(得分:0)
由此产生的结果不一致,因为对于任何浮动和d,y都无法正确启动。
y=r;
d=1.25-r;
为什么在基于整数的算法中使用float类型并以像素为单位?
变化
d=1.25-r;
到
d=1-r;
并且所有浮点类型都为int类型。
增量为1 / -1