「QT」几何数据类 之 QVector2D 二维向量类
✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「QT」QT5程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
「Math」探秘数学世界 |
目录
- Qt中的QVector2D类详解
- 一、类的引言
- 二、使用范围
- 三、类的头文件
- 四、类的构造介绍
- 五、共有函数介绍
- 六、Static函数介绍
- 七、运算符重载
- 八、详细代码举例
- 示例1:创建和初始化QVector2D对象
- 示例2:向量运算
- 示例3:旋转和长度计算
Qt中的QVector2D类详解
一、类的引言
QVector2D是Qt框架中的一个二维向量类,它封装了两个浮点数(通常是float
类型),用于表示二维空间中的点或向量。QVector2D类提供了丰富的成员函数和运算符重载,使得在二维图形处理、游戏开发、物理模拟等领域中,对点和向量的操作变得更加简单和直观。
官方帮助文档:https://doc.qt.io/qt-5/qvector2d.html
二、使用范围
QVector2D类广泛应用于需要二维向量运算的场景中。例如,在图形学中,它可以用于表示二维空间中的顶点坐标,进行平移、旋转、缩放等变换;在游戏开发中,它可以用于计算角色的移动速度、方向、碰撞检测等;在物理模拟中,它可以用于表示力、加速度、速度等物理量。
三、类的头文件
要使用QVector2D类,首先需要包含其头文件:
#include <QVector2D>
四、类的构造介绍
QVector2D类提供了多种构造函数,允许以不同的方式初始化向量。
- 默认构造函数:
QVector2D()
,创建一个默认的二维向量,其x和y分量都初始化为0。 - 参数化构造函数:
QVector2D(float xpos, float ypos)
,通过指定的x和y坐标来构造一个向量。 - 从QPointF构造:
QVector2D(const QPointF &point)
,从一个QPointF
对象构造一个向量。 - 从QPoint构造:
QVector2D(const QPoint &point)
,从一个QPoint
对象构造一个向量。
五、共有函数介绍
QVector2D类提供了许多成员函数,用于获取和设置向量的分量、计算向量的长度、进行向量运算等。
- 获取分量:
float x() const
和float y() const
分别返回向量的x和y分量。 - 设置分量:
void setX(float x)
和void setY(float y)
分别设置向量的x和y分量。 - 计算长度:
float length() const
返回向量的长度(模)。 - 单位化:
QVector2D normalized() const
返回单位化后的向量(即长度为1的向量)。 - 判断是否为空向量:
bool isNull() const
判断向量是否为空向量(即x和y分量都为0)。 - 旋转:
QVector2D rotate(qreal angle) const
返回绕原点旋转指定角度后的向量。
六、Static函数介绍
QVector2D类还提供了一些静态成员函数,用于进行向量运算和比较。
- 点乘:
static float dotProduct(const QVector2D &v1, const QVector2D &v2)
计算两个向量的点乘结果。 - 叉乘(注意:二维向量的叉乘结果是一个标量,不是向量):虽然QVector2D本身没有直接提供二维叉乘的静态函数,但可以通过计算两个向量的行列式来得到叉乘的结果(即两个向量构成的平行四边形的面积)。不过,Qt中通常使用
QVector3D
来进行三维向量的叉乘运算。
七、运算符重载
QVector2D类重载了一些运算符,使得向量运算更加直观和方便。
- 加法:
QVector2D operator+(const QVector2D &v)
返回两个向量相加的结果。 - 减法:
QVector2D operator-(const QVector2D &v)
返回两个向量相减的结果。 - 数量乘法:
QVector2D operator*(float scalar)
返回向量与标量相乘的结果。 - 数量除法:
QVector2D operator/(float scalar)
返回向量与标量相除的结果。 - 赋值运算符:还重载了相应的赋值运算符(如
+=
、-=
、*=
、/=
),用于进行向量运算并更新原向量。
八、详细代码举例
以下是一些使用QVector2D类的代码示例,展示了如何创建和初始化QVector2D对象,以及进行各种向量运算。
示例1:创建和初始化QVector2D对象
#include <QVector2D>
#include <iostream>int main() {QVector2D point(3.0f, 4.0f); // 创建一个点QVector2D vector(-1.0f, 2.0f); // 创建一个向量std::cout << "Point: (" << point.x() << ", " << point.y() << ")" << std::endl;std::cout << "Vector: (" << vector.x() << ", " << vector.y() << ")" << std::endl;return 0;
}
示例2:向量运算
#include <QVector2D>
#include <iostream>int main() {QVector2D v1(1.0f, 2.0f);QVector2D v2(3.0f, 4.0f);QVector2D sum = v1 + v2; // 向量加法QVector2D diff = v1 - v2; // 向量减法QVector2D scaled = v1 * 2.0f; // 数量乘法QVector2D normalized = v1.normalized(); // 单位化std::cout << "Sum: (" << sum.x() << ", " << sum.y() << ")" << std::endl;std::cout << "Difference: (" << diff.x() << ", " << diff.y() << ")" << std::endl;std::cout << "Scaled: (" << scaled.x() << ", " << scaled.y() << ")" << std::endl;std::cout << "Normalized: (" << normalized.x() << ", " << normalized.y() << ")" << std::endl;return 0;
}
示例3:旋转和长度计算
#include <QVector2D>
#include <iostream>
#include <cmath> // 用于M_PI常量int main() {QVector2D vector(1.0f, 0.0f); // 创建一个沿x轴的单位向量QVector2D rotated = vector.rotate(M_PI / 2); // 旋转90度(π/2弧度)float length = vector.length(); // 计算向量的长度std::cout << "Rotated vector: (" << rotated.x() << ", " << rotated.y() << ")" << std::endl;std::cout << "Length of original vector: " << length << std::endl;return 0;
}
通过以上示例,我们可以看到QVector2D类在二维向量运算中的强大功能和便捷性。无论是在图形学、游戏开发还是物理模拟等领域,QVector2D类都是一个非常实用的工具。
相关文章:

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

