【qt】坐标系变换

news2025/1/13 10:06:30

坐标系变换

  • 一.物理坐标
  • 二.逻辑坐标
    • 1.平移
    • 2.旋转
    • 3.扭转
    • 4.缩放
  • 三.案例结合画一个五角星
  • 四.总结

一.物理坐标

物理坐标系,就是我们上节课说的,坐标的原点在窗口的左上角。这节课我们可以通过改变原点的位置来达到我们想姚的逻辑坐标。

二.逻辑坐标

1.平移

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage image(":/bg.png");
    QRect rect(0,0,200,150);
    painter.drawImage(rect,image);

    painter.translate(300,100);//将坐标系水平向右平移300,垂直向下平移100
    painter.drawImage(rect,image);
}

运行结果:
在这里插入图片描述

2.旋转

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage image(":/bg.png");
    QRect rect(0,0,200,150);
    //painter.drawImage(rect,image);

    painter.translate(300,100);//将坐标系水平向右平移300,垂直向下平移100
    painter.drawImage(rect,image);

    painter.rotate(90);//将坐标系顺时针旋转90
    painter.drawImage(rect,image);
}

运行结果:
在这里插入图片描述

3.扭转

shear的参数范围为0~1

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage image(":/bg.png");
    QRect rect(0,0,200,150);
    //painter.drawImage(rect,image);

    painter.translate(300,100);//将坐标系水平向右平移300,垂直向下平移100
    //painter.drawImage(rect,image);

    painter.shear(0.1,0.1);
    painter.drawImage(rect,image);
    }

运行结果:
在这里插入图片描述

4.缩放

scale的参数1为分解线,小于1缩小,大于1放大

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QImage image(":/bg.png");
    QRect rect(0,0,200,150);
    painter.drawImage(rect,image);
    painter.scale(2,2);
    painter.drawImage(rect,image);
    }

缩放前:
在这里插入图片描述
缩放后:
在这里插入图片描述

三.案例结合画一个五角星

正常画一个五角星是需要我们去找坐标的,而且比较难找,所以我们通过下面的方法进行绘画。
在这里插入图片描述
应该能看懂吧,数学知识,第一条在坐标系的五角星坐标是很容易的,后面的都是通过三角函数来得到的。
360°被分为5份,所以每个角的度数为360/5=72°。

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen;
    pen.setColor(Qt::red);
    pen.setWidth(4);
    painter.setPen(pen);



    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);


    qreal r=200;//qreal相当于double
    qreal unit=72*3.141592/180;//算的是72°的弧度值,因为cos和sin需要的是弧度

    QPoint points[5]={
        QPoint(r,0),
        QPoint(r*cos(unit),-r*sin(unit)),
        QPoint(r*cos(unit*2),-r*sin(unit*2)),
        QPoint(r*cos(unit*3),-r*sin(unit*3)),
        QPoint(r*cos(unit*4),-r*sin(unit*4))
    };

    QPainterPath path;
    path.moveTo(points[0]);//把笔放在那个点开始
    path.lineTo(points[2]);//画线到这个点
    path.lineTo(points[4]);
    path.lineTo(points[1]);
    path.lineTo(points[3]);
    path.closeSubpath();//第一个点和最后一个点相连


    QFont font;
    font.setPointSize(20);
    painter.setFont(font);
    //路径还可以加文字
    path.addText(points[0],font,"0");
    path.addText(points[1],font,"1");
    path.addText(points[2],font,"2");
    path.addText(points[3],font,"3");
    path.addText(points[4],font,"4");


    painter.drawPath(path);

    painter.save();//保存当前坐标系
    painter.translate(300,300);
    painter.rotate(-18);//向逆时针转18°
    painter.drawPath(path);
    painter.restore();//恢复到刚刚保存的坐标系


}

运行结果:
在这里插入图片描述
完美!

四.总结

当我们需要某些特殊的绘图的时候,我们可以换个角度,来对坐标系进行变换,可以会出现意想不到的好结果!

人生有两条路,一条需要用心走,叫做梦想;一条需要用脚走,叫做现实。心走得太快,会迷路;脚走得太快,会摔倒。愿你的人生不慌不忙,一路走得坦荡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1810889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序设计————从控制台输入

向控制台输入信息可以借助Scanner扫描器类来实现 语法: Scanner input new Scanner(System.in); 提示 (1)在使用Scanner类型之前,需要首先指明Scanner类所在的位置,既通过代码 import java.util.Scanner; &…

利用 HTML5 Canvas 实现在线签字功能

目录 前言 一、HTML5 Canvas 简介 二、签字功能的实现 效果演示 完整代码 前言 在现代互联网应用中,有时我们需要让用户在网页上进行签字操作,比如确认文件、填写电子表格或者签署合同。利用 HTML5 的 canvas 画布,我们可以轻松地实现这一…

一、【源码】实现一个简单的Bean容器

实现一个简单的Bean容器 实现流程: 1.创建一个BeanFactory容器,用于管理bean 2.定义一个BeanDefinition,指定UserService类 3.将BeanDefinition注册到BeanFactory中 4.从工厂中获取bean实例,执行方法 注意: BeanDefin…

orbslam2代码解读(3):localmapping局部建图线程

书接上回,介绍完了跟踪线程,已经得到了当前帧相机的位姿,并且当判断需要产生关键帧的时候,tracking线程把新创建的关键帧插入到mpLocalMapper这个线程的mlNewKeyFrames容器中。所以这时候局部线程就根据这个新的关键帧来进行局部建…

三星系统因何而成?或许是因为吞噬了第四颗恒星

