如何在特定区域画圆?
How to draw circle at a specific area?
我写了一个简单的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() ;
}
我不确定这是否对任何人有帮助,但是,好吧,我也可以 post 更新的代码。
我的更新输出的屏幕截图:
用户将圆心的 coos 插入到 xc
和 yc
变量中,但您的代码始终以 x=0
和 y=r
.
开头
我无法测试代码,但也许您可以在每次计算新的 x
和 y
.[=18= 时添加 xc
和 yc
偏移量]
我写了一个简单的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() ;
}
我不确定这是否对任何人有帮助,但是,好吧,我也可以 post 更新的代码。
我的更新输出的屏幕截图:
用户将圆心的 coos 插入到 xc
和 yc
变量中,但您的代码始终以 x=0
和 y=r
.
我无法测试代码,但也许您可以在每次计算新的 x
和 y
.[=18= 时添加 xc
和 yc
偏移量]