我写了一个简单的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() ;
}
我不确定这是否对任何人都有帮助,但是,好吧,我还是把更新后的代码贴出来。
我更新输出的屏幕截图:
最佳答案
用户在xc
和yc
变量中插入圆心坐标,但代码总是以x=0
和y=r
开头。
我无法测试代码,但可能每次计算新的xc
和yc
时都可以添加x
和y
偏移量。