📄 ellipse.c
字号:
/* WIN-TC BGI 图形编程模板 */
#include <Conio.h>
#include <graphics.h>
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
void setpixel(int x,int y,int color)
{
int ry=getmaxy()-y;
putpixel(x,ry,color);
}
void midpointellipse(int xc,int yc,int a,int b,int color)
{
long aa=(long)a*a,bb=(long)b*b;
long twoaa=2*aa,twobb=2*bb;
long x=0,y=b;
long d;
long dx=0;
long dy=twoaa*y;
d=bb+aa*(-b)+aa/4;
setpixel(xc+x,yc+y,color);
setpixel(xc+x,yc-y,color);
setpixel(xc-x,yc+y,color);
setpixel(xc-x,yc-y,color);
while(dx<dy)
{
x++;
dx+=twobb;
if(d<0) d+=bb+dx;
else
{dy-=twoaa;
d+=bb+dx-dy;
y--;
}
setpixel(xc+x,yc+y,color);
setpixel(xc+x,yc-y,color);
setpixel(xc-x,yc+y,color);
setpixel(xc-x,yc-y,color);
}
d=bb*(x*x+x)+bb/4+aa*(y-1)*(y-1)-aa*bb;
while(y>0)
{y--;
dy-=twoaa;
if(d>0) d+=aa-dy;
else
{x++;
dx+=twobb;
d+=aa-dy+dx;
}
setpixel(xc+x,yc+y,color);
setpixel(xc+x,yc-y,color);
setpixel(xc-x,yc+y,color);
setpixel(xc-x,yc-y,color);
}
}
int main(void)
{ int xc,yc,a=0,b=1,color,k=0;
printf("xc=");scanf("%d",&xc);
printf("\nyc=");scanf("%d",&yc);
while(a<b)
{
if(k==1) printf("\nInput error!");
k=1;
printf("\na=");scanf("%d",&a);
printf("\nb=");scanf("%d",&b);
}
k=0;
while(color<0||color>15)
{
if(k==1) printf("\nInput error!");
k=1;
printf("\ncolor=");scanf("%d",&color);
}
initgr(); /* BGI初始化 */
midpointellipse(xc,yc,a,b,color);
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -