坐标变换
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 2d绘图的资料,里面包含了坐标机制,很详细
【Qt】2D绘图之坐标系统.rar
为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...
十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL...
本程序实现在不同的笛卡尔坐标系统中旋转变换。
十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、 Q t 2D 绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL...
为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...
为了实现更方便的坐标,QPainter还提供了视口(Viewport)和窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标...
运行samp8_2实例程序,展示绘图效果,第1个是原始的五角星;第2个是缩小为0.8倍,顺时针旋转90度的五角星;第3个是逆时针旋转145度的五角星。这个程序中使用到了QPainterPath和QPainter的坐标变换功能。
Linux下qt工程 鼠标自动点击的功能在windows下调用WindowsAPI能够简单实现 但在linux实现并无现成api 因此自己编写了一个 能够获取当前鼠标位置并模拟自动点击,(不限制在本widget界面范围内,能够获取全局坐标值...
采用QT软件编写,在linux系统软件下编写,主要实现在功能,画出一个坐标轴功能。采用软件可以直接打开运行!
4 Qt窗口系统 21 4.1 Qt窗口坐标体系 21 坐标体系 21 4.2 QWidget 21 4.2.1 对象模型 21 4.3 QMainWindow 23 4.3.1 菜单栏 24 4.3.2 工具栏 25 4.3.3 状态栏 25 4.4 资源文件 26 4.5 对话框QDialog 29 4.5.1 基本...
QT5.9 利用 QWebEngineView / QWebChannel 调用...3.鼠标点击地图页后会提示点的坐标信息,并回传给QT,通过qDebug()显示(JS调用C++)。 详细说明: https://blog.csdn.net/qq_43569273/article/details/88122422
QT5实现获取屏幕坐标,按输入时间实现鼠标连点,获取系统键盘控制。
4.1 Qt窗口坐标体系 21 坐标体系 21 4.2 QWidget 21 4.2.1 对象模型 21 4.3 QMainWindow 23 4.3.1 菜单栏 24 4.3.2 工具栏 25 4.3.3 状态栏 25 4.4 资源文件 26 4.5 对话框QDialog 29 4.5.1 基本概念 29 4.5.2 标准...
28. 坐标系统 29. 绘制设备 30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历...