地理与生物信息学院
2010 / 2011 学年第二学期
实验报告
课程名称: 计算机图形学
实验名称: 区域填充算法的实现
班级学号 B08021730
学生姓名郭超伟
指导教师曹正林
日期: 2011 年 4 月
一、实验题目:
区域填充算法的实现
二、实验要求:
学****Visual C++ 、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础知识,从而掌握利用Visual C++进行图形程序设计的方法以及简单的图形画法,并编程实现区域填充算法,得出相应的输出图形。
三、实验内容:
1. 掌握Visual C++ 、菜单设计等方法;
2. 编程实现区域填充算法,得出相应的输出图形;
四、实验过程:
给定种子点(x,y),首先填充种子点所在扫描直线上给定区域的一个区段,填充种子所在的尚未填充的一区段,然后确定与这一区段相邻的上下两条扫描线上位于该区段内是否存在需要填充的新区段,如果存在,则依次把每个新区段最右端的象素作为种子放入堆栈。反复这个过程,直到堆栈为空。
扫描线种子填充算法步骤 1、初始化堆栈。 2、种子压入堆栈。 3、While(堆栈非空)从堆栈弹出种子象素。
1)图形的生成(定义坐标点)
struct point
{
int x;
int y;
}p[10]={100,100,200,100,200,200,300,200,400,100,400,400,100,400,100,100,-1};
point stack[1024000];
int top;
void push(int x,int y) //对选择的种子点进出栈
{
if(top>1024000)exit(0);
stack[top].x=x;
stack[top].y=y;
top++;
}
void pop(int &x,int &y)
{
if(top==0)
exit(0);
x=stack[top-1].x;
y=stack[top-1].y;
top--;
}
void gettop(int &x,int &y)
{
if(top==0)
exit(0);
x=stack[top-1].x;
y=stack[top-1].y;
}
2)种子填充算法的主实现代码
void CB08021730View::Ontianchong()
{
// TODO: Add mand handler code here
RedrawWindow();
CClientDC dc(this);
(1,5,"用鼠标在各个区域中选种子点");
CB08021730Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i;
for(i=0;p[i+1].x!=-1;i++)
{
(p[i].x,p[i].y);
(p[i+1].x,p[i+1].y);
}
计算机图形学区域填充 来自淘豆网www.taodocs.com转载请标明出处.