📄 4.3.c
字号:
/* WIN-TC BGI 图形编程模板 */
#include "Conio.h"
#include "graphics.h"
#include<math.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 EllipsePoints(int x0,int y0,int x,int y,int color)
/*绘椭圆弧上对称的四个像素*/
{ putpixel(x0+x,y0+y,color);
putpixel(x0-x,y0+y,color);
putpixel(x0+x,y0-y,color);
putpixel(x0-x,y0-y,color);
}
void MidPointEllipse(int x0,int y0,int a,int b,int color)
/*假定椭圆的中心在原点,a和b分别为两个半轴的长度*/
{long x,y,d,xP,yP,squarea,squareb;
squarea=a*a;
squareb=b*b;
/*计算分界点P*/
xP=(0.5+(float)squarea/sqrt((float)(squarea+squareb)));
yP=(0.5+(float)squareb/sqrt((float)(squarea+squareb)));
/*生成第一象限内的上半部分椭圆弧*/
x=0;
y=b;
d=4*(squareb-squarea*b)+squarea;
EllipsePoints(x0,y0,x,y,color);
while(x<=xP)
{if(d<=0)
d+=4*squareb*(2*x+3);
else
{d+=4*squareb*(2*x+3)-8*squarea*(y-1);
y--;
}
x++;
EllipsePoints(x0,y0,x,y,color);
}
x=a;
y=0;
d=4*(squarea-a*squareb)+squareb;
EllipsePoints(x0,y0,x,y,color);
while(y<yP)
{if(d<=0)
d+=4*squarea*(2*y+3);
else
{d+=4*squarea*(2*y+3)-8*squareb*(x-1);
x--;
}
y++;
EllipsePoints(x0,y0,x,y,color);
}
}
void PositiveNegativeArcEllipse(int x0,int y0,int a,int b,int color)
/*假定椭圆的中心在原点,a和b分别为两个半轴的长度*/
{long x,y,d,xP,yP,squarea,squareb;
squarea=a*a;
squareb=b*b;
/*计算分界点P*/
xP=(0.5+(float)squarea/sqrt((float)(squarea+squareb)));
yP=(0.5+(float)squareb/sqrt((float)(squarea+squareb)));
/*生成第一象限内的上半部分椭圆弧*/
x=0;
y=b;
d=b*b;
EllipsePoints(x0,y0,x,y,color);
x=1;
EllipsePoints(x0,y0,x,y,color);
while(x<=xP)
{if(d>=0)
{d+=a*a-2*a*a*y;
y--;
}
else
{d+=b*b+2*b*b*x;
x++;
}
EllipsePoints(x0,y0,x,y,color);
}
x=a;
y=0;
d=a*a;
EllipsePoints(x0,y0,x,y,color);
y=1;
while(y<yP)
{if(d<0)
{d+=a*a+2*y*a*a;
y++;
}
else
{d+=b*b-2*b*b*x;
x--;
}
EllipsePoints(x0,y0,x,y,color);
}
}
main()
{initgr(); /* BGI初始化 */
MidPointEllipse(320,240,160,100,3);
PositiveNegativeArcEllipse(320,240,50,100,6);
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -