我写了一个简单的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();

}

问题是输出似乎在左上角,我看不到整个输出。有什么方法可以设置输出显示在屏幕的特定区域或类似的地方吗?
我当前输出的屏幕截图:
编辑:经过LPs和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() ;
  }

我不确定这是否对任何人都有帮助,但是,好吧,我还是把更新后的代码贴出来。
我更新输出的屏幕截图:

最佳答案

用户在xcyc变量中插入圆心坐标,但代码总是以x=0y=r开头。
我无法测试代码,但可能每次计算新的xcyc时都可以添加xy偏移量。

09-25 18:49