Qt 计算两条直线QLineF的重叠部分,如何存在则返回该直线

计算两条直线QLineF的重叠部分

效果

在这里插入图片描述

使用示例

    QLineF intersection;bool isSuccess = GetOverlapSegment(line1, line2, intersection);

源码

// 判断两个QLineF对象在斜率相同时是否存在重叠部分
bool DoLineOverlapWithSameSlope(const QLineF& line1, const QLineF& line2)
{qreal slope1 = line1.dy() / line1.dx();qreal slope2 = line2.dy() / line2.dx();// 引入误差范围qreal epsilon = 1e-6;if (std::abs(slope1 - slope2) > epsilon) {return false; // 斜率不相等,直接返回false}qreal b1 = line1.p1().y() - slope1 * line1.p1().x();qreal b2 = line2.p1().y() - slope1 * line2.p1().x();qreal x_overlap = (b2 - b1) / (slope1 - slope2);if (x_overlap < qMin(line1.p1().x(), line1.p2().x()) ||x_overlap > qMax(line1.p1().x(), line1.p2().x()) ||x_overlap < qMin(line2.p1().x(), line2.p2().x()) ||x_overlap > qMax(line2.p1().x(), line2.p2().x())) {return false;}return true;
}bool GetOverlapSegment(const QLineF& line1, const QLineF& line2, QLineF& overlap)
{bool is_overlap = DoLineOverlapWithSameSlope(line1, line2);if (!is_overlap) return false;qreal start1 = qMin(line1.p1().x(), line1.p2().x());qreal end1 = qMax(line1.p1().x(), line1.p2().x());qreal start2 = qMin(line2.p1().x(), line2.p2().x());qreal end2 = qMax(line2.p1().x(), line2.p2().x());qreal overlapStart = qMax(start1, start2);qreal overlapEnd = qMin(end1, end2);if (overlapStart <= overlapEnd) {qreal minY1 = qMin(line1.p1().y(), line1.p2().y());qreal maxY1 = qMax(line1.p1().y(), line1.p2().y());qreal minY2 = qMin(line2.p1().y(), line2.p2().y());qreal maxY2 = qMax(line2.p1().y(), line2.p2().y());qreal overlapMinY = qMax(minY1, minY2);qreal overlapMaxY = qMin(maxY1, maxY2);overlap.setP1(QPointF(overlapStart, overlapMinY));overlap.setP2(QPointF(overlapEnd, overlapMaxY));return true;}return false;
}

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

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

相关文章

为什么说用了10年C++的程序员也不敢说自己精通C++?

在编程领域&#xff0c;C无疑是一门具有极高复杂度和深度的语言&#xff0c;它以其卓越的性能、灵活性和广泛的应用范围赢得了众多开发者青睐。然而&#xff0c;一个现象令人深思&#xff1a;即使有程序员使用C长达十年之久&#xff0c;他们仍可能谦逊地表示自己并未真正“精通…

45个常用Linux 命令,让你轻松玩转Linux

Linux 的命令确实非常多&#xff0c;然而熟悉 Linux 的人从来不会因为 Linux 的命令太多而烦恼。因为我们仅仅只需要掌握常用命令&#xff0c;就完全可以驾驭 Linux。 接下来&#xff0c;让我们一起来看看都有那些常用的 Linux 命令吧&#xff01; 一、文件目录操作 1. ls 命…

Cartoon FX Remaster

“卡通FX重制”是一个风格化的粒子系统预制件集合。您可以使用附带的“卡通FX简易编辑器”轻松自定义每个效果的颜色和其他属性。 卡通FX Remaster是卡通FX包1的新版本,从头开始重新制作了全新的效果。 ⭐新:通过卡通FX重制捆绑包,以20%的折扣获得所有4个卡通FX重制包! 50多…

python.类

1.类用class定义 name等是属性 是成员变量 定义完类了要定义对象 class Student: #定义了一个Student的类nameNoneageNonegenderNonesdu1Student() #创建了一个Student类的对象 sdu1.nameleo sdu1.age20 sdu1.gendermaleprint(sdu1.name) print(sdu1.age) print(sdu1.…

网络工程师之交换机配置单臂 ECHO 功能的 BFD 会话篇

网络工程师之交换机配置单臂 ECHO 功能的 BFD 会话篇 配置单臂 ECHO 功能的 BFD 会话&#xff0c;实现对链路故障的快速检测 在支持BFD功能的路由上配置 bfd # 启用 BFD 功能&#xff1b;q退出 bfd atob bind peer-ip 10.1.1.2 interface gigabitEthernet1/0/0 one-…

【数据分享】1929-2023年全球站点的逐月平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

Vue.js 3.4的新特性

