您的位置:首页 > 其它

SetWindowOrg SetViewportOrg DC 的坐标

2011-01-06 23:59 295 查看
转自:http://blog.csdn.net/zsyddl2/archive/2011/01/06/6120886.aspx

 

 

SetWindowOrg SetViewportOrg DC 的坐标

SetWindowOrg SetViewportOrg , 在 显示器中的形象解释、验证,(打印机上未验证,也许不同,没有打印机所以暂时没有验证)
这里只是说一下原点坐标。在一个程序中遇到 DC 的坐标问题,也是一直没有搞明白。
这次在网上搜索,确实有几个帖子说的比较详细,但是还是不容易理解,不形象。所以细细的想了一下,并通过程序验证正确。形象具体的总结了一下:
 
有三个坐标系
1 、 世界坐标系,这个我们可以认为是固定不变的一个坐标系,一个网状的坐标格子,在最底层。 (该坐标在函数使用中没有涉及,但是一定有,帮助理解)。
2 、 设备坐标,也就是 viewport 坐标。这个就是图形设备,打印机什么的,可以想象为一张纸,用于绘图的纸张。   dc 的绘图动作, 使用的坐标就是相对该坐标的 ,这个很重要。
比如 dc.Rectangle(0, 0, 200, 200); 无论 viewport 原点在哪里, 该矩形都是 以 viewport 的原点 的 一个 200*200 的 dc.Rectangle;
  比如 pDC->SetViewportOrg(100, 100);
  pDC->Rectangle(0, 0, 200, 200);
  该矩形还是在 viewport 中的 0, 0, 200, 200 。 但是 在世界坐标中,该矩形为   100 , 100 , 300 , 300 , 因为该矩形是相对 ViewportOrg 定位的坐标
  无论 viewport 在哪里, window org 在哪里,最后绘制的图形可以在世界坐标中找到,而且位置都是确定的:通过 viewportorg 偏移找到。
 
3 、 窗口坐标, windoworg ,也是我们创建的窗口, 这个就是透过该坐标 我们看见的世界中的图形,你的照相机。也就是所有图形已经通过 2 中的坐标关系被绘制在世界坐标中,通过本规则移动一个窗口,移动到你想看的地方,然后世界坐标的景物就在你的窗口中了。就像一个照相机一样,随便怎么移动,只是景物在照相机中的位置变化,但是景物的在自然世界的位置是没有变化的。而移动相机和景物的位置就是相反的。比如你把相机左移动,景物就在你的相机中向右移动,反之亦然。
    在 2 中 只是移动了 view port ,此时,窗口仍然在 0,0 所以看见的图形如下:矩形被绘制在了世界坐标的 100 , 100 处, 窗口(照相机)在世界坐标的 0 , 0 点。
 
 


 
  现在移动窗口(你的照相机),到与 viewportorg 重合,则效果如下,透过窗口看,世界的景物到了窗口的左上角了。而移动窗口时,绘制在世界坐标中的景物位置没有变的。可以任意移动“照相机”,景物会在“照相机”中的位置发生相应变化


 

 
 
总结一下:图形绘制,坐标是相对 viewport 的坐标,但是图形绘制完毕,是固定在世界坐标不会改变的; window 窗口是你的照相机,移动窗口,景物会在照相机中发生变化。
  这个是形象的解释了,没有量化的坐标换算,这个换算公式有很多介绍的,所以能形象了,公式就很好办了:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图形