计算机图形学-X扫描线

什么是X扫描线算法

用一条扫描线穿过多边形 计算扫描线与多边形的相交区间 再用要求的颜色显示这些区间的像素 完成填充工作在这里插入图片描述

解决共享顶点问题

原则:
若共享顶点的两条边分别落在扫描线的两边 交点只算一个
若共享顶点的两遍在扫描线的同一边 交点算作0个或者2个
如上图 如果在这里插入图片描述
检查共享顶点两条边的另外两个端点的y值
例如图中y=7处的蓝线 共享顶点另外两条边的端点分别是1和12 一个在共享顶点上面一个在下面 这个点就算一个
例如y=5处的蓝线 共享顶点的另外两条边的端点分别是1和1 这该交点算作零个
y=1的应该就算做2个在这里插入图片描述

缺点

和每条边都要尝试求交 效率太低

改进算法

活性边表(AET)

与当前扫描线相交的边叫做活性边 并把他们按与扫描线交点x坐标递增的顺序存放在一个链表中
而一个链表结点中结构是:
x:当前扫描线与边的交点坐标
deltaX:从当前扫描线到下一条扫描线间x的增量(因为每次两条扫描线之间y的差值是1 所以求出x的增量) 主要是减少求交运算 增量思想
在这里插入图片描述

ymax:该边所交的最高扫描线的坐标轴ymax
next:指向下一条边的指针
在这里插入图片描述
在这里插入图片描述
还少写了个D P3P4 【11,0,8,next】

新边表((NET)方便活性边表的建立)

只在顶点出填入新边表 新边表主要是方便知道什么时候有新的边会被扫描线扫到 要加入活性边表中 例如图中就只有1,3,5,7,9,10 这几个位置有新边表 1处有两条边加入了活性边表
构建一个纵向链表
链表长度:多边形所占又的最大扫描线线数 也就是y的差值
链表结点:也可以称为吊桶 对应每一条扫描线
在这里插入图片描述

改进扫描线扫描的步骤

每一个新的扫描线开始时
1.先从边的序列中拿出一条边 判断他是否在活性边表中 如果不在就丢弃 如果在则执行下一步
2.若未被丢弃 则更新数据 更新x值 x+1/k
3.查看是否有新边进去
这样就避免了求交
在这里插入图片描述

改进扫描线缺点

无法实现对未知边界的区域填充

边缘填充算法

按任意顺序处理多边形的每条边 处理每条边时 先求出该边与扫描线的交点 将每条扫描线上交点右边的所有像素取补
在这里插入图片描述

栅栏填充算法

在这里插入图片描述

边界标志算法

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值