相比于其他的类似星体,这个特殊的三星系统拥有更大更紧密的星体。 三星 天文学家发现了前所未见的三星系统。相比于其他典型的三星系统,这一三星系统拥有更大的体积,并且排列也更加紧密,这也使得这一系统更加特别。科学家推测&am…

8、项目目录结构创建

项目目录结构创建 8.1 三层架构 在spring-boot 的web项目中大都是按照这个思路来的: controller层 —> service层(serviceImpl实现service接口)—> mapper层—> mapper.xml文件 创建目录 commen:存放公共代码的 config:存放配置代码的 controller:后端控制器,…

[office] excel表格中双击鼠标左键有什么快捷作用- #经验分享#媒体

excel表格中双击鼠标左键有什么快捷作用? excel表格中双击鼠标左键有什么快捷作用?不要小看鼠标左键双击的作用,在excel中双击鼠标左键可以实现六个功能,提高工作效率,到底是那六个功能呢?请看下文详细介绍 在表格中…

MAVEN仓库和Nexus私服

仓库 仓库的类型 本地(local) Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建 中央(central) Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大…

爱普生32.768kHz晶振FC-135:小型化为高端产品带来的卓越优势

在电子设备快速发展的时代,晶振作为时钟源的核心元件,其性能和尺寸对产品的整体表现至关重要。爱普生32.768kHz晶振FC-135凭借其小型化设计和出色的性能,为高端产品带来了显著的优势。本文将介绍32.768kHz晶振FC-135的特点及其在高端产品中的…

Tiny Time Mixers (TTM)轻量级时间序列基础模型:无需注意力机制,并且在零样本预测方面表现出色

大语言模型的发展让研究人员专注于建立尽可能大的模型。但是其实较小的模型在某些任务中表现会优于较大的模型时,例如:Llama 3-8B在MMLU任务上的表现优于较大的Llama 2-70B ! 这就说明大模型并不是万能的,在一些特定任务中,小模型…

RK3568-修改fiq-debugger调试串口

瑞芯微SDK默认将uart2_m0作为调试串口,以下方法将调试串口修改为uart5_m1。修改bootloader 修改/OK3568-linux-source/rkbin/tools/ddrbin_param.txt文件,5表示串口5。1表示复用m1。执行./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.11.bin命令修改ub…

Windows环境下搭建RocketMq集群(双主双从)

一、官网下载Rocket安装包 下载地址:https://rocketmq.apache.org/dowloading/releases/下载 | RocketMQhttps://rocketmq.apache.org/dowloading/releases/ 博主这里下载的是4.9.8版本的,大家根据自己的需要下载对应的版本即可。 二、环境变量配置 环…

再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!

在数字化与智能制造的浪潮中,制造业企业纷纷加快转型步伐,力求通过技术创新实现生产效率与质量的双重提升。近日,广东毅达医疗科技股份有限公司(以下简称“毅达科技”)再次携手盘古信息,正式启动了IMS 数字…

背包问题—动态规划

01背包问题&#xff1a;没有物品&#xff08;元素&#xff09;只能选择1次 【模板】01背包_牛客题霸_牛客网 (nowcoder.com) #include <array> #include <cstring> #include <iostream> #include<vector> using namespace std; int n,V; int dp[1001…

全球微型光谱仪市场规模逐渐扩大 智能手机为最大应用领域

全球微型光谱仪市场规模逐渐扩大 智能手机为最大应用领域 光谱仪又称为分光仪&#xff0c;是用来测量光谱成分的一种仪器&#xff0c;可以检测特定波长的电磁辐射形成的光谱&#xff0c;从而获取有关物质的结构和动力学等信息。微型光谱仪是光谱仪的细分产品之一&#xff0c;具…

原腾讯云副总裁张纾翔加入矩阵起源,共筑人工智能新篇章

近日&#xff0c;原腾讯云副总裁张纾翔先生正式加入矩阵起源&#xff0c;担任合伙人兼高级副总裁&#xff0c;全面负责矩阵起源商业化工作。 矩阵起源成立于2021年。公司创始团队来自腾讯云、Snowflake等国内外一流的互联网企业、软件公司、数字化企业和开源社区&#xff0c;核…

使用 Transformer 完成 IMDB 情感分类任务

前言 本文使用简单的 Transformer Block 实现对影评文本数据 IMDB 的情感分类任务。 数据 这里定义了两个关键的超参数&#xff1a; vocab_size&#xff1a;表示词汇表的大小&#xff0c;即允许在文本数据中使用的不同的单词数量。maxlen&#xff1a;表示文本序列的最大长度&…

AI大模型-机器学习中的集成学习

机器学习中的集成学习 集成学习概述及主要研究领域 1.1 集成学习概述&#x1f4a5; “众人拾柴火焰高”、“三个臭皮匠顶个诸葛亮”等词语都在表明着群体智慧的力量&#xff0c;所谓的“群体智慧”指的就是一群对某个主题具有平均知识的人集中在一起可以对某一些问题提供出更…

觅瑞集团两年亏损9亿:现金流承压营销成本近亿,应收账款周期过长

《港湾商业观察》黄懿 4月30日&#xff0c;Mirxes Holding Company Limited&#xff08;下称“觅瑞集团”&#xff09;递表港交所&#xff0c;拟在香港主板挂牌上市&#xff0c;中金和建银国际为联席保荐人&#xff0c;这是继2023年7月25日递表失效后的再一次申请。觅瑞集团国…

记录vue一个echarts页面 柱状图加平均分横线 双柱状图 横向双柱状图

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" v-show"showSearch" label-width"85px"><el-form-item label"园所名称" prop&q…