先在互联网上查到奥运五环的标准比例,再等比例放大来,确定第一个环的位置,再往后推算出各个环的位置,遮挡处覆盖圆弧
#include <graphics.h> // 引用图形库头文件
#include <conio.h>
#include <math.h>
void CirclePoints(int x0,int y0,int x,int y,int color) {
putpixel(x0 + x, y0 + y, color);
putpixel(x0 + y, y0 + x, color);
putpixel(x0 - x, y0 + y, color);
putpixel(x0 - y, y0 + x, color);
putpixel(x0 + x, y0 - y, color);
putpixel(x0 + y, y0 - x, color);
putpixel(x0 - x, y0 - y, color);
putpixel(x0 - y, y0 - x, color);
}
void MidpointCircle(int x0,int y0,int r,int Color)
{
int x,y;
double d;
x=0;y=r;d=1.25-r;
CirclePoints(x0,y0,x,y,Color);
while(x<y){
if(d<0){d+=x*2+3;}
else{d+=(x-y)*2+5;y--;}
x++;
CirclePoints(x0,y0,x,y,Color);
}
}
void Circle_BRES(int xc,int yc,int R,int Color,int t)
{
int x=0, y=R, d=3-2*R;
while(x<y){
if(t==0)
{putpixel(xc + y, yc - x, Color);
putpixel(xc + y, yc + x, Color);}
else
putpixel(xc - x, yc + y, Color);
if(d>=0){
d+=4-4*y;
y--;
}
d+=4*x+6;
x++;
}
if(x==y)
CirclePoints(xc,yc,x,y,Color);
}
//循环绘画
void RP(int xc,int yc,int R,int w,int Color,int t)
{
for(int i=R;i<R+w;i++)
{
Circle_BRES(xc,yc,i,Color,t);
}
}
int main()
{
initgraph(900, 550); // 创建绘图窗口
setbkcolor(WHITE);//白色背景
cleardevice();//刷新窗口
//内圈
MidpointCircle(200,200,100,BLUE);
MidpointCircle(460,200,100,BLACK);
MidpointCircle(720,200,100,RED);
MidpointCircle(330,310,100,YELLOW);
MidpointCircle(590,310,100,GREEN);
//外圈及上色
setlinecolor(BLUE);
setlinestyle(PS_SOLID,20);
circle(200,200,110);
MidpointCircle(200,200,120,BLUE);
setlinecolor(BLACK);
circle(460,200,110);
MidpointCircle(460,200,120,BLACK);
setlinecolor(RED);
circle(720,200,110);
MidpointCircle(720,200,120,RED);
setlinecolor(YELLOW);
circle(330,310,110);
MidpointCircle(330,310,120,YELLOW);
setlinecolor(GREEN);
circle(590,310,110);
MidpointCircle(590,310,120,GREEN);
//遮挡部分
RP(200,200,100,20,BLUE,0);
RP(460,200,100,20,BLACK,1);
RP(460,200,100,20,BLACK,0);
RP(720,200,100,20,RED,1);
getch(); // 按任意键继续
closegraph(); // 关闭绘图窗口
return 0;
}