实验四 区域填充算法的实现

  • 格式:doc
  • 大小:50.00 KB
  • 文档页数:8

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四区域填充算法的实现

班级 08信计2班学号 20080502082 姓名任伟国分数

一、实验目的和要求:

1、理解区域的表示和类型。

2、能正确区分四连通和八连通的区域

3、了解区域填充的实验原理。

4、利用C++实现区域填充的递归算法。

二、实验内容:

1假设在多边形内有一像素已知,由此出发利用连通性找到区域内所有像素。

2 取(x,y)为种子点将整个区域填充为新的颜色。

3 进行递归填充。

三、实验结果分析

区域填充属性包括填充样式,填充颜色和填充图案的类型。C语言中定义了某种图形后,即可调用-floodfill函数,对指定区域进行填充

. 程序代码

#define pi 3.141592

#define MAX(a,b) (a>b)? a:b

#define MIN(a,b) (a

#include "graphics.h"

#include "math.h"

struct edge {

int ymax;

float x;

float delat;

struct edge * pedge; };

struct point{

int x;

int y;} ;

struct et { struct edge * pedge;

int n;};

struct edge g_aet[10];

struct edge dge[10];

struct et g_et[10];

struct point point1,point2;

int ZUO(float x)

{ if((int)x==x)

return (int)x;

return (int)x+1;

}

int YOU(float x)

{ if((int)x==x)

return (int)x-1;

return (int)x;

}

int k=400,l=0;

void draw1()

{

int i,t,j,a,c,p,z; float b;

struct edge temp;

for(i=k;i<=l;i++)

{

a=0;

for(t=0;t<=9;t++)

{ if(g_et[t].n==i) break;}

for(j=0;j<=9;j++)

{ if(g_aet[j].ymax==0) break;}

if(t!=10){ g_aet[j].ymax=g_et[t].pedge->ymax;

g_aet[j].x=g_et[t].pedge->x;

g_aet[j].delat=g_et[t].pedge->delat;

if(g_et[t].pedge->pedge!=0)

{

g_aet[j+1].ymax=g_et[t].pedge->pedge->ymax;

g_aet[j+1].x=g_et[t].pedge->pedge->x;

g_aet[j+1].delat=g_et[t].pedge->pedge->delat; }

}

for(j=0;j<=9;j++)

{ if(g_aet[j].ymax==0) break; }

j--;

for(t=0;t<=j;t++)

{ for(z=0;z<=j-1;z++)

{

if(g_aet[z].x>g_aet[z+1].x)

{ temp.ymax=g_aet[z].ymax;

temp.x=g_aet[z].x;

temp.delat=g_aet[z].delat;

g_aet[z].ymax=g_aet[z+1].ymax;

g_aet[z].x=g_aet[z+1].x;

g_aet[z].delat=g_aet[z+1].delat;

g_aet[z+1].ymax=temp.ymax;

g_aet[z+1].x=temp.x;

g_aet[z+1].delat=temp.delat;

}

}

}

for(j=0;j<=9;j++)

{ if(g_aet[j].ymax==0) break; }

j--;

for(p=0;p<=j;p++)

{ a++;

if(a%2!=0)b=g_aet[p].x;

else

{

for(c=ZUO(b);c<=YOU(g_aet[p].x);c++)

putpixel(c,i,2);}

}

for(t=0;t<=j;t++)

{ if(g_aet[t].ymax==(i+1))

{ g_aet[t].ymax=0;

g_aet[t].x=0;

g_aet[t].delat=0;

}

g_aet[t].x+=g_aet[t].delat;

}

for(t=0;t<=j;t++)

{ for(z=0;z<=j-1;z++)

{

if(g_aet[z].x

{ temp.ymax=g_aet[z].ymax;

temp.x=g_aet[z].x;

temp.delat=g_aet[z].delat;

g_aet[z].ymax=g_aet[z+1].ymax;

g_aet[z].x=g_aet[z+1].x;

g_aet[z].delat=g_aet[z+1].delat;

g_aet[z+1].ymax=temp.ymax;

g_aet[z+1].x=temp.x;

g_aet[z+1].delat=temp.delat;

}

}

}

}

}

void generate()

{

int i,y,n=1,m,q,p;float x;

for(i=0;i<=9;i++)

{

if(n==1)

{ point2.x=point1.x=300;

point2.y=point1.y=200;

n++;