编写代码实现对多边形图案填充

编写代码实现对多边形图案填充

原理如下:
首先,用模板定义各种图案。然后,修改填充的扫描转换算法。在确定了区域内的一个像素后,不是马上往该像素填色而是先查询模板位图的对应位置。若是以透明方式填充图案,则当模板位图对应位置为1时,用前景色写像素;否则,不改变该像素的值。若是以不透明方式填充图案,则根据模板位图对应位置为1或0来决定是用前景色还是背景色去写像素。

#include<stdio.h>
#include<graphics.h>

//图案模板
int select(int i,int j){
	int a,b;
	a=i%5;
	b=j%5;
	if(a==0&&b==0||a==1&&b==1||a==2&&b==2||a==3&&b==3||a==4&&b==4)
		return 1;
	else 
		return 0;
}

//选择填充
void full(int *p){
	int i,j,k,temp;
	if(p[0]==p[2]){
		temp=p[2];p[2]=p[6];p[6]=temp;
		temp=p[3];p[3]=p[7];p[7]=temp;
	}
	for(i=p[0];i<p[2];i=i++)
		for(j=p[1];j<p[7];j++){
			k=select(i,j);
			if(k==1)
				putpixel(i,j,WHITE);
		}
}

//初始化,输入坐标
void init(int *p,int N){
	int j;
	printf("输入点的坐标:\n");
    printf("第1个坐标为:\n" );
	for(j=0;j<2*N;j++){
		scanf("%d",&p[j]);
		if(j%2==1)
			printf("第%d个坐标为:\n",(j+1)/2+1);
	}
}

//主函数
int main(){
	int gd=DETECT,gmode;
	int p[10],N;
	printf("输入多边形的个数:\n");
	scanf("%d",&N);
	//int p[10]={100,100,200,100,200,200,100,200,100,100};
	init(p,N);
	initgraph(&gd,&gmode,"");
	drawpoly(5,p);
	full(p);
	getchar();
	getchar();
	closegraph();
	return 0;
}

若输入:
编写代码实现对多边形图案填充
则输出:
编写代码实现对多边形图案填充