- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、实验目标
1.了解基于种子填充算法的基本思想;
2.掌握基于种子填充算法的算法实现;
3.掌握栈的使用。
二、实验内容
本次实验主要是实现递归种子填充算法、简单种子填充算法、扫描线种子填充算法以及区域图案填充算法。
种子填充算法原理简述:在开始介绍种子填充算法之前,首先也介绍两个概念,就是“4-通算法”和“8-通算法”。既然是有哪些信誉好的足球投注网站就涉及到有哪些信誉好的足球投注网站的方向问题,从区域内任意一点出发,如果只是通过上、下、左、右四个方向有哪些信誉好的足球投注网站到达区域内的任意像素,则用这种方法填充的区域就称为四连通域,这种填充方法就称为“4-通算法”。如果从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下全部八个方向到达区域内的任意像素,则这种方法填充的区域就称为八连通域,这种填充方法就称为“8-通算法”。(x, y)时,首先分别向左和向右两个方向填充种子点所在扫描线上的位于给定区域的一个区段,同时记下这个区段的范围[xLeft, xRight],然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。
扫描线种子填充算法可由下列四个步骤实现:
(1) 初始化一个空的栈用于存放种子点,将种子点(x, y)入栈;
(2) 判断栈是否为空,如果栈为空则结束算法,否则取出栈顶元素作为当前扫描线的种子点(x, y),y(3) 从种子点(x, y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xLeft和xRight;
(4) 分别检查与当前扫描线相邻的y - 1和y + 1两条扫描线在区间[xLeft, xRight]中的像素,从xLeft开始向xRight方向有哪些信誉好的足球投注网站,若存在非边界且未填充的像素点,则找出这些相邻的像素点中最右边的一个,并将其作为种子点压入栈中,然后返回第(2)步;
区域图案填充算法:以上介绍的区域填充算法,都是把区域内部的像素全部置成同一种颜色。但在实际应用中,有时需要用图案来填充平面区域。在确定了区域内点后,不是马上对像素填色,而是先将该像素映射到图案位图的对应位置。根据图案上对应位置的像素值,决定填充颜色。一般来说,图案比填充区域要小得多。所以图案总是成周期性的,使之能通过重复使用,构成任意尺寸的图案。
图案填充方式分为透明方式和不透明方式。透明方式:当图案位图的对应位置为1时,用前景色写像素,否则,不改变该像素的值。不透明方式:则图案位图的对应位置为1时,用前景色写像素,否则,用背景色写像素。
本实验实现在绝对定位法下用不透明方式对平面区域填充图案:
假设填充图案是一个M*N的位图,用M*N的数组存放;
当确定了区域内点p(x,y)后,则图案位图上的对应位置为p’(x%M,y%N),其中%为c语言整除取余运算符,然后取出图案位图该位置的像素进行填充。
三、实验步骤
一、打开cgdemoMFC工程
1.打开Microsoft Visual Studio 2008
2.File--Open--cgdemo.sln
二、添加菜单
1.左侧视图栏中有三个视图:ClassView、ResourceView、FileView,点击 ResourceView
2.展开cgdemo,展开Menu,双击IDR_MAINFRAME
3.在右侧窗口菜单栏中找到“基本图形生成”菜单项,在该菜单项中添加“递归种子填充算法”,在“递归种子填充算法”属性框中找到ID框填:ID_FILLRECURSION。在该菜单项中添加“简单种子填充算法”,在“简单种子填充算法”属性框中找到ID框填:ID_FILLEASY。在该菜单项中添加“扫描线种子填充算法”,在“扫描线种子填充算法”属性框中找到ID框填:ID_FILLZZSCANLINE。在该菜单项中添加“区域图案填充算法”,在“区域图案填充算法”属性框中找到ID框填:ID_FILLPATTERN。
三、创建、编辑函数
1.打开cgdemoView.h头文件,在cgdemoView类枚举类型成员变量m_drawsty中添加FILL_RECURSION、FILL_EASY,FILL_SCANLINE,FILL_PATTERN
2.给菜单项“递归种子填充算法”添加命令消息响应函数OnFillrecursion()在该函数中添加以下程序代码。
void CcgdemoView::OnFillrecursion()
{
// TODO: Add your command handler code here
m_drawstyle=FILL_RECURSION;
Invalidate(true);
}
给菜单项“简单种子填充算法”添加命令消息响应函数OnFilleasy()在该函数中添加以
文档评论(0)