2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料

2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料

ID:43444419

大小:530.03 KB

页数:19页

时间:2019-10-02

2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料_第1页
2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料_第2页
2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料_第3页
2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料_第4页
2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料_第5页
资源描述:

《2D绘图坐标变换_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Qt学习Z路2(28)处标系统在经历过实际操作,以及前面一节屮我们见到的那个translate()函数之后,我们可以详细了解下Qt的坐标系统了。泛泛而谈坐标系统,冇时候会觉得枯燥无味,难以理解,好在现在我们已经有了基础。处标系统是山QPainter控制的。我们前而说过,QPaintDevice>QPaintEngine和QPainter是Qt绘制系统的三个核心类。QPainter用于进行绘制的实际操作;QPaintDevice是那些能够让QPainter进行绘制的“东西”(准确的术语叫做,二维空间)的抽象层(其子类有QWidget、QPixmap^QPicture^Qlmage和QPrinte

2、r等);QPaintEngine供供QPainter使川的丿IJ于在不同设备上绘制的统一的接口。[1

3、于QPaintDeice是进行绘制的对象,因此,所谓朋标系统,也就是QPaintDevice±而的坐标。默认坐标系统位于设备的左上角,也就是坐标原点(0,0)。x轴方向向右;y轴方向向下。在基于像素的设备上(比如显示器),坐标的默认单位是像素,在打印机上则是点(1/72英寸)o将QPainter的逻辑坐标与QPaintDevice的物理坐标进彳亍映射的工作,是由QPainter的变换矩阵(transfonnationmatrix)、视口(viewport)和窗口(window)完成的。如果你不

4、理解这些术语,可以简单了解下有关图形学的内容。实际上,对图形的操作,底层的数学都是进行的矩阵变换、相乘等运算。在Qt的坐标系统中,每个像素占据1X1的空间。你可以把它想彖成一张方格纸,每个小格都是1个像素。方格的焦点定义了坐标,也就是说,像素(x,y)的中心位置其实是在(x+0.5,y+0.5)的位置上。这个朋标系统实际上是一个“半像素处标系”。我们可以通过下面的示意图來理解这种坐标系:QRedd26.4)QUne(2,7.6,1)我们使川一个像素的应笔进行绘制,可以看到,每一个绘制像素都是以坐标点为中心的矩形。注意,这是坐标的逻辑表示,实际绘制则与此不同。因为在实际设备上,像素是最小单位,我

5、们不能像上而一•样,在两个像素之间进行绘制。所以在实际绘制时,Qt的定义是,绘制点所在像素是逻辑定义点的右下方的像素。我们前面已经介绍过,Qt的绘制分为走样和反走样两种。对此,我们必须分别对待。一个像素的绘制最简单,我们从这里开始:QPainterpainter(this);QPainterpainter(this);painterPen(Qt::darkGreen);painter.drawRect(1#2,€f4);painterasetPen(Qt::darkGreen};painter.drawLine(2r7f6.1);从上图可以看出,当我们绘制矩形左上角(1,2)时,实际绘制的像索

6、是在右下方。当绘制大于1个像素吋,情况比较复朵:如果绘制像素是偶数,则实际绘制会包裹住逻辑坐标值;如果是奇数,则是包裹住逻辑坐标值,再加上右下角一个像索的偏移。具体请看下面的图示:wtotopowW)1riflMOboiwxnOLogicalrepresentationiqpOwkWX)righidbonom()Onepixelwidepenurngow«h(l1nghll).KrtKxnoTwopixelwtdepenThreepixelwidepen从上图可以看出,如果实际绘制是偶数像索,则会将逻辑坐标值夹在相等的两部分像素之间;如果是奇数,则会在右下方多出一个像素。Qt的这种处理,带來的

7、一个问题是,我们可能获取不到真实的坐标值。由于历史原因,QRect::right()和QRect::boltom()的返回值并不是矩形右下角点的真实坐标值:QRect::right()返回的是left()+width()-1;QRect::bottom()则返回top()+height()-1,上图的绿色点指出了这两个函数的返回点的处标。为避免这个问题,我们建议是使用QRectFoQRectF使用浮点值,而不是整数值,来描述处标。这个类的两个函数QRectF::right()和QRectF::bottom()是正确的。如果你不得不使用QRect,那么可以利用x()+width()和y()+he

8、ight。来替代right()和bottom()函数。对于反走样,实际绘制会包裹住逻辑坐标值:QPainterpainter(thial:paintsz.3皀tRender且in匸(QPalncer::Antialidam^):pointer.3etFen(Qr::darkGreen);painter.drawRsct(1,2.6.4);QPaxnr:erpamrer(chi.3);painter

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。