窗口和视口问题

[复制链接]
查看11 | 回复1 | 2011-8-2 09:10:36 | 显示全部楼层 |阅读模式
有映射模式MM_LOMETRIC 其视口范围为(1024,-768),窗口范围为(3200,24000)
我是这样理解范围的,假设范围不会被widnows所改变,那么这种模式就是说,以客户区左上角为(0,0),设备坐标系下,在客户区中,其水平坐标(向右)的最大取值为1024个像素,在垂直方向(向下)的最大取值为768个像素,窗口指得是逻辑坐标3200,2400的理解相同,但是-768的负号怎么理解呢,按照公式yViewport=yWindowx *yViewExt/
yWinExtEx来看,负号仅仅是决定了逻辑坐标的方向而已,但是我把

//
SetMapMode(hdc,MM_LOMETRIC);

SetWindowExtEx(hdc,3200,-2400,NULL);

SetViewportExtEx(hdc,1024,768,NULL);
就是把-768改为768,把2400改为-2400,按照公式来看,效果应该是一样的啊,但是我用TextOut输出时,发现逻辑坐标向下为正,与MM_LOMETRIC 不同,为什么会这样呢,到底如何理解窗口范围和视口范围,另外我发现那些映射模式,都是把负号加在视口范围的y值上,是不是自己设定范围时也得这样呢,望各位知道的一定要想告下,头大啊

回复

使用道具 举报

千问 | 2011-8-2 09:10:36 | 显示全部楼层
窗口-视区变换在将窗口中的图形信息送到视区去输出之前,必须进行坐标变换,即将用户坐标系的坐标值转化为设备坐标系的坐标值,即窗口-视区变换。从窗口到视口的映射世界窗口用其左、上、右和下边界描述,分别是W.l,W.t,W.r和W.b。视口在屏幕窗口坐标系中描述,使用V.l,V.t,V.r,V.b,单位是像素。窗口到视口的映射是基于一个公式生成的,这个公式在世界窗口中对每个给定的点(x, y)都在窗口坐标系中生成一个点(sx, sy)。由于窗口映射到视口是“成比例”的,而“成比例”这样的要求迫使这种映射具有线性形式sx = Ax + Csy = By + D其中A,B,C和D是常数。这四个常数中,A和B是用于缩放x和坐标,C和D则...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行