我的中点圆算法C程序如下:
#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)
示例(200,140)
输出不是一个完美的圆。
如果我的代码需要任何更改,请提出建议。
cir函数实现中点圆算法。 中点算法是否只适用于中心坐标相等的情况
最佳答案
结果不一致,因为 y 对于任何 float 和 d 都无法正确启动。
y=r;
d=1.25-r;
为什么在基于整数的算法中使用浮点类型并以像素为单位?
改变
d=1.25-r;
至
d=1-r;
并且所有float类型转为int类型。
增量为 1/-1
关于c - 中点圆算法不适用于不等中心坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46183467/