对alternate和winding填入方式的理解 《windows程序设计》笔记
来源:互联网 发布:javbus防屏蔽域名 编辑:程序博客网 时间:2024/05/21 04:22
看《windows程序设计》,这里又遇到了不明白的地方,又上网查了查,发现很多地方只是对ALTERNATE解释清楚了,可是
对WINDING说的还是云里雾里。我觉得虽然自己不一定能弄清楚windows要这样处理的原因,但至少得弄清楚windows这样处理的方法吧。后来看了哪个地方的一段英文,总算明白了。现在自己来总结一下这两种填充方式,如果有错的话,大家指出。
==================================
alternate方式 系统默认的方式
首先是书上说的假想的线,不知道是不是翻译的原因,按书上的话挺难理解的。我现在的理解是假想的线就是在一条
条水平的扫描线,它们跟多边形的边界线相交。当然,对某一个小区域的判断,只需要取一条经过这个区域的扫描线
,不过要计算是否得填充这块区域还应该从扫描线刚接触到多边形开始算起。
下面有一句英文
fills area between odd-numbered and even-numbered polygon sides on each scan line
水水地翻译一下:填充这样的区域:与每一条扫描线相交的奇数边和偶数边之间的区域。
这里需要解释一下,这里的奇数边和偶数边是有顺序关系的。上面的话的另一层意思:不填充偶数边和奇数边之间的
区域。
还有对边数的计算是这样的:扫描线接触到的第一条线算记为1(这和正常的理解一样,不过和程序员的想法可能有
点出入),第二条记为2,这样的话1和2之间的区域就应该被填充,所以单独的矩形在默认的情况下都被填充了。而2和
3之间的区域则不被填充。这样书上的两个例子都可以解释了。
还有alternate是轮流、交替的意思,我想这也是命名的时候的想法——交替填充。
===================================
winding方式 弯曲、缠绕的意思 不清楚和命名的关系
这里有段英文,很好的解释了winding方式。
When the polygon-filling mode is WINDING, the system uses the direction in
which a figure was drawn to determine whether to fill an area. Each line
segment in a polygon is drawn in either a clockwise or a counterclockwise
direction. Whenever an imaginary line drawn from an enclosed area to the
outside of a figure passes through a clockwise line segment, a count
is incremented. When the line passes through a counterclockwise line segment,
the count is decremented. The area is filled if the count is nonzero when
the line reaches the outside of the figure.
这段话,大家应该都可以看懂,生词比较少。大家看了也就都明白了。
++
下面是自己的翻译加理解。
如果选了WINDING模式,系统会通过一个数字(就是下面讲的计数器)来决定是否填充这块区域。区域的每条边界线
不是顺时针就是逆时针(自己假定一个画的轨迹,然后标注正逆方向),而系统用一条假想的线(从左向右)穿过区
域(可以假想为屏幕上水平的扫描线),当这条假想的线经过逆时针的边界线时,那个计数器就增加(自定义+1,
当然计数器初始值为0);当经过顺时针的边界线时,那个计数器就减少(自定义-1)。随着假想的线(从左往右)
走动,在计数器为非0的时候,就填充经过的区域。(注意是非0)
这样的话,书上例子也很好理解了。填充五角星的时候,对中间部分分为上下两部分讨论,对上面的部分,我的画法的结果是:+1,+1,-1,-1。在扫描线经过我们画的区域里时计数器的值一直非0,而不在我们的区域里时计数器都是0。这样整个五角星都被填满了。第二个矩形的例子也很好理解了。
弄懂了这个问题,我突然感觉,毕竟这是外国人弄出来的玩意,如果看不懂老外写的东东,就只能看国内二手的资料,多少理解上会出现偏差哦。从这点可以看出学好英语,很重要。
最后附两张图,以后自己看的时候可以验证一下。
- 对alternate和winding填入方式的理解 《windows程序设计》笔记
- windows 多边形填充方式 ALTERNATE和WINDING
- 绘制填入区域 之 ALTERNATE 与 WINDING 的解释
- 详解:多边形填充方式(ALTERNATE和WINDING)的区别
- 绘制填入区域 之 ALTERNATE 与 WINDING
- 多边形的填充方式ALTERNATE与WINDING的区别
- 多边形填充方式:ALTERNATE与WINDING的区别
- WINDING 和 ALTERNATE模式的区别【学习札记】
- win32两种填充模式ALTERNATE和WINDING的区别
- Alternate Winding
- SetPolyFillMode(hdc,imode)中alternate与winding的区别
- 第26周-window程序设计(基础篇)-第5章(图形基础)-Polygon函数和多边形填入方式
- 对《Windows程序设计》的疑惑
- Windows api之SetPolyFillMode的winding填充模式原理
- 对Session和Cookie的理解笔记
- 使用T_sql语句向其中一次填入一条数据或一次填入多条数据的方式填入数据。
- 对 《windows程序设计 第5版》第11章对话框ABOUT2程序的理解
- Shape Faces and Winding(物体的方向和环绕)
- C++的动态绑定和静态绑定
- [收藏]web基础在线学习网站
- GCC Coverage代码分析-编译过程自动化及对链接的解释
- [收藏]html5学习网站
- hibernate一对一唯一外键关联映射(双向关联PersonIdCard)
- 对alternate和winding填入方式的理解 《windows程序设计》笔记
- C++执行时间统计的一种方法
- [学习记录] oracle:安装过程
- 将结果集反向转置为一列
- 为项目中的URL中文参数,使用的加密类,包含判断字符是否是中文的方法
- 选择最好的PHP MVC开发框架
- ubuntu中关于开启telnet认识到的问题
- 深入理解C++的动态绑定和静态绑定
- 物料编码---制造业企业信息化的源头