17.2.1 坐标类
绘制图形到用像素定义坐标系统的设备上。设备上的每个点均有一个(x,y)坐标,从位于设备左上角的原点度量而得。其中,x坐标沿着向右的方向递增,y坐标沿着向下的方向递增。
在本章的后面,我们将学习像素坐标与现实中的单位,比如英寸或厘米,是如何相联系的。现在,我们着重介绍面向像素和屏幕的图形。
支持点、矩形、尺寸和区域的类在e32std.h中定义。
TPoint包含iX和iY坐标。
TRect包含两个点:表示左上角的iTl和表示右下角的iBr。
TSize包含iWidth和iHeight尺寸。 这些类装备了各种大量的构造函数、运算符和函数,操纵它们或组合它们,但并未试图封装它们的成员。不需要使用 get 和 set 函数来访问点的(x,y)坐标等内容。这样做意义实在不大,因为这些对象的表示完全公开。
定义TRect的两个点可以按不同的方式由特定的图形实现来解释。一种常见的解释是,把左上角点放到矩形中,把右下角点放到矩形外,如图17.4所示。
这一定义使某些事情更容易做到,比如计算大小,因为简单地用右下角点的x和y 坐标减去左上角点的x和y坐标即可得到。但它也使得其他事更难完成,比如交互绘制矩形时的计算,因为必须将(1,1)加到指针坐标上,从而正确地包含它的右下角。如果TRect定义为包含它的右下角,则让有些事更容易、有些事更难。重要的是,要记住矩形的定义依赖于特定的图形解释。
矩形应该正规化,使iTl的坐标绝不会比相应的iBr坐标大。如果在某TRect上进行可能会破坏这一条件的计算,则调用Normalize(),根据需要交换x坐标的值和y坐标的值,完成清理工作。
【责任编辑:
董书 TEL:(010)68476606】