只讨论非定比例的映射模式:SetMapMode(MM_ANISOTROPIC)

映射模式要用到的四个函数:

SetWindowExt

SetViewportExt

SetWindowOrg

SetViewportOrg

视口中用的是设备坐标,窗口中用的是逻辑坐标。因为这个特点,给人的感觉就是视口是一张真正的存在的纸,而窗口是你看到的纸的那一部分。

对于前两个函数有一种非常好的理解方式,最开始时我就是这么理解的。同样一张纸(比如一张A4纸),然后用两种单位来比划这张纸,例如用英寸和厘米,或是你自己定义一个单位。SetViewportExt说这有一张100*200像素大小的纸,SetWindowExt说“我不用你的单位,我说它是4000*80000”。

后来才发现,这个问题用数学来描述到简洁、明白的多,就是两个坐标系建立映射的过程。

先不管我们看到了什么,就想像同一个空间被两个坐标系表示,一个是Viewport,一个是Window。空间中一个确定点,在Viewport中有个坐标(x0,y0),在Window中也有一个坐标(x1,y1)。你通过设置这两个函数,也就告诉了系统这两个坐标是怎么映射并转化的。

比如在设备坐标中x0=300,y0=200,x1=3000,y1=-200.这样你画图时就相当于是在wx-wy坐标里画。

再说SetWindowOrg,SetViewportOrg

如果只设置SetViewportOrg,对你在wx-wy坐标里画图没有任何影响,只是你移动了视角,视野变了而以。

而SetWindowOrg则是在相对于那张纸平移了自己的坐标系(wx-wy),

表面上看,两个好像没有什么区别,但下面这种情况就显现区别出来了。先将SetViewportExt设为整个窗口大小,SetWindowExt可以随便设。

有一个现像,你只用SetViewportOrg设坐标后(不用SetWindowOrg),改变窗口的大小、形状后,坐标原点离左边窗的距离在像素数上是不变的。

而只用SetWindowOrg设置坐标后,改变窗口后,坐标原点离左边窗的距离是改变的。

 

 

Posted on 2009-02-26 22:25  joneykk  阅读(160)  评论(0)    收藏  举报