编写代码实现对多边形图案填充
编写代码实现对多边形图案填充
原理如下:
首先,用模板定义各种图案。然后,修改填充的扫描转换算法。在确定了区域内的一个像素后,不是马上往该像素填色而是先查询模板位图的对应位置。若是以透明方式填充图案,则当模板位图对应位置为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;
}
若输入:
则输出: