当前位置: 首页 > news >正文

「QT」几何数据类 之 QLineF 浮点型直线类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「QT」QT5程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明
「Math」探秘数学世界

目录

    • QLineF类详解
      • 一、引言
      • 二、使用范围
      • 三、类的头文件
      • 四、类的构造介绍
      • 五、共有函数介绍
      • 六、Static函数介绍
      • 七、运算符重载
      • 八、详细代码举例

QLineF类详解

一、引言

QLineF是Qt框架中的一个关键类,用于表示二维平面上的直线段,与QLine类不同的是,QLineF使用浮点数(通常是double类型)来表示坐标,这使得它能够处理更高精度的图形操作。QLineF类提供了丰富的功能,包括计算直线长度、直线段的平移、判断点与直线的关系等,是Qt图形编程中不可或缺的工具之一。

二、使用范围

QLineF类广泛应用于需要高精度图形操作的Qt应用程序中。例如,在绘制复杂图形、进行图形变换、进行碰撞检测等场景中,QLineF的浮点数坐标能够提供更精确的结果。此外,QLineF还可以与Qt的其他图形类(如QPolygonF、QRectF等)无缝集成,共同构建出丰富的图形界面。

三、类的头文件

要使用QLineF类,需要在代码中包含其头文件<QLineF>。这个头文件定义了QLineF类的所有成员和函数,使得开发者可以在自己的Qt应用程序中方便地使用该类。

#include <QLineF>

四、类的构造介绍

QLineF类提供了多种构造函数,允许以不同的方式创建QLineF对象:

  1. 默认构造函数:创建一个未初始化的QLineF对象。
QLineF();
  1. 参数化构造函数:使用两个QPointF对象或四个浮点数坐标(x1, y1, x2, y2)作为起点和终点来创建QLineF对象。
QLineF(qreal x1, qreal y1, qreal x2, qreal y2);
QLineF(const QPointF &p1, const QPointF &p2);
  1. 从QLine转换的构造函数:虽然QLine使用整数坐标,但QLineF类提供了从QLine到QLineF的转换构造函数,允许将QLine对象转换为QLineF对象(可能会进行精度提升)。
QLineF(const QLine &line);

五、共有函数介绍

QLineF类提供了丰富的共有函数,用于获取直线的属性、进行几何运算等。以下是一些常用的共有函数:

  • QPointF p1() const:返回直线的起点。
  • QPointF p2() const:返回直线的终点。
  • void setP1(const QPointF &p1):设置直线的起点。
  • void setP2(const QPointF &p2):设置直线的终点。
  • qreal length() const:返回直线的长度(浮点数)。
  • qreal angle() const:返回直线的倾斜角(以度为单位,范围从-180到180)。
  • qreal angleTo(const QLineF &l) const:返回本直线与另一条直线l之间的夹角(以度为单位)。
  • QLineF translated(qreal dx, qreal dy) const:返回沿向量(dx, dy)平移后的直线。
  • QPointF pointAt(qreal t) const:返回参数化直线上的点,其中t是介于0和1之间的浮点数,表示从起点到终点的比例距离。

六、Static函数介绍

QLineF类也提供了一些静态函数,用于执行与QLineF对象相关的通用操作。这些函数不需要创建QLineF对象就可以直接使用。以下是一些常用的静态函数:

  • static QLineF fromPolar(qreal length, qreal angle, QPointF *origin = nullptr):根据极坐标(长度和角度)以及可选的原点(默认为原点(0,0))计算直角坐标下的直线。如果提供了origin参数,则直线将相对于该点进行定位。

七、运算符重载

QLineF类重载了多个运算符,以便进行直线之间的比较和算术运算。以下是一些重载的运算符:

  • bool operator==(const QLineF &line) const:判断两条直线是否相等(基于起点和终点的坐标)。
  • bool operator!=(const QLineF &line) const:判断两条直线是否不相等。

八、详细代码举例

以下是一个使用QLineF类的详细代码示例,展示了如何创建QLineF对象、获取直线的属性、进行几何运算以及判断点与直线的关系。

