如何在特定区域绘制圆圈?

时间:2015-09-08 13:35:04

标签: c graphics output

我写了一个简单的C程序来制作一个圆圈。它遵循中点圆绘制算法。

这是我现在的代码:

#include <stdio.h>
#include <conio.h>
#include <graphics.h>

void main()
{
   int gd = DETECT, gm ;
   int r, x, y, xc, yc, P;

   initgraph(&gd, &gm ,"..//bgi");
   clrscr();

   printf("\n Enter the radius : ");
   scanf("%d", &r);
   printf("\n Enter the centre as X and Y : ");
   scanf("%d%d", &xc,&yc);

   x = 0;
   y = r;
   P = 1 - r;

   do
   {
     putpixel( x,  y, WHITE);
     putpixel( y,  x, WHITE);
     putpixel(-x, -y, WHITE);
     putpixel(-y, -x, WHITE);
     putpixel(-x,  y, WHITE);
     putpixel( y, -x, WHITE);
     putpixel( x, -y, WHITE);
     putpixel(-y,  x, WHITE);

     if(P < 0)
     {
       x = x + 1 ;
       P = P + (2 * x) + 1 ;
     }
     else
     {
       x = x + 1 ;
       y = y - 1 ;
       P = P + (2 * x) - (2 * y) + 1 ;
     }
  }while(x < y);

    getch();
    closegraph();

}

问题是输出似乎在左上角,我无法看到整个输出。有什么方法可以设置输出显示在我的屏幕的特定区域或类似的东西吗?

我当前输出的屏幕截图:

SCREENSHOT_OF_OUTPUT

编辑:在LP和koldewb提出的观点之后,我重新编写了整个代码,现在,我在中心输出输出,我的意思是,输出要好得多。我添加了不同的颜色来查看绘制了哪个象限......这是代码: -

#include<stdio.h>
#include<conio.h>
#include<graphics.h>

void main()
{
   int gd = DETECT , gm ;
   int r , x , y , xc , yc  , P;

   initgraph(&gd , &gm ,"..//bgi") ;

   printf("\n Enter the radius : ") ;
   scanf("%d" , &r) ;
   printf("\n Enter the centre as X and Y : ") ;
   scanf("%d%d" , &xc,&yc) ;

   x = 0 ;
   y = r ;
   P = 1-r ;

   do
  {
     putpixel(xc+x,yc+y,WHITE) ;
     putpixel(yc+y,xc+x,WHITE) ;
     putpixel(xc-x,yc-y,WHITE) ;
     putpixel(yc-y,xc-x,WHITE) ;
     putpixel(xc-x,yc+y,WHITE) ;
     putpixel(yc+y,xc-x,WHITE) ;
     putpixel(xc+x,yc-y,WHITE) ;
     putpixel(yc-y,xc+x,WHITE) ;

     if(P<0)
     {
       x = x + 1 ;
       P = P + (2*x) + 1 ;
     }
     else
     {
       x = x + 1 ;
       y = y - 1 ;
       P = P + (2*x) - (2*y) + 1 ;
     }
     } while(x<y) ;

     getch() ;
     closegraph() ;
  }

我不确定这对任何人是否有任何帮助,但是,我也可以发布更新后的代码。

我的更新输出的屏幕截图:

SCREENSHOT_OF_OUTPUT

1 个答案:

答案 0 :(得分:3)

用户将圈中心的咕咕插入xcyc变量,但您的代码始终以x=0y=r开头。

我无法测试代码,但每次计算新的xcyc时,您可能会添加xy偏移量。