多边形的扫描转换算法的改进

多边形的扫描转换算法的改进

为了避免求交运算,需要引进一套 特殊的数据结构

(1)活性边表(AET):把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中。

 

(2)结点内容(一个结点在数据结构里可用结构来表示)
x: 当前扫描线与边的交点坐标
△x: 从当前扫描线到下一条扫描线间x的增量
ymax: 该边所交的最高扫描线的坐标值ymax

 

随着扫描线的移动,扫描线与多边形的交点和上一次交点相关:
△x=1/k

另外,需要知道一条边何时不再与下一条扫描线相交,以便及时把它从有效边表中删除出去,避免下一步进行无谓的计算

 

其中x为当前扫描线与边的交点,ymax是边所在的最大扫描线值,通过它可以知道何时才能“抛弃”该边,△x表示从当前扫描线到下一条扫描线之间的x增量即斜率的倒数。next为指向下一条边的指针

 

为了方便活性边表的建立与更新,需构造一个新边表(NET),用来存放多边形的边的信息:

1.首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数

 

 

 

2.NET挂在与该边低端y值相同的扫描线桶中。也就是说,存放在该扫描线第一次出现的边

-该边的ymax
- 该边较低点的x坐标值xmin
- 该边的斜率1/k
- 指向下一条具有相同较低端y坐标的边的指针

 

 

在这个表里只有1、3、5、7处有边,从y=1开始做,而在1这条线上有两条边进来了,然后就把这两条边放进活性边表来处理

 

 

每做一次新的扫描线时,要对已有的边进行三个处理:

1、是否被去除掉;
2、如果不被去除,第二就要对它的数据进行更新。所谓更新数据就是要更新它的x值,即:x+1/k
3、看有没有新的边进来,新的边在NET里,可以插入排序插进来。

这个算法过程从来没有求交,这套数据结构使得你不用求交点!避免了求交运算。

小结

扫描线法可以实现已知任意多边形域边界的填充。该填 充算法是按扫描线的顺序,计算扫描线与待填充区域的 相交区间,再用要求的颜色显示这些区间的像素,即完 成填充工作

为了提高算法效率:
(1)增量的思想
(2)连贯性思想
(3)构建了一套特殊的数据结构

转载于:https://www.cnblogs.com/cnblog-wuran/p/9704061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值