c++多边形扫描线填充算法_扫描线填充算法-有序边表法

一、定义边的数据结构

1、边的ymax

2、边的底端x坐标

3、斜率的倒数1/m

4、指向下条边的指针

二、多边形边表(ET)

1、与x轴平行的边不计入

2、多次相交的点记录方式如下:

2ad4a9ec3f8deb3bbbca1ea598b2aaca.png

边表具体记录方式如图:

3fdeb6a483f0bc925a13f82dc0bdffc9.png

三、活动边表(AET)

从多边形的ymin开始,步长为1向上扫描。

活动边表记录了扫描线与多边形的相交情况。若当前的的y到达了活动边表内某一边的ymax,把该边删除。若当前的y处有新的边信息,把新边加入。然后重新排序,填充。

具体活动边表更新过程:

(1)开始y=1:

21acff2eeee6a60d656de3ef85ccbb3c.png

(2)对保留下来的每个记录,用Xi+1/m代替Xi:

813232146be6f47145046c4bfd95f33b.png

(3)使yi+1,以便进入下一轮循环。当y=2时,ET表为空,所以不需要ET表加入AET表。此时上图中x=4和x=6.5,将他们之间的点填上像素。由于y=2,此时没有达到y=3和y=5,所以不必删除节点。

(4)再让Xi+1/m代替Xi,得到:

887e43b23b275a1994a8c298894a67aa.png

(5)使yi=3,此时他的边表不为空,所以将其ET表加入,得到:

a1466cd5988439e365af2a70b6c74854.png

注意按照xi的升序排列。将Xi=2,至Xi=7之间填上颜色。

(6)由于此时yi=3,而第一个节点的yi=3,所以去掉此节点。

3b46f43dda71b1fe2b49f8c521ff94d3.png

(7)再用Xi+1/m代替Xi,得到:

3b8429e9c0fa113360b722fa2cb7f3d3.png

(8)yi=4,重复继续

参考:https://blog.csdn.net/wodownload2/article/details/52154207

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值