Vue.js 3.4的新特性 目前&#xff0c;Vue.js的版本已经更新到3.4&#xff0c;这次更新不仅带来了性能上的飞跃&#xff0c;还引入了许多新特性&#xff0c;进一步优化了开发效率。 1. 性能提升 在性能方面&#xff0c;Vue.js 3.4 全新重写了模板解析器。与之前基于正则表达式…

Matlab从入门到精通课程

教程介绍 MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 学习地址 链接&#xff1a;https://pan.baidu.com/s/1PxGarBwQusMzwPVqcE…

RAG笔记:常见问题以及解决方法

1 内容缺失 知识库中缺少必要的上下文信息。当知识库没有包含正确答案时&#xff0c;RAG 系统可能会给出一个貌似合理但实际上错误的回答&#xff0c;而不是明确表示它不知道答案。 1.1 解决方法 1.1.1 设置阈值 在回答问题前先设定一个质量标准。如果召回内容达不到标准或…

Vulnhub:DR4G0N B4LL: 1

目录 信息收集 1、arp 2、nmap WEB web信息收集 gobuster 隐藏目录发现 图片隐写 ssh登录 提权 get user 系统信息收集 get root 信息收集 1、arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l …

基于yolov8安全帽检测的系统

基于yolov8安全帽检测的系统 项目描述&#xff1a; 安全头盔检测&#xff08;计算机视觉&#xff09; 1.自训练数据集1538张数据图片&#xff0c;进行标注&#xff0c;并进行100轮的训练&#xff0c;准确率达0.966 2.使用 Flask 和 Ultralytics YOLOv8 模型开发了一个 Web 应…

打造高效自动化渗透测试系统:关键步骤与实践

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…

collections库

collections 模块是 Python 标准库中的一个模块&#xff0c;提供了额外的数据容器和工具&#xff0c;用于增强 Python 内置的数据容器的功能。下面是 collections 模块中一些常用的数据容器和工具&#xff1a; namedtuple&#xff1a;命名元组是一个用于创建具有命名字段的元组…

免费客服系统大揭秘!有什么好用的免费客服系统推荐?

贵的不一定是好的&#xff0c;合不合适才最重要&#xff01;有什么好用的免费客服系统吗&#xff1f;现下服务经济的发展的风潮已经席卷到了各行各业。 企业不仅要提供好的产品&#xff0c;还需要好的服务。客服系统作为企业与客户重要的沟通渠道&#xff0c;越来越多的企业正在…

Java版AI人工智能源码 Chat GPT智能AI源码

Java版AI人工智能源码 Chat GPT智能AI源码 技术框架 基于前后端分离架构以及Vue3、uni-app、SpringBoot2.5技术栈开发&#xff0c; 包含PC端、H5端、小程序端、APP端。 AI人工智能系统介绍 Chat GPT AI人工智能系统聚合对接国内外知名主流大语言模型接口及中转平台&#x…

2024深圳国际冲压自动化设备及技术展览会

2024深圳国际冲压自动化设备及技术展览会 2024 Shenzhen International Press Automation Equipment and Technology Exhibition 时间&#xff1a;2024年08月28-30日 地点&#xff1a;深圳国际会展中心&#xff08;新馆&#xff09; 预订以上展会详询陆先生 I38&#xff0…

JetBrains全家桶激活,分享 DataGrip 2024 激活的方案

大家好&#xff0c;欢迎来到金榜探云手&#xff01; DataGrip 公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工…

《SQL必知必会第五版》第十四章(组合查询)挑战题

1. 编写 SQL 语句&#xff0c;将两个 SELECT 语句结合起来&#xff0c;以便从 OrderItems表中检索产品 ID&#xff08;prod_id&#xff09;和 quantity。其中&#xff0c;一个 SELECT 语句过滤数量为 100 的行&#xff0c;另一个 SELECT 语句过滤 ID 以 BNBG 开头的产品。按产品…

RT Studio 仍存在的一些bug

年前有参加RT官方组织的活动&#xff0c;本来觉得是一路next的使用体验所以就没有提前跑一遍&#xff0c;然后现场做实验的时候&#xff0c;尴尬了。 安装官方guide&#xff0c;下载工具链&#xff0c;下载bsp&#xff0c;新建开发板项目&#xff0c;下载软件组件&#xff0c;全…

基于51单片机自动售货机设计资料(源码、仿真原理图、论文)

目录 1、仿真图 2、程序 3、自动售货机说明内容 3.1 自动售货机的系统结构 3.2 自动售货机的控制子系统概述 3.3 自动售货机的功能概述 3.4自动售货机的设计思路 资料下载地址&#xff1a;基于51单片机自动售货机设计资料(源码、仿真原理图、论文) 1、仿真图 2、程序 3…