深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
文章目录 🌺深度学习面试八股汇总🌺权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化(Glorot 初始化)He 初始化正交初始化(Orthogonal Initialization)预训练模型…...
Rust: 利用 chrono 库实现日期和字符串互相转换
在 Rust 中,日期和字符串之间的转换通常涉及 chrono 库,这是一个功能强大的日期和时间处理库。以下是如何在 Rust 中将日期转换为字符串以及将字符串转换为日期的示例。 首先,你需要在你的 Cargo.toml 文件中添加 chrono 依赖: …...

【IEEE/EI会议】第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)
会议通知 会议时间:2025年4月25-27日 会议地点:中国南京 会议官网:www.aemcse.org 会议简介 第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)由南京信息工程大学主办,将于2025年4月25日…...
volatile 关键字的作用学习
转自: chatgpt 1.介绍 在 C 中,volatile 关键字的作用是告诉编译器一个变量的值可能在任何时刻被外部因素改变,编译器不能对其进行优化。这对于那些可能由硬件、其他线程或信号处理程序更改的变量特别有用。 当一个变量被声明为 volatile 时ÿ…...

数据字典是什么?和数据库、数据仓库有什么关系?
一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下: 1. 对于数据开发者来说,数据字典包含了关于数据结构和内容的清晰…...

Docker平台搭建方法
Docker平台搭建方法 1.1在VMware中创建两个虚拟机,只需要1个网卡,连接192.168.200.0网络。 虚拟机分配2个CPU,2G内存,60G硬盘,主机名分别为server和client,IP地址分别为192.168.200.137和192.168.200.138。server节点还兼做regis…...
JavaScript数组
目录 1. 基本概念 2. 创建数组对象 2.1 字面量创建 2.2 构造函数创建 2.3 静态方法Array.of() 2.4 静态方法Array.from() 2.5 空槽位 3. 常用实例方法 3.1 修改方法 3.11 push 和 unshift 3.12 shift 和 pop 3.13 fill 3.14 cpoyWithin 3.15 reverse 3.16 sort …...

产品经理如何使用项目管理软件推进复杂项目按时上线
前言 相信很多产品同学或多或少都有过这样的经历:平时没有听到任何项目延期风险,但到了计划时间却迟迟无法提测……评审时没有任何argue,提测后发现开发的功能不是自己想要的……费劲九牛二虎之力终于让项目上线了,然而发现成果达…...

构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统
目录 引言工具作用概述DCGM-ExporterNode exporterPROMETHEUSGRAFANA小结 部署单容器DCGM-ExporterNode exporterPROMETHEUSGRAFANANode exporterDCGM-Exporter 多容器Node exporterDCGM-ExporterDocker Compose 参考 引言 本文的是适用对象,是希望通过完全基于Doc…...

第13章 聚合函数
一、聚合函数介绍 实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。(可以是一个字段的数据,也可以是通…...
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(4)
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 本章是去答案版本。带答案的版本在下…...
C# 中 LibraryImport 和 DllImport有什么不同
libraryimport 和 dllimport 是两个与动态链接库(DLL)相关的术语,它们在不同的编程语言和上下文中有不同的含义和用途。 在 C# 中,DllImportAttribute 是一个特性,用于指示一个方法声明是作为对非托管 DLL 中函数的 P…...

PDF编辑工具Adobe Acrobat DC 2023安装教程(附安装包)
Adobe Acrobat DC 2023 是 Adobe 公司推出的一款功能强大的 PDF 文档处理软件。它不仅支持创建、编辑和签署 PDF 文件,还提供了丰富的工具来管理和优化这些文件。以下是 Acrobat DC 2023 的一些主要特点: 1.PDF 创建与编辑:用户可以直接从多…...
系动词、表语和主语补足语
系动词、表语和主语补足语 1. The classification of English verbs (英语动词的分类)2. 系动词 (连系动词)2.1. Grammatical function (语法功能) 3. 表语和主语补足语3.1. Predicative expression (表语)3.2. Subject complement (主语补足语) 4. Copula-like words4.1. List…...

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析
未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…...

Java 详解 接口
文章目录 一、概述1.1、何为接口1.2、接口的定义 二、特点2.1、接口的成员变量2.2、接口的成员方法2.3、接口中不可以含有构造器和代码块2.4、接口不可以实例化对象2.5、接口和类之间使用implements关键字进行连接2.6、当类在重写接口中的方法时,不可以使用默认的访…...
wordpress搬家迁移后怎么修改数据库用户名
在WordPress中修改数据库用户名,你需要更新WordPress的配置文件wp-config.php。以下是步骤和示例代码: 使用FTP客户端或文件管理器登录到你的网站的主机账户。 找到wp-config.php文件,它通常位于WordPress安装的根目录中。 打开wp-config.…...
C# 用于将一个DataTable转换为Users对象的列表
1:第一种例子: /// <summary> /// 用户名循环赋值 /// </summary> /// <param name"dt"></param> /// <returns></returns> public List<Users> FenPeiFillModelUsers(DataTable dt) { …...

Spark中的shuffle
Shuffle的本质基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】的问题。 1、Spark的Shuffle设计 Spark Shuffle过程也叫作宽依赖过程,Spark不完全依赖于内存计算,面临以上问题时,也需要Shuffle过程。 2、Spark中哪…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...