扫描线法填充多边形

本文详细介绍了扫描线填充多边形的原理,包括活性边表和新边表的概念,以及具体的扫描过程。通过实例展示了如何运用这些算法进行多边形的填充。
摘要由CSDN通过智能技术生成

原理

如下图所示多边形:

简述

直线y=1,2,3……8顺序扫描多边形,以直线y=3为例,它与多边形的边有4个交点,将这4个交点的x坐标保存下来,两两之间画线,也就是(A,B)(C,D)之间画线。对于每一个y都是两两之间画线。现在考虑直线y=2,它与多边形有3个交点,很显然是F,G之间画线,那么p1怎么处理呢?可以观察到p1是多边形边的一个端点,是两条边的交点,因此,可以选择将p1看作两个点存储,这样(p1,p1)之间画线,就是描一个点。或者不存储p1,只在(F,G)之间画线。我采用的是不存储p1。

活性边表

具体每一条扫描线对应的坐标存储在活性边表Aet中,每一条扫描线对应一个链表,链表中的节点类型为
x dx ymax next
其中,x为交点的x坐标,dx为相交直线的x方向增量(x2-x1)/(y2-y1),ymax为直线可以到达的最大y值。由于我采用的是当扫描线与边的端点相交时不存储此交点,所以,扫描线y=1的Aet中没有存储坐标,y=2中不存储p1,只存储F,G的x坐标以及F,G所在直线的斜率倒数。

新边表

新边表Net用来记录y为多少时与新的边相交,每一条扫描线也对应一个链表,结点类型和Net中的结点类型相同。
如图中的新边表中,y=1应该记录  (p2,p3),(p4,p3)两条直线的信息;y=2应该记录(p1,p6),(p1,p2)两条直线的信息,y=6记录(p4,p5)一条边的信息,y=7记录(p6,p5)一条边的信息。

扫描过程</

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值