#include <QCoreApplication>
#include <QLineF>
#include <QPointF>
#include <QDebug>
#include <cmath> // 引入cmath库以使用fabs函数计算浮点数绝对值int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建QLineF对象QLineF line(QPointF(10.5, 20.3), QPointF(40.7, 60.1));// 获取直线的属性QPointF start = line.p1();QPointF end = line.p2();qreal length = line.length();qreal angle = line.angle();qDebug() << "Start Point:" << start;qDebug() << "End Point:" << end;qDebug() << "Length:" << length;qDebug() << "Angle:" << angle;// 进行几何运算QLineF translatedLine = line.translated(10.0, -10.0);qDebug() << "Translated Line (Start, End):" << translatedLine.p1() << "," << translatedLine.p2();// 计算直线上的点(参数化)qreal t = 0.5; // 中点QPointF midPoint = line.pointAt(t);qDebug() << "Point at t=" << t << ":" << midPoint;// 判断点与直线的关系(点到直线的垂直距离)QPointF testPoint(25.0, 40.0);qreal distance = std::fabs((line.p2().y() - line.p1().y()) * testPoint.x() - (line.p2().x() - line.p1().x()) * testPoint.y() + line.p2().x() * line.p1().y() - line.p2().y() * line.p1().x()) / std::sqrt(std::pow(line.p2().y() - line.p1().y(), 2.0) + std::pow(line.p2().x() - line.p1().x(), 2.0));qDebug() << "Distance from test point to line:" << distance;// 如果需要判断点是否在直线上(考虑到浮点数的精度问题),可以设置一个容差值qreal tolerance = 1e-6; // 容差值,根据实际情况调整if (distance < tolerance) {qDebug() << "Test Point is on the line.";} else {qDebug() << "Test Point is not on the line.";}return a.exec();
}

在这个示例中,我们首先创建了一个QLineF对象line,并获取了它的起点、终点、长度以及角度。然后,我们进行了平移运算,得到了一个新的QLineF对象translatedLine。此外,我们还计算了直线上的中点(通过参数化方式),并判断了一个测试点是否在直线上(通过计算点到直线的垂直距离,并设置一个容差值来判断)。需要注意的是,由于QLineF使用浮点数坐标,因此在进行比较和判断时需要考虑到浮点数的精度问题。


在这里插入图片描述

相关文章:

「QT」几何数据类 之 QLineF 浮点型直线类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

Treeland 技术揭秘,如何使得 DDE 纵享丝滑?

近日&#xff0c;deepin&#xff08;深度&#xff09;社区亮相COSCon24 第九届中国开源年会开源市集&#xff0c;且社区资深桌面研发工程师张丁元为大家来了《Treeland&#xff0c;DDE进步的阶梯》技术分享。 就着这个机会&#xff0c;今天就让我们一起来聊聊如何在追求华丽动…...

快速了解SpringBoot 统一功能处理

拦截器 什么是拦截器&#xff1a; 拦截器是Spring框架提供的重要功能之一&#xff0c;主要进行拦截用户请求&#xff0c;在指定方法前后&#xff0c;根据业务需求&#xff0c;执行预先设定的代码。 也就是说,允许开发⼈员提前预定义⼀些逻辑,在⽤⼾的请求响应前后执⾏.也可以…...

C++区分数组的引用和引用的数组

