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

标签 c algorithm geometry bgi

我的中点圆算法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/

相关文章:

java - 这段代码片段的最坏情况分析是什么?

algorithm - 分而治之算法对列表进行排序,其中每个元素距离其排序位置为 root(n)

c# - 确定由一个平面切割的网格,由 3 个顶点组成

php - Google+ 圈子数据库逻辑

c++ - 您如何测试您的计算机每秒可以执行多少条指令?

c - "functions"是 x86 硬件的基本部分吗?

c - gcc 奇怪的 C 编译只有在出现警告时才正确

c - sprintf函数中的问题

algorithm - 使用多变量 key 散列访问时间

c# - 如何计算转弯方向