计算机图形学平时作业4

先在互联网上查到奥运五环的标准比例,再等比例放大来,确定第一个环的位置,再往后推算出各个环的位置,遮挡处覆盖圆弧

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值