void f(int (&arr)[10]) {//正确} void f1(int &arr[10]) {//不允许使用引用的数组} []&#xff08;数组下标运算符&#xff09;的优先级高于&&#xff08;取地址运算符&#xff09;。所有表达式&arr[i]等价于&(arr[i]) 引用的数组 一个包含引用的数组&…...

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

harbor官网地址&#xff1a;Harbor 参考文档可以看这里&#xff1a;部署 harbor 2.10.1 arm64 - 简书。 前提环境准备&#xff1a; 安装docker 和 docker-compose 先拉arm64架构的harbor相关镜像 docker pull --platformlinux/arm64 ghcr.io/octohelm/harbor/harbor-regist…...

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

前言 在现代前端开发中&#xff0c;代码质量与代码风格的统一是两个非常重要的方面。良好的代码质量能减少 bug 的产生&#xff0c;而统一的代码风格则能提高团队协作的效率。为了实现这两个目标&#xff0c;我们通常会使用一些工具。 为了保证代码的可读性和维护性&#xff0…...

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的&#xff0c;我以为uniApp是自己免费开的服务给大家中转使用&#xff0c;就没管这个事&#xff0c;但是官网是这么说的&#xff1a; 就我是怎么发现的&#xff0c;使用了一段时间后&#xff0c;上传的图片都裂了&#xff…...

【C语言】。末尼

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xf…...

【鉴权】深入解析 Token:身份认证的核心技术

目录 引言一、Token 的定义与概念1.1 Token 是什么&#xff1f;1.2 无状态性与自包含性1.3 Token 的工作流程1.3.1 基本工作流程1.3.2 工作流程图示 二、Token 的常见用途2.1 用户身份验证2.2 授权控制2.3 防止跨站请求伪造&#xff08;CSRF&#xff09;2.4 跨域认证 三、Token…...

FastReport将停止 .NET Framework 上的 WebReport 更新

从2024/ 12 /1 日起&#xff0c;Fastreport将停止发布更新和提供对 FastReport.Web (.NET Framework) 的技术支持。该库一直是使用 Online Designer 的许多项目中报告的核心。这些更改意味着 FastReport.Web (Legacy) 库&#xff08;FastReport.Net包的一部分&#xff09;将不再…...

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况&#xff08;拓展&#xff09;1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…...

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码

在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码 在Ubuntu下安装RabbitMQ可以按照以下步骤进行&#xff1a;步骤 1: 更新系统步骤 2: 安装Erlang步骤 3: 添加RabbitMQ仓库步骤 4: 更新APT索引并安装RabbitMQ步骤 5: 启动RabbitMQ服务步骤 6: 检查RabbitMQ状态步骤 7: …...

HTTPS通信和TCP通信有什么不一样

HTTPS通信和TCP通信的主要区别如下&#xff1a; ‌协议层次‌&#xff1a;HTTPS是应用层协议&#xff0c;建立在HTTP协议之上&#xff0c;并增加了SSL/TLS加密层&#xff1b;而TCP是传输层协议&#xff0c;提供可靠的数据传输服务。‌安全性‌&#xff1a;HTTPS通过SSL/TLS加密…...

Kafka 的一些问题,夺命15连问

kafka-中的组成员 kafka四大核心 生产者API 允许应用程序发布记录流至一个或者多个kafka的主题&#xff08;topics&#xff09;。 消费者API 允许应用程序订阅一个或者多个主题&#xff0c;并处理这些主题接收到的记录流 StreamsAPI 允许应用程序充当流处理器&#xff08;s…...

unity3d————延时函数

1.public void InvokeRepeating(string methodName, float time, float repeatRate); 延迟重复执行函数 InvokeRepeating 参数一&#xff1a;函数名字符串 参数二&#xff1a;第一次执行的延迟时间 参数三&#xff1a;之后每次执行的间隔时间 注意&#xff1a; 1-1.延时函数第…...

计算机学生自我提升方法——善用搜索引擎

计算机学生自我提升方法——善用搜索引擎 在信息爆炸的时代&#xff0c;计算机专业的学生如何有效地自我提升&#xff1f;答案可能就藏在一个简单却强大的工具——搜索引擎中。搜索引擎不仅是获取知识的入口&#xff0c;更是解决问题的利器。下面&#xff0c;我将分享一些善用…...

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过&#xff0c;个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…...

uni-app view循环绑定click和 v-if

<view class"layout-wrap-item" v-for"(item, index) in menuItems" :key"index" click"item.clickHandler" :v-if"showMenu(item)"></view> const xxx (id) > { }; // 定义菜单项数组 const menuItems …...

Redis 高并发分布式锁实战

目录 环境准备 一 . Redis 安装 二&#xff1a;Spring boot 项目准备 三&#xff1a;nginx 安装 四&#xff1a;Jmeter 下载和配置 案例实战 优化一&#xff1a;加 synchronized 锁 优化二&#xff1a;使用 redis 的 setnx 实现分布式锁 优化三&#xff1a;使用 Lua 脚本…...

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…...

2024-11-6----Android 11(全志713m)----- 关于添加 Selinux 权限

需求 节点: /sys/devices/platform/motor0/motor_ctrl上层 APP 使用 JNI 需要对该节点进行 echo 的操作,操作失败。 添加前的验证工作 adb 进去验证下,如下图所示: 发现权限不够。su 以后再操作是OK的,如下图: 添加前的修改 为防止报权限错误,直接给777,因为该…...

shodan5(泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…...

【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本

文章目录 一、Ansible安装及远程控制1、关闭防火墙和SELinux2、安装ansible3、配置SSH无密码登录1、在管理机上生成一对密钥2、将公钥下发到远程主机3、保管密钥 4、主机目录 二、常用模块1、setup模块2、copy模块3、file模块4、shell模块5、script模块6、ping模块7、group模块…...

惠州石湾DELL T130服务器黄灯不开机案例

惠州石湾一个朋友反馈一台DELL PowerEdge T130 塔式服务器故障为 通电后无法开机&#xff0c;前面同时亮3个故障灯。闪电灯&#xff0c;电压灯&#xff0c;高温灯 1&#xff1a;这种情况建议大家更换一个同型号的电源进行故障排除。 2&#xff1a;朋友把该服务器硬件最小化测…...

⭐SmartControl: Enhancing ControlNet for Handling Rough Visual Conditions

目录 0 Abstract 1 Motivation 2 Related Work 2.1 Text-to-Image Diffusion Model 2.2 Controllable Text-to-Image Generation 2.3 ControlNet 2.4 Control Scale Exploration 3 Method 3.1 Framework 3.2 Control Scale Predictor 3.3 Unaligned Data Constructi…...

wordpress站外调用指定ID分类下的推荐内容

在WordPress中&#xff0c;如果你想从站外调用指定ID分类下的推荐内容&#xff0c;你可以使用WordPress REST API来实现。以下是一个基本的步骤指南&#xff1a; 1. 启用REST API 确保你的WordPress站点已经启用了REST API。大多数现代WordPress版本默认启用此功能。 2. 获取…...

Ente: 我们的 Monorepo 经验

原文&#xff1a;manav - 2024.10.29 九个月前&#xff0c;我们切换到了 monorepo。在此&#xff0c;我将介绍我们迄今为止的切换经验。 这并不是一份规范性的建议&#xff0c;而是一个经验的分享&#xff0c;目的是希望能够帮助其他团队做出明智的决策。 与大多数岔路不同&…...

Kafka java 配置

前言&#xff1a; 大家好&#xff0c;大家在springboot项目中&#xff0c;经常采用 KafkaListener 做为消费者。这个是spring为我们封装的。 但是某些情况 注解的方式并不能满足需求。这个时候就需要手动版本了。 介绍&#xff1a; 我们已经集成spring-Kafka 就不需要再…...

网络安全现状:复杂的威胁形势导致压力水平飙升

《2024 年网络安全状况》报告深入分析了当前网络安全挑战和趋势。 该报告重点介绍了几个关键的关注领域&#xff0c;包括人员短缺、技能差距、不断演变的威胁和预算限制&#xff0c;同时还指出了取得进展的领域&#xff0c;例如对威胁响应能力的信心增强以及对网络风险评估的认…...

【机器学习】强化学习(1)——强化学习原理浅析(区分强化学习、监督学习和启发式算法)

文章目录 强化学习介绍强化学习和监督学习比较监督学习强化学习 强化学习的数学和过程表达动作空间序列决策策略&#xff08;policy&#xff09;价值函数&#xff08;value function&#xff09;模型&#xff08;model&#xff09; 强化学习和启发式算法比较强化学习步骤代码走…...

航空总医院医院网站建设招标网站/淘宝怎么优化关键词步骤

首先打开官网SQL Server 下载完成后点开 可以修改路径&#xff0c;然后下一步 左侧点击安装&#xff0c;然后点击右侧全新 默认点击下一步此处参考别人的文章需要关闭防火墙&#xff0c;直接关闭了&#xff0c;可自行选择&#xff0c;后果自负&#xff0c;方法如下 然后继续…...

如何搜名字搜到自己做的网站/网站seo推广多少钱

Android SDKEclipseADTCDTNDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C平台的搭建&#xff0c;尽管以前有成功在Windows XP做过&#xff0c;由于当时没有留下有用的记录&#xff0c;花了很多的冤枉时间&#xff0c;今天写出来以备后用。由于Android SD…...

网络营销课程作业/seo首页优化

《中国经济周刊》记者曹昌李永华| 湖南报道。历时500多天&#xff0c;深入湘江流域10地市&#xff0c;重点调查郴州三十六湾、衡阳水口山等重金属污染工矿区&#xff0c;采集包括土壤样、稻谷样等164个样本……。据调查结果显示&#xff1a;湘江流域重点污染区砷超标最高715倍&…...

番禺有经验的网站建设/网站优化的方法

在关系型数据库中&#xff0c;除前期对数据库的物理设计、关系规范化等方面进行优化外&#xff0c;一个简单直接有效的方法是对SQL语句进行调整&#xff0c;进行优化来减少计算量和内存需求&#xff0c;提高响应速度。本篇文章将讨论mysql如何优化where子句1.where条件的顺序(*…...

网站设计连接数据库怎么做/企业推广宣传文案

1、添加钩子文件 进入对应Git仓库 cd /home/myrepo.git 创建post-receive touch hooks/post-receive 使用vim打开post-receive将如下shell写入文件中 #!/bin/sh #author: embbnux #Blog of Embbnux: http://www.embbnux.com #判断是不是远端仓库 IS_BARE$(git rev-par…...

网站的主题是什么/sem优化是什么

之前在写代码的时候&#xff0c;如果需要让线程等待一会&#xff0c;就直接使用sleep()方法&#xff0c;一直也没有出过问题。而wait()方法的出场率很高&#xff0c;每次打一个句点的时候&#xff0c;对象的方法弹出来&#xff0c;总是能看到wait()在其中&#xff0c;wait()是一…...