中点圆算法不适用于不等中心坐标

时间:2017-09-12 18:46:56

标签: c algorithm geometry

我的中点圆算法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函数实现中点圆算法。 中点算法是否仅适用于相等的中心坐标

1 个答案:

答案 0 :(得分:0)

由此产生的结果不一致,因为对于任何浮动和d,y都无法正确启动。

y=r;
d=1.25-r;

为什么在基于整数的算法中使用float类型并以像素为单位?

变化

d=1.25-r;

d=1-r;

并且所有浮点类型都为int类型。

增量为1 / -1