windows 多边形填充方式 ALTERNATE和WINDING

来源:互联网 发布:旅行背包 知乎 编辑:程序博客网 时间:2024/05/25 23:58

首先,ALTERNATE和WINDING方式之间的区别很容易察觉。对于ALTERNATE方式,您可以设想从一个无穷大的封闭区域内部的
点画线,只有假想的线穿过了奇数条边界线时,才填入封闭区域。这就是填入了星的角而中心没被填入的原因。
五角星的例子使得WINDING方式看起来比实际上更简单一些。在绘制单个的多边形时,大多数情况下,WINDING方式会填入所
有封闭的区域。但是也有例外。
在WINDING方式下要确定一个封闭区域是否被填入,您仍旧可以设想从那个无穷大的区域画线。如果假想的线穿过了奇数条
边界线,区域就被填入,这和ALTERNATE方式一样。如果假想的线穿过了偶数条边界线,则区域可能被填入也可能不被填
入。如果一个方向(相对于假想线)的边界线数与另一个方向的边界线数不相等,就填入区域

 

上面是对window程序设计书中翻译原话的引用。下面用图形对上面的解释做进一步分析,纯属个人理解:

  

五角星分析,如果为ALTERNATE,顾名思义,交替方式。如图用一条绿线穿过图形,和显示器上面的扫描线一样。遇到的第一条线记录为1,第二条记录2,第三天记录3,以此类推。交替填充是:1和2之间可以填充,2和3间的不填充,3和4间的要填充。以此类推,交替填充。

WINDING 方式,汉语翻译为缠绕。书上的翻译为先ALTERNATE,对于交替剩下的空白是有不同的,如果一个方向(相对于假想线)的边界线数与另一个方向的边界线数不相等,就填入区域。个人理解,这个方向应该是顺时针或者逆时针。如果一个封闭区域,全为顺时针或者全为逆时针,是可以围成一个圈的,也是能WINDING(缠绕)成功,所以需要填充。如果空白区域虽然封闭,但是划线方向既有顺时针又有逆时针,应该是无法WINDING成功的,所以不填充。上图五角星的划线方向为全部逆时针,所以WINDING是要填充的。

   下面再分析一下书中例子程序中的图形:

 

按照例子中所给的坐标点,个人画了一个类似图形,如下:

 

下面以书中所提把图划分的5各区域进行分析:

如果为ALTERNATE,交替填充,图中绿线为扫描线。应该很容易理解4和5不会被填充。

WINDING方式,除了4和5,其他和ALTERNATE。对于区域5,都是逆时针方向,所以WINDING(缠绕)成功,要填充。而区域4,

既有逆时针方向又有顺时针方向,WINDING不成功,所以不填充。

英文原文的解释为:个人认为direction因为理解为顺时针或逆时针方向,而不是上下左右或者东西南北等。

For example, consider the object shown in Figure 5-20. The arrows on the lines indicate the direction in which the lines are drawn. Both winding mode and alternate mode will fill the three enclosed L-shaped areas numbered 1 through 3. The two smaller interior areas, numbered 4 and 5, will not be filled in alternate mode. But in winding mode, area number 5 is filled because you must cross two lines going in the same directionto get from the inside of that area to the outside of the figure. Area number 4 is not filled. You must again cross two lines, but the two lines goin opposite directions

原创粉丝点击