多显示器 坐标 左上角_绘图之坐标转换函数

点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达

共同学习共同进步

    QPainter在窗口上绘图的默认坐标系统在前面讲过,在这里就不多说了,这是绘图设备的物理坐标。为了绘图 的方便,QPainter提供了一些坐标变换的功能,通过平移、旋转等坐标变换,得到一个逻辑坐标 系统,使用逻辑坐标系统在某些时候绘图更方便。

分组

函数原型

功能

坐标变换

void lranslate(qreal dx, qreal dy)

void rotatc(qreal angle)

void scale(qreal sx, qreal sy)

void shear(qreal sh, qreal sv)

坐标系统平移 一定的偏移量,坐标原点平移到新的点

坐标系统顺时针旋转一个角度

坐标系统缩放

坐标系统做扭转变换

状态保存与恢复

void save()

void restore()

void resetTransform ()

保存painter当前的状态,就是将当前状态压入堆栈

恢复上一次状态,就是从堆栈中弹出上次的状态

复位所有的坐标变换

    常用的坐标变换是平移、旋转和缩放,使用世界坐标变换矩阵也可以实现这些变换功能,但 是需要单独定义一个QTransform类的变量,对于QPainter来说,简单的坐标变换使用QPainter自 有的坐标变换函数就足够了。 

    1.坐标平移 

    坐标平移函数是tmnslate(),其中一种参数形式的函数原型是: 

    void translate(qreal dx, qreal dy) 

    表示将坐标系统水平方向平移dx个单位,垂直方向平移dy个单位,在缺省的坐标系统中, 单位就是像素。如果是从原始状态平移(dx,dy),那么平移后的坐标原点就移到了(dx,dy)。

     假设一个绘图窗口宽度为300像素,高度为200像素,则其原始坐标系统如下图左所示;若执行平移函数translate(150, 100),则坐标系统水平向右平移150像素,向下平移100像素,平 移后的坐标系统如下图右所示,坐标原点在窗口的中心,而左上角的坐标变为(-150,-100), 右下角的坐标变为(150, 100)。如此将坐标原点变换到窗口中心在绘制某些图形时是非常方便的。

    fd9bd2f5a3dfc74ef8151c66eb6e11a8.png

     2.坐标旋转

     坐标旋转的函数是rotateO,其函数原型为: 

    void rotate(qreal angle) 

    它是将坐标系统绕坐标原点顺时针旋转angle角度,单位是度。当angle为正数时是顺时针旋 转,为负数时是逆时针旋转。

    在上图右的基础上,若执行rotate(90),则得到下图所示坐标系统

    3d71c4d0294d6fcd0220c984561eb019.png

注意旋转之后并不改变窗口矩形的实际大小,只是改变了坐标轴的方向。

    在上图的新坐标系下,窗口左上角的坐标变成了(-100,150),而右下角的坐标变成了(100,-150)。 

3. 缩放 

    缩放函数是scale(),其函数原型为: 

    void scale(qreal sx, qreal sy) 

    其中,分别为横向和纵向缩放比例,比例大于1是放大,小于1是缩小。 

4. 状态保存与恢复 

    进行坐标变换时,QPainter内部实际上有一个坐标变换矩阵,用save()保存当前坐标状态,用 restore()恢复上次保存的坐标状态,这两个函数必须配对使用,操作的是一个堆栈对象。 

    resetTmnsform()函数则是复位所有坐标变换操作,恢复原始的坐标系统。

503bcb1880f5bb63ea32b3398ea5d357.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值