欢迎来到天天文库
浏览记录
ID:33605355
大小:66.00 KB
页数:7页
时间:2019-02-27
《计算机图形学--区域填充算法的实现94649》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四区域填充算法的实现班级信计2班学号20080502090姓名张进分数一、实验目的和要求:1、理解区域的表示和类型,能正确区分四连通和八连通的区域2、了解区域填充的实现原理3、利用TurboC实现区域填充的递归算法二、实验内容:当给定种子点(x,y)时,首先填充种子点所在的扫描线上的位于给定区域的一个区段,然后确定与这一区段连通的上下两条扫描线上位于给定区域的区段依次保存下来。反复这个过程,直到填充结束.三、实验结果分析1、种子填充算法假设在多边内有一像素已知,由此出发利用连通性找到区域内的所有像素2、设(x,y)
2、为内点表示的四连通区域内的一点,oldcolor为区域的原色。现取(x,y)为种子点,要将整个区域填充为显得颜色newcolor,递归填充过程如下:先判别像素(x,y)的颜色,若它的值不等于oldcolor,说明该像素或者位于区域之外或者已经被置于newcolor,不需要填充,算法结束,否则置该像素的颜色为newcolor,再对与其相邻上、下、左、右四个相邻像素分别作递归填充。1、程序代码:#include"Conio.h"#include"graphics.h" /*forinitgr()*/#include"st
3、dio.h" /*forNULL */#defineclosegrclosegraphvoidinitgr(void)/*BGI初始化*/{intgd=DETECT,gm=0;/*和gd=VGA,gm=VGAHI是同样效果*/registerbgidriver(EGAVGA_driver);/*注册BGI驱动后可以不需要.BGI文件的支持运行*/initgraph(&gd,&gm,"");}enumBOOL{FALSE=0,TRUE=1};typedefstruct{ inty; int7xLeft
4、; intxRight;}Span;/*区段*/typedefstructstacknode{Spanspan;structstacknode*next;}stacknode;typedefstruct{stacknode*top;}linkstack;/*-----------------进栈操作----------------------------------------*/voidPushStack(linkstack*s,Span*span){stacknode*p=(stacknode*)malloc(
5、sizeof(stacknode));p->span.y=span->y;p->span.xLeft=span->xLeft;p->span.xRight=span->xRight;p->next=s->top;s->top=p;}/*-----------------出栈操作------------------------------------------*/voidPopStack(linkstack*s,Span*span){intx;stacknode*p=s->top;span->y=p->span.y;s
6、pan->xLeft=p->span.xLeft;span->xRight=p->span.xRight;s->top=p->next;free(p);}/*-----------------将栈清空------------------------------------------*/voidSetStackEmpty(linkstack*s){ stacknode*p=s->top; while(s->top!=NULL) { free(p); s->top=p->next;
7、 7}}/*--------------判断栈是否为空----------------------------------------*/intIsStackEmpty(linkstack*s){ if(s->top==NULL) return1; else return0;}/*----------------核心程序开始----------------------------------------*/voidScanLineFill4(intx,inty,intoldColor,i
8、ntnewColor){ intxLeft,xRight; inti; enumBOOLisLeftEndSet,spanNeedFill; Spanspan; linkstack*s=(linkstack*)malloc(sizeof(linkstack)); s->top=NULL; /*填充并确定
此文档下载收益归作者所有