多边形的扫描转换算法、区域填充算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贵州大学计算机图形学实验报告
学院:计算机科学与信息学院专业:软件工程班级:
反映)
根据扫描线的连贯性可知:一条扫描线与多边形的交点中,入点和出点之间所有点都是多边形的内部点。
所以,对所有的扫描线填充入点到出点之间的点就可填充多边形。
如何具体实现(如何找到入点、出点)?
根据区域的连贯性,分为3个步骤:
(1)求出扫描线与多边形所有边的交点;
(2)把这些交点按x坐标值以升序排列;
(3)对排序后的交点进行奇偶配对,对每一对交点间的区域进行填充。
步骤(3)如上图:对y=8的扫描线,对交点序列按x坐标升序排序得到的交点序列是(2,4,9,13),然后对交点2与4之间、9与13之间的所有象素点进行填充。
求交点、排序、配对、填色
利用链表:与当前扫描线相交的边称为活性边(Active Edge),把它们按与扫描线交点x坐标递增的顺序存入一个链表中,称为活性边表AEL (AEL, Active Edge List)。它记录了多边形边沿扫描线的交点序列。
AEL中每个对象需要存放的信息:
ymax:边所交的最高扫描线;
x:当前扫描线与边的交点;
Δx:从当前扫描线到下一条扫描线之间的x增量
next:指向下一对象的指针。
伪码:
建立ET,置y为ET中非空桶的最小序号;
置AEL表为空,且把y桶中ET表的边加入AEL表中;
while AEL表中非空do
begin
对AEL表中的x、Δx按升序排列;
按照AEL表中交点前后次序,在每对奇偶交点间的x段予以填充;
计算下一条扫描线:y=y+1;
if 扫描线y=ymax then 从AEL表中删除这些边;
对在AEL表中的其他边,计算与下一条扫描线的交点:x=x +Δx 按照扫描线y值把ET表中相应桶中的边加入AEL表中;
end
end of algorithm
二、区域填充算法:
区域可采用两种表示形式:
内点表示
枚举区域内部的所有像素;
内部的所有像素着同一个颜色;
边界像素着不同的颜色。
边界表示:
枚举出边界上所有的像素;
边界上的所有像素着同一颜色;
内部像素着不同的颜色。
区域填充
先将区域内的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。
简单种子算法
扫描线种子算法
要求区域是“连通”的。
测试对象为象素段 ,对区域内的每一象素段,只保留其最右边(或左边)的象素作为种子象素.区域填充(扫描线算法):
–目标:减少递归层次
–适用于内点表示的4连通区域
基本过程:
当给定种子点时,首先填充种子点所在的扫描线上的位于给定区域的一个区段,然后确定与这一区段相通的上下两条扫描线上位于给定区域内的区段,并依次保存下来。
实验结果扫描线算法:
在界面上点击点,然后点击生成,形成下图黑色的图形:
种子填充算法:
注:可根据教学需要对以上栏目进行增减。表格内容可根据内容扩充。