• 12569阅读
  • 11回复

浅析QT中的坐标系统(一):---by jzj139 [复制链接]

上一主题 下一主题
离线jzj139
 
只看楼主 正序阅读 楼主  发表于: 2007-06-19
— 本帖被 XChinux 执行加亮操作(2007-06-19) —
浅析QT中的坐标系统(一):---by jzj139
    QT窗口部件的左上角的位置是(0,0),右下角的位置是(width()-1,height()-1),这跟我们数学中的所学的坐标系统是不一样的。
在使用QPAINTER绘图时:
    视口(VIEWPORT),窗口(WINDOW---不是顶级窗口部件)和世界矩阵决定了QPAINTER逻辑坐标和绘制设备的物理坐标之间的映射关系。在默认的情况下,逻辑的和物理的坐标系统被设置为一致大小的。视口和窗口是紧密绑定的。视口是物理坐标的任意矩形。窗口指定了相同的矩形,但是在物理坐标中,它的坐标和物理坐标是线性的关系的(这点是很重要的,对理解后面的窗口---视口机制很有用)。在默认的情况下,视口和窗口都被设置为设备的矩形。例如:如果设备是320*320的矩形,视口和窗口都是左是角为(0,0)的320*320的相同矩形。在这种情况下,逻辑坐标和物理坐标就是一致的。
    那么视口---窗口机制有什么作用呢?
    视口---窗口机制对于我们编写独立于绘制设备大小和分辨率的代码是十分有用的,我们可以自己来进行逻辑坐标和物理坐标之间的映射计算,但是让QPAINTER来完成这项工作是很简单的。例如,我们想让逻辑坐标从(-50,-50)到(50,50),并且(0,0)在中间,我们可以这样来设置我们的窗口:
painter.setWindow(QRect(-50,-50,100,100));
    (-50,-50)指定了原点,(100,100)指定了宽和高。这也就是说现在的逻辑坐标(-50,-50)和物理坐标(0,0)是对应的,并且逻辑坐标(50,50)和物理坐标(320,200)是对应的。
      那么painter是怎么计算的呢?
      这就要注意到一句话:逻辑坐标和物理坐标是成线性关系的。
      因为物理坐标是和设备的分辨率有关的。对于这个设备,它的分辨率应该是320*200的。
      那么应该如何计算逻辑坐标和物理坐标的映射关系呢?
      我们来交叉对应坐标,对于X有:(-50,0)和(50,320)
所以对于X来说,逻辑坐标和物理坐标的映射关系就是:b=(16/5)a+160
                        对于Y有:(-50,0)和(50,200)
所以对于Y来说,逻辑坐标和物理坐标的映射关系就是:b=2a+100
根据上面的2个公式,我们任意给出逻辑坐标中的一个点就可以求出对应的物理坐标中的点。
例如逻辑坐标(-30,-20)对应于物理坐标就是(64,60);逻辑坐标(10,20)对应于物理坐标就是(192,140)。
    坐标系统暂时分析到这里,关于世界矩阵以后再分析。
qt
离线wuleeemail

只看该作者 11楼 发表于: 2010-04-12
引用楼主jzj139于2007-06-19 11:21发表的 浅析QT中的坐标系统(一):---by jzj139 :
浅析QT中的坐标系统(一):---by jzj139
    QT窗口部件的左上角的位置是(0,0),右下角的位置是(width()-1,height()-1),这跟我们数学中的所学的坐标系统是不一样的。
在使用QPAINTER绘图时:
    视口(VIEWPORT),窗口(WINDOW---不是顶级窗口部件)和世界矩阵决定了QPAINTER逻辑坐标和绘制设备的物理坐标之间的映射关系。在默认的情况下,逻辑的和物理的坐标系统被设置为一致大小的。视口和窗口是紧密绑定的。视口是物理坐标的任意矩形。窗口指定了相同的矩形,但是在物理坐标中,它的坐标和物理坐标是线性的关系的(这点是很重要的,对理解后面的窗口---视口机制很有用)。在默认的情况下,视口和窗口都被设置为设备的矩形。例如:如果设备是320*320的矩形,视口和窗口都是左是角为(0,0)的320*320的相同矩形。在这种情况下,逻辑坐标和物理坐标就是一致的。
    那么视口---窗口机制有什么作用呢?
.......


楼主:对于你这一段中提到的设备分辨率到底是320*320还是320*200,还就是两个设备?
离线water_wf

只看该作者 10楼 发表于: 2010-04-12
楼主能不能吧QMatrix自己讲一遍,一直没太弄清楚,先谢了
离线wbyqy

只看该作者 9楼 发表于: 2010-04-10
mark
离线yuening
只看该作者 8楼 发表于: 2010-01-18
不错
离线christina
只看该作者 7楼 发表于: 2009-02-10
受益非浅呀,谢谢楼主
抓住眼前的机遇,好好学习!
离线hehui

只看该作者 6楼 发表于: 2007-06-30
学习了!!!!!!!!!!
离线lophyxp

只看该作者 5楼 发表于: 2007-06-28
引用第1楼chai2010于2007-06-20 10:25发表的  :
感觉Qt中的坐标系统和OpenGL中的很像。
不过OpenGL针对3D,因此比Qt要复杂一些。

不一样,Qt的是从左到右,从上到下。
OpenGL是从左到右,从下到上。
离线night211

只看该作者 4楼 发表于: 2007-06-22
期待下文
离线limian
只看该作者 3楼 发表于: 2007-06-20
支持,期待下文
离线leiyuhong

只看该作者 2楼 发表于: 2007-06-20
很受益
离线chai2010

只看该作者 1楼 发表于: 2007-06-20
感觉Qt中的坐标系统和OpenGL中的很像。
不过OpenGL针对3D,因此比Qt要复杂一些。
快速回复
限100 字节
 
上一个 下一个