【问题标题】:Circle Drawing Algorithm画圆算法
【发布时间】:2022-04-07 23:41:15
【问题描述】:

我设计了一个使用方程的圆算法: (x-a)^2+(y-b)^2=r^2

这是一个代码::::

   #include<graphics.h>
  #include<math.h>
float rety(int x1,int r1,int a1,int b1)
{//function simulates (x-a)^2+(y-b)^2=r^2
 float tmp;
 tmp=(x1-a1)*(x1-a1);
 tmp=(r1*r1)-tmp;
 tmp=abs(tmp);
 tmp=sqrt(tmp);
 tmp=tmp+b1;
 return tmp;
}
void main()
{
 int tmp2,x=0,y=0,r=50,a=200,b=200,gm=DETECT,gd=DETECT;
 initgraph(&gm,&gd,"c://turboc3//bgi");
 x=a-r;//set x position as left most point of circle
 c1:
 y=rety(x,r,a,b);
 putpixel(x,y,5);//only draws half circle
 tmp2=y-b;
 putpixel(x,b-tmp2,5);//draw symmetric to above half circle
 x=x+1;
 if((x>a+r)==0){goto c1;}
}

输出::::: https://drive.google.com/file/d/0B4kpKF0WrDOQUk9BSm55bjJ0Zm8/view?usp=docslist_api

参考图片,看到圆圈的左右两侧出现虚线。

我只是需要帮助来改进算法,这样那些空白就会被完全填满

提前致谢, 抱歉英语不好。

【问题讨论】:

    标签: c bgi


    【解决方案1】:

    我推荐中点圆算法,因为它非常高效并且具有完全基于整数的版本。以下页面包含一个 C 代码函数...

    https://en.wikipedia.org/wiki/Midpoint_circle_algorithm

    编辑:但是...

    您的算法存在的问题是每次迭代您总是将 x 增加 1。但有时您需要在同一个 x 坐标处绘制多个像素,因此圆形曲线在左右两侧几乎是垂直的。

    将您的算法更改为有条件地根据 y 坐标增加 x。

    【讨论】:

    • 这就是我不想要的......我不了解中点算法。它很有效,但我需要自己做......所以我设计了自己的算法.也许你明白我想说什么
    • 对 .... 明白了。 ..谢谢......我会在成功执行后更新输出......顺便说一句,我这样做是为了让我满意
    猜你喜欢
    • 2015-06-10
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    相关资源
    最近更新 更多