Alternate Winding

见<<windows程序设计>> 第五版 Charles Petzold,P139

刚看时,有点摸不着头脑.网上搜索看了些前辈的解释.


回头再看书本,发现其实Petzold大牛把这个问题解释简单明了,为何第一次看的时候居然入不了脑子?


完全按照书上写的来解释,如下:


1 Alternate 模式:  奇数填充,偶数不填充.

       从一封闭区域内一个点画条射线到无穷远处, 碰到奇数条边 则填充点所在的区域; 碰到偶数条边则不填充

     下图左边是alternate 模式,区域4和5就不填充,他们碰到的边数是2,是偶数,因此不填充.


2. Winding模式:  奇数填充,偶数看情况(一个内部计数器counter非零则填充,counter=0则不填充)

            下图右边是winding模:

           很显然,1,2,3区域内找个点画条射线穿出整个图形,碰到的边的个数为1,是是奇数,因此填充.

          对于,4,5这2个区域,射线出来的时候,碰到的边数是偶数,就要看计数器counter是否为非零了.

         以4来说: 开始counter=0,碰到第一个边是向左的,counter++;碰到第二条边是向右的,与第一个边反向,count--; 最终counter = 0,因此不填充.

        以5来说,开始counter=0,碰到第一个边是向左,counter++; 碰到第二个边还是同向,counter++;最终counter=2,故填充


//  把碰到的第一个边作为count方向,后面的与它同向就++,反向就-- 






其他解释参数如下:



http://bbs.csdn.net/topics/40019151

http://loveljc2000.blog.163.com/blog/static/1896335182011526012494/

http://blog.csdn.net/sun_shine_/article/details/6448947

http://blog.csdn.net/goki123/article/details/5216303

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145080(v=vs.85).aspx

http://comments.gmane.org/gmane.comp.lib.cairo/23250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值