实验二:图形填充算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机图形学》实验报告
(实验二:图形填充算法)
一、实验目的及要求
用两种方法做图形的填充算法!
二、理论基础
1.边填充算法
对于每一条扫描线和每条多边形的交点(x1,y1),将该扫描线上的交点右方的
所有像素取补。
2.种子填充算法
利用栈来实现种子填充算法。种子像素入栈,当栈非空时重复执行如下步骤:
将栈顶像素出栈,将出栈像素置成多边形色,按左,上,右,下顺序检查与出
栈像素相邻的四个像素,若其中某个像素不再边界且未置成多边形,则把该像
素入栈!
三、算法设计与分析
1、边填充算法
void CEdge_mark_fillView::OnDraw(CDC* pDC)
{
CEdge_mark_fillDoc* pDoc = GetDocument();
ASSERT_V ALID(pDoc);
int d[500][500]={0};int inside;int x,y;
Bresenham(80,101,100,400,d);
Bresenham(100,300,290,400,d);
Bresenham(292,400,382,50,d);
Bresenham(380,50,202,150,d);
Bresenham(200,150,82,101,d);
for(y=0;y<500;y++)
{
inside=0;
for(x=0;x<500;x++)
{
if(d[x][y]==1)
if(d[x+1][y]!=1)
{
inside=!(inside);
}
if(inside!=0)
pDC->SetPixel(x,y,12);
}
}
}2、种子填充
int x=299,y=51;
COLORREF oldcolor;
COLORREF newcolor;
oldcolor=RGB(256,256,256);
newcolor=RGB(123,123,123);
pDC->MoveTo (40,40);
pDC->LineTo (80,40);
pDC->LineTo (70,80);
pDC->LineTo (40,40);
FloodFill(51,51,RGB(255,255,255),RGB(0,0,255));
pDC->LineTo (40,40);
void CMyView::FloodFill(int x,int y,COLORREF oldcolor,COLORREF newcolor) {
CDC* pDC;
pDC=GetDC();
if(pDC->GetPixel(x,y)==oldcolor)
{
pDC->SetPixel(x,y,newcolor);
FloodFill(x,y-1,oldcolor,newcolor);
FloodFill(x,y+1,oldcolor,newcolor);
FloodFill(x-1,y,oldcolor,newcolor);
FloodFill(x+1,y,oldcolor,newcolor);
}
四、程序调试及结果的分析
1、
2、
四、实验心得及建议
由于很多不会,所以这次没能按时当堂完成,下来花了不少时间才弄出来,第二种尤其比较麻烦,在同学的帮助下才做出来了。种子填充算法适用性大,但是运行较慢。没有边填充算法简便!
姓名班级学号实验日期指导教师实验成绩
评语: