本文主要是介绍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
这篇关于Alternate Winding的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!