计算机图形学实验四 区域填充算法的实现

2020-04-14 23:06

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

班级 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

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++;

} else

{ if(n%2==0)

{ x=40*cos(i*pi/5)+200; y=40*sin(i*pi/5)+200; } else

{ x=100*cos(i*pi/5)+200; y=100*sin(i*pi/5)+200; }

if(point1.y==y) { n++; continue;}

m=MIN(point1.y,y);

if(x==point1.x)

{ dge[i-1].delat=0;

dge[i-1].ymax=MAX(point1.y,y); dge[i-1].x=x; dge[i-1].pedge=0;

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

{ if(g_et[q].n==m) break;} if(q==10) {

g_et[i-1].pedge=&dge[i-1];

g_et[i-1].n=m; } else {

g_et[q].pedge->pedge=&dge[i-1];

g_et[i-1].n=0; }

}

else {

dge[i-1].delat=(float)(x-point1.x)/(y-point1.y); dge[i-1].ymax=MAX(point1.y,y); if(point1.y>y) dge[i-1].x=x; else {dge[i-1].x=point1.x; }


计算机图形学实验四 区域填充算法的实现.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:企业纳税实务

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: