坐标变换
World Corrdinates
|
==>
|
Window Coordinates
|
==>
|
Device Coordinates
|
(逻辑坐标)
|
世界变换
|
中间态坐标
|
窗口视口变换
|
(物理坐标)
|
在默认情况下,3个坐标系是一致的。
世界变换
世界变换直接相关的函数:
QPainter::setWorldMatrixEnabled
|
启用、禁用世界变换
|
QPainter::setWorldTransform
|
设置世界变换
|
QPainter::worldTransform
|
获取当前
|
QPainter::resetTransform
|
重置为QTransform()
|
4个常用的函数
QPainter::translate
|
平移
|
QPainter::scale
|
缩放
|
QPainter::rotate
|
旋转
|
QPainter::shear
|
剪切
|
注:它们通过直接调用的QTransform的相应成员直接修改世界变换
void QPainter::scale(qreal sx, qreal sy)
{
...
d->state->worldMatrix.scale(sx,sy);
...
}
世界变换的两个马甲:
QPainter::setTransform
QPainter::transform
void QPainter::setTransform(const QTransform &transform, bool combine )
{
setWorldTransform(transform, combine);
}
废弃的函数(从Qt4.3开始,QTransform取代了QMatrix的位置,下列函数已不建议使用):
QPainter::setWorldMatrix
QPainter::worldMatrix
...
窗口视口变换
直接相关:
QPainter::setViewTransformEnabled
|
启用、禁用视口变换
|
QPainter::viewTransformEnabled
|
返回 视口变换的状态
|
QPainter::setViewport
|
设置视口(物理坐标)
|
QPainter::setWindow
|
设置窗口(与视口是同一矩形,中间态坐标)
|
该变换是简单的线性变换。
复合变换
窗口视口变换和世界变换的复合:
QPainter::combinedTransform
QTransform QPainter::combinedTransform() const
{
Q_D(const QPainter);
return d->state->worldMatrix * d->viewTransform();
}
典型应用:对鼠标事件的响应中,将坐标从物理坐标变换成QPainter需要的逻辑坐标
仿射变换、透射变换
Qt4.3(包括)之前的QMatrix只支持仿射变换(Affine transformation)。
平移(Translation)
缩放(Scale)
旋转(Rotation)
剪切(Shear)
QTransform支持透射变换(perspective transformation)。
m11
|
m12
|
m13
|
m21
|
m22
|
m23
|
m31 dx
|
m32 dy
|
m33
|
变换关系:
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
if (is not affine)
{
w' = m13*x + m23*y + m33
x' /= w'
y' /= w'
}
相关知识:
射影几何学、仿射几何学、微分几何学
参考
http://doc.qt.nokia.com/4.7/qtransform.html
http://doc.qt.nokia.com/4.7/qpainter.html
http://doc.qt.nokia.com/4.7/coordsys.html
分享到:
相关推荐
为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...
### Qt坐标系详解 在深入探讨Qt坐标系之前,让我们先理解一下实验八的主要目标——在Qt中进行2D绘图。Qt是一个跨平台的应用开发框架,广泛应用于桌面和嵌入式系统的图形用户界面(GUI)开发。对于任何涉及图形显示...
本教程主要聚焦于Qt中的坐标系统,这是进行任何图形绘制的基础。Qt的坐标系统是直角坐标系,用于确定屏幕上点的位置。让我们深入探讨这个话题。 首先,Qt的坐标系统以(0, 0)为原点,位于窗口或画布的左上角。X轴正...
笛卡尔坐标系,也称为直角坐标系,是数学中最基本的坐标系统之一,由两条互相垂直的数轴组成,通常标记为x轴和y轴。在这个系统中,每个点都可以用一对有序的数值(x, y)来唯一确定,这对数值代表了点沿x轴和y轴的...
为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...
在Qt编程中,获取屏幕坐标是一项常见的需求,无论是为了定位窗口、设计用户界面还是进行复杂的交互操作。本篇文章将详细讲解如何在Qt中获取屏幕坐标,并结合提供的代码片段进行解析。 首先,我们要引入Qt的桌面环境...
与常见的笛卡尔坐标系统(直角坐标系)不同,极坐标系统使用半径(r)和角度(θ)来定位点,而不是x和y坐标。在Qt中,通过QChart和Q PolarSeries类,我们可以方便地在极坐标系下绘制图形。 要使用Qt 5.7实现极坐标...
1. Qt坐标系统:理解坐标系统的运作,以便正确放置时钟组件和指针。 2. 继承`QWidget`:创建自定义的`CCClock`类,以承载时钟的绘制逻辑。 3. `paintEvent`:重写此事件处理器,使用`QPainter`绘制时钟。 4. `...
Qt中的坐标系统以左上角为原点,X轴向右增加,Y轴向下增加。我们可以使用`QImage`的`pixel`方法获取指定坐标上的像素值: ```cpp QRgb pixelValue = image.pixel(x, y); ``` `QRgb`是一个无符号整型,包含了RGB三...
- 渐变和坐标系统:介绍渐变的使用方法和Qt坐标系统。 #### 10. 文件处理 - 介绍Qt如何读写文本文件和二进制文件。 - 遍历容器:讲解使用迭代器遍历容器的方法。 - 隐式数据共享:讨论Qt容器类的数据共享机制。 ##...
6. **添加到布局**:将3D绘图对象添加到Qt的布局系统,如`QLayout`,以便在窗口中显示。 7. **更新和显示**:在需要时,通过调用`update()`方法更新图形,然后显示在窗口中。 **应用场景** QwtPlot3D常用于科学...
在Ubuntu 16.04操作系统中,Qt 5.9.0是一个强大的跨平台应用程序开发框架,广泛用于创建图形用户界面。而OpenGL是一个开放源代码的图形库,专门用于生成2D、3D图像。在Qt中集成OpenGL,可以实现高性能的图形渲染。本...
为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...
在2D绘图部分,教程涵盖了从绘制简单图形到复杂文字、路径和图像,以及如何使用Qt坐标系统进行精确绘图。这部分内容对于开发需要图形展示或交互的软件非常关键。同时,还介绍了双缓冲绘图和图形视图框架,以提升图形...
为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...
- **坐标系统**:深入探讨Qt坐标系统的工作原理,以及如何在不同场景中正确使用坐标。 - **涂鸦板程序**:演示如何创建一个简单的涂鸦板程序,允许用户绘制并保存他们的作品。 - **双缓冲绘图**:介绍双缓冲技术的...
- **坐标系统**:深入探讨Qt坐标系统的概念和使用方法。 - **涂鸦板**:提供一个完整的涂鸦板程序实例。 - **双缓冲绘图简介**:简述双缓冲绘图的概念及其在Qt中的应用。 - **图形视图框架简介**:概述Qt图形视图...
如果进度为100%,则起始角度为-90度(顺时针方向,Qt坐标系统中,正X轴为0度,逆时针为正角度),结束角度为270度。 4. **绘制进度圆弧**:在`paintEvent()`中,使用QPainter的drawArc()函数绘制进度圆弧,传入之前...