计算机图形学多边形填充
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
�有效边上的扫描线由起点到终点每次加1,即像素 点的y坐标为:y=y+1, �x坐标的变化可以按如下方法推导: �设有效边的斜率为k,假定有效边与当前扫描线yi 的交点为(xi,yi),则有效边与下一条扫描线yi+1 的交点为(xi+1,yi+1)。 其中, xi+1= xi +1/k 。
(xi+1,yi+1)
� 在图5中,多边形覆盖了12条扫描线。 � 扫描线y=3与多边形有4个交点 (2.3,3),(4.5,3),(7,3)和(9,3) �对交点进行取整处理后的结果为 (2,3),(5,3),(7,3)和(9,3)
y
� 按x值递增的顺序对交点 进行排序、配对后的填充区 间为(2,5)和(7,9), 共有7个像素点需要填充为 指定颜色。
P1P2 S=1 0 2.2 12
P1P2 S=1 1 2.6 12 2/5
y
P0P1 2/5 5 12
P0P1 4 12 -1
-1
S=11的扫描线处理完 毕后 对于P1P2边和 P0P1边,因为下一条 扫描线S=12和ymax相 等,根据“下闭上开” 的原则予以删除。 至此,全部有效边表 已经给出。
⑵点阵表示法
�用多边形覆盖的像素点集来描述 �特点是便于直接确定实面积图形覆盖的像素点,是多边 形填充所需要的表示形式 �但是缺少了多边形顶点的几何信息
⑶多边形的扫描转换
�将多边形的描述从顶点表示法变换到 点阵表示法的过程,称为多边形的扫描 转换。 �即从多边形的顶点信息出发,求出多 边形内部的各个像素点信息。
O
当S=8时,添加上新边P0P1和P0P6。
P1P2 S=8 1.4 12 P0P6 7 9 5 1 1 .5 9 2/5 7 12 P5P6 1/2 P0P1 -1
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4 P6
P3
1 2 3 4 5 6 7 8 9
P5
10 11 12 13 x
2.交点的异常处理 � 当扫描线与多边形顶点相交时,称该交点为奇点 � 奇点可以计数为0、1或2个相交点 � 如果奇点的计数不正确,将会导致错误填充。 � 具体计数原则如下: (1)当奇点在多边形两边之下方时,该点计为2个点,如 y 图中的P1、P3和P5点。 P6
12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 A P1 4 5 6 7 8 B C P3 9 10 11 12 x D P7 P0 P2 P5
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4 P6
扫描线的最大值为Smax=12, 最小值为Smin=1,共有12条扫 描线,每条扫描线之间间隔1个 像素单位。
P5
4 5 6 7 8 9 10 11 12 13 x
P3
1 2 3
O
每条扫描线的有效边表如下
P3P 4 -1/3 3 5 P5P 6 -1/2 8 9 1/2 3/4
P1P2 S=7 1 12 2/5 11 9 P5P6 1/2
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4 P6
P3
1 2 3 4 5 6 7 8 9
P5
10 11 12 13 x
P0(7,8), P1(3,12) P2(1,7), P3(3,1) P4(6,5), P5(8,1) P6(12,9)
◆有效边表填充算法 ◆边缘填充算法 ◆种子填充算法
实面积图形的概念 � 有效边表填充算法 � 边缘填充算法 � 区域填充算法
�
实面积图形的概念
实面积图形 � 描述物体的几何轮廓, � 表现物体的表面色彩, � 与人们观察物体表面的习惯相一 致, � 同时,实面积图形也是描述三维 物体、绘制三维真实感图形的基 础。
x ym a x 1/k next
图 12 有效边表结点
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4 P6
P3
1 2 3 4 5 6 7 8 9
P5
10 11 12 13 x
O
图 13 示例多边形
对于图13所示的多边形,顶点表示法为: P0(7,8),P1(3,12),P2(1,7),P3(3,1), P4(6,5), P5(8,1),P6(12,9) 。
y 6 5 4 3 2 1
y 6 5 4 3 2 1
O
1
2
3
4
5
6
O
1
2
3
4
5
6
x
图 8 面积3×3
图 9 面积2×2
在实际填充过程中,也需要考虑到像素面积大小的影响 问题:对左下角为(1,1),右上角为(3,3)的正方 形进行填充时,若边界上的所有像素全部填充,就得到 图8所示的结果。所填像素覆盖的面积为3×3个单位, 而正方形的面积实际只有2×2个单位。
y P6 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 A P1 4 5 6 7 8 B C P3 9 10 11 12 x D P7 P0 P2 P5 P4
0 1 1 1 0 2 2 1
2
3.填充算法步骤:
(1)确定多边形所占有的最大扫描线数,得到多边形顶点 的最小和最大y值(ymin和ymax) (2)从y=ymin到y=ymax,每次用一条扫描线进行填充 (3)对一条扫描线填充的过程可分为四个步骤: a.求交点 b.排序 c.交点配对 d.区间填色
3/4 P5 P6 1/2
这条扫描线处理完毕后 对于P3P4和P4P5两条边,因为 下一条扫描线S=5和ymax相等,根据“下闭上开”的原则 予以删除。
P 2P 3 S= 5 1.7 7 -1/3 10 9 P 5P 6 1/2
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4 P6
P7
P8
P3
P7
P8
P3
P0
P1
P2
P0
P1
P2
图 6 边界像素的问题
图 7 边界像素的处理
P6
P5
P4
P6
P5
P4
P7
P8
P3
P7
P8
P3
P0
P1
P2
P0
P1
P2
图 6 边界像素的问题
图 7 边界像素的处理
四个小正方形的公共边为:P1P8、P8P5、P7P8和P8P3。 P1P8和P7P8应该填充为哪一个小正方形的颜色? P8P5 和P8P3应该填充为哪一个小正方形的颜色?
(2)当奇点在多边形两边之 上方时,该点计为0个点, 如图中的P2、P4和P6点。
P4
2.交点的异常处理 (3)当奇点在多边形两边之间时,该点计为1个点,如图 中的P7点。
实现时,只需检查顶点两条边的另外两个端点 的y值,由这两个y值中大于交点y值的个数是0、 1、2来决定。
(4)扫描线与多边形的水平 边重合,理论上是无穷多个 交点,但在实际处理时不计 其交点。
多边形区域填充操作
(1)确定多边形顶点坐标 (2)生成多边形 (3)填充:多边形区域内像素点的判断
y P6 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 A P1 4 5 6 7 8 B C P3 9 10 11 12 x D P7 P0 P2 P5 P4
多边形的扫描转换
1.填充点的判别方法 “ 扫描线交点的奇偶数判 断 ” 法:用一根水平扫 描线从左向右通过多边 形而与多边形的边界相 交,扫描线与边界相交 奇数次后进入该多边 形,相交偶数次后离开 该多边形。
多边形的表示
多边形(区域)有两种表示方法: 顶点表示法和点阵表示法
P1 P0 P2 P5
P3
P4
图 3 多边形的顶点表示 法
图 4 多边形的点阵表示 法
⑴顶点表示法
�用多边形的顶点序列来描述 �特点是直观、占内存少,易于进行几何变换 �但由于没有明确指出哪些像素在多边形内,所以不能直 接进行填充,需要对多边形进行扫描转换
13 12 11 10 9 8 7 6 5 4 3 2 1
P1 P0 P2 P4
P6
P3
1 2 3 4 5 6 7
P5
8 9 10 11 12 13 x
O
图 5 扫描线填充多边形
有效边和有效边表
1.有效边(Active Edge,AE)
�与当前扫描线相交的边称为有效边 �在处理一条扫描线时仅对有效边进行求交运算, 可以避免与多边形的所有边求交,提高了算法效率。
P0(7,8),P1(3,12) P2(1,7),P3(3,1) P4(6,5), P5(8,1) P6(12,9)
P3 P4
O
P2P 3 S=2 2.7 7 P4P 5 7.5 5 -1/2 8.5 9 -1/3 3.8 5
3/4 P5 P6 1/2
P2P3 S=3 2.3 7 P4P5 7
y
P3P4 -1/3 4.5 5 P5P6 -1/2 9 9 1/2 3/4
� 如图11所示,随着扫描线 的移动,扫描线与有效边 交点的x坐标从起点开始 可以按增量1/k计算出来。
图11 有效边交点相关性
(xi,yi) 1/k
2.有效边表(Active
Edge Table, Table,AET) AET)
把有效边按照与扫描线交点x坐标递增的 顺序存放在一个链表中,称为有效边表 有效边表的结点:
2 有效边表填充算法
填充原理 � 有效边和有效边表 � 边表
�
填充原理
�
�
�
为了计算每条扫描线与多边形各边的交点,最 简单的方法是把多边形的所有边放在一个表中。 处理每条扫描线时,按顺序从表中取出所有 边,分别与扫描线求交点。 缺点:效率不高 � 重复判别多
实际每条扫描线只与少数边相交,边的连贯性
P0(7,8), P1(3,12) P2(1,7), P3(3,1) P4(6,5), P5(8,1) P6(12,9)
13 x
P3
1 2 3 4 5 6 7 8 9
P5
10 11 12
O
P2P3 S=6 1.3 7 -1/3 1 0 .5 9
P5P6 1/2
扫描线6处理完毕后 对于P2P3边,因为下一条扫描线 S=7和ymax相等,根据“下闭上开”的原则予以删除。当S =7时,添加上新边P1P2。
P0(7,8), P1(3,12) P2(1,7), P3(3,1) P4(6,5), P5(8,1) P6(12,9)
O
扫描线8处理完毕后, 对于P5P6边和P0P6边,因 为下一条扫描线S=9和ymax相等,根据“下闭上 开”的原则予以删除。
P1P2 S=9 1.8 12 2/5 6 12 P0P1 -1
P 2P 3 S=1 3 7 P 4P 5 8 5
P0(7,8),P1(3,12) P2(1,7),P3(3,1) P4(6,5), P5(8,1) P6(12,9)
y
13 12 11 10 9 8 7 6 5 4 3 2 1
P0 P2 P4
P6
P3
1 2 3 4 5 6 7 8 9
P5
10 11 12 13 x
y 6 5 4 3 2 1
y 6 5 4 3 2 1
O
1
2
3
4
5
6
O
1
2
3
4
5
Байду номын сангаас
6
x
图 8 面积3×3
图 9 面积2×2
�为了解决这些问题,在多边形填充过程中,常采用“下闭 上开”和“左闭右开”的原则对边界像素进行处理。 �图6的处理结果如图4-7所示,每个小正方形的右边界像 素和上边界像素都没有填充。 �图8的处理结果如图4-9所示,上面一行像素和右面一列 像素没有填充。
填充过程演示
特殊处理:边界像素的处理原则
在实际填充过程中,需要考虑到边界像素影响问题: 图6中正方形P0P2P4P6被等分为四个小正方形。 假定小正方形P0P1P8P7被填充为绿色,P1P2P3P8被填充为橙色, P8P3P4P5被填充为绿色,P7P8P5P6被填充为橙色。
P6 P5 P4 P6 P5 P4
5
13 12 11 10 9 8 7 6 5 4 3 2 1
P0 P2 P4
P6
P3
1 2 3 4 5 6 7 8
P5
9 10 11 12 13 x
P0(7,8), P1(3,12) P2(1,7), P3(3,1) P4(6,5), P5(8,1) P6(12,9)
P3 P4
O
P2 P 3 S=4 2 7 P4 P 5 6.5 5 -1/2 9.5 9 -1/3 5.3 5
�
求交运算量大
计算交点时没有考虑扫描线的连贯性
填充原理
有效边表填充算法的基本原理 �按照扫描线从小到大的顺序,计算当前扫描线与多边 形边的交点 �处理一条扫描线时,仅对与它相交的多边形的边进行 求交运算,考虑连贯性简化计算 �然后把这些交点按x值递增的顺序进行排序、配对,以 确定填充区间 �用指定颜色点亮填充区间内的所有像素,即完成填充 工作。 �有效边表填充算法通过访问多边形覆盖区间内的每个 像素,可以填充凸、凹多边形和环。