2024年4月30日发(作者:)
宁夏师范学院数学与计算机科学学院
《计算机图形学》实验报告
实验序号:6 实验项目名称:图形区域填充效果
学 号 姓 名
指导教师
专业、班
时 间
实验地点
一、实验目的:
任务:
编写区域填充算法程序,验证算法的正确性。
1、学习种子填充算法的 3 种类型;
2、设计扫描线填充算法;
3、对给定多边形实现填充的程序设计。
二、实验内容与步骤
(1)种子填充算法原理
在多边形内部找到一个已知的象素点作为种子点,由此开始,利用区域的连通性
找到多边形内部的 其它所有象素点进行填充。
(i)四向连通区域
①四向连通区域概念:从区域上任一点出发,在不超出区域边界的前提下,可通
过4个方向:上、下、左、右的移动组合到达区域中的任意象素点,称此区域为四向
连通区域。
②四向填充算法 允许从 4 个方向搜索下一个象素的填算法称为是四向填充算
法。
(ii)八向连通区域
①八向连通区域概念:从区域上任一点出发,在不超出区域边界的前提下,可通
过 8个方向:上、下、左、右、左上、左 下、右上、右下的移动组合,到达区域中
的任意象素,称此区域为四向连通区域。
②八向填充算法允许从8个方向搜索下一个象素的填充算法称为是八向填充算
法。
(2)种子填充算法分类
(i)递归填充算法
初始化:种子象素入栈;
步骤 1:栈顶象素出栈,作为种子点;
步骤 2:种子点被置为填充色;
步骤 3:按照左、上、右、下顺序检查与种子点相邻的象素:若非边界且
未被填充,则入栈(8 向连通区域需考虑更多相邻象素);
步骤 4:若栈不空,则重复第一步。
(ii)扫描线算法
初始化:由指定的种子象素点(x,y)生成种子
(y,xl,xr)填充区间并入
栈(xl,xr分别为种子点所在扫描线上多边形内部区间的左、右端点);
步骤 1:若种子栈空则算法终止,否则栈顶种子出栈;
步骤 2:确定新种子:分别确定 y+1,y-1 扫描线上与(y,xl,xr)连通的
区间;填充新区间并将新 种子压入堆栈;
步骤 3:上述过程循环执行。
(3)扫描区域填充算法设计
Step1:创建 MFC 单文档应用程序,并命名为 FloodFill,如图所示;
Step2:向工程中添加 Generic Class,命名为 CStack,创建界面如下图(左)所
示;
Step3:向该工程中添加 MFC Class,命名为 CFill,且该类继承于 CView 类,对
应的创建界面如上图(右)所示;
CStack.h参考代码:
// Stack.h: interface for the CStack class.
#if !defined(AFX_STACK_H__D198F788_4ED1_4C09_98E5_433BAB24D864__INC
LUDED_) #define
AFX_STACK_H__D198F788_4ED1_4C09_98E5_433BAB24D864__INCLUDED_
#if _MSC_VER > 1000
#pragma once


发布评论