「QT」几何数据类 之 QVector4D 四维向量类

devtools/2024/11/14 13:17:38/

在这里插入图片描述

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

目录

    • Qt中QVector4D类详解(基于Qt 5.15版本)
      • 一、类的引言
      • 二、使用范围
      • 三、类的头文件
      • 四、类的继承
      • 五、类的构造介绍
      • 六、共有函数介绍
      • 七、static函数介绍
      • 八、运算符重载
      • 九、详细代码举例

Qt中QVector4D类详解(基于Qt 5.15版本)

一、类的引言

QVector4D类是Qt框架中用于表示和操作四维向量或顶点的核心类。它广泛应用于3D图形渲染、物理模拟、动画以及任何需要四维空间表示的领域。QVector4D通过存储四个浮点数(x, y, z, w)来定义其在四维空间中的位置和方向。
官方文档:https://doc.qt.io/qt-5/qvector4d.html

二、使用范围

QVector4D类的使用范围包括但不限于:

  • 3D图形渲染:在3D图形编程中,QVector4D常用于表示顶点坐标、颜色值(包括透明度)、纹理坐标等。
  • 物理模拟:在物理引擎中,QVector4D可用于表示力和速度等物理量的四维向量。
  • 动画:在动画系统中,QVector4D可用于表示关键帧的插值数据。
  • 数学计算:QVector4D提供了丰富的数学函数,如点积、叉积、归一化等,方便进行四维向量的各种计算。

三、类的头文件

在Qt 5.15版本中,QVector4D类的头文件是<QVector4D>,它位于QtCore模块中。因此,在使用QVector4D类之前,需要在项目的.pro文件中添加QT += core配置,以包含QtCore模块。

四、类的继承

QVector4D类是一个独立的类,不继承自其他类。它实现了对四维向量的表示和操作功能,是Qt几何数据类体系中的一个重要组成部分。

五、类的构造介绍

QVector4D类提供了多个构造函数,允许以不同的方式初始化四维向量:

  1. QVector4D():构造一个默认的QVector4D对象,其x、y、z、w分量均被设置为0.0。
  2. QVector4D(float xpos, float ypos, float zpos, float wpos):构造一个具有指定x、y、z、w分量的QVector4D对象。
  3. QVector4D(const QPoint &point):根据二维点构造QVector4D对象,其z和w分量被设置为0.0。
  4. QVector4D(const QPointF &point):与上一个构造函数类似,但使用QPointF对象作为输入。
  5. QVector4D(const QVector2D &vector):根据二维向量构造QVector4D对象,其z和w分量被设置为0.0。
  6. QVector4D(const QVector2D &vector, float zpos, float wpos):根据二维向量和指定的z、w分量构造QVector4D对象。
  7. QVector4D(const QVector3D &vector):根据三维向量构造QVector4D对象,其w分量被设置为0.0。
  8. QVector4D(const QVector3D &vector, float wpos):根据三维向量和指定的w分量构造QVector4D对象。

六、共有函数介绍

QVector4D类提供了以下共有成员函数,用于操作和查询四维向量的属性:

  • float x() const:返回x分量。
  • float y() const:返回y分量。
  • float z() const:返回z分量。
  • float w() const:返回w分量。
  • void setX(float x):设置x分量。
  • void setY(float y):设置y分量。
  • void setZ(float z):设置z分量。
  • void setW(float w):设置w分量。
  • bool isNull() const:如果x、y、z、w分量都等于0.0(考虑到浮点数精度),则返回true。
  • float length() const:返回向量的长度(模)。
  • float lengthSquared() const:返回向量长度的平方,避免了开方运算,通常用于比较长度时提高效率。
  • QVector4D normalized() const:返回向量的归一化形式(单位向量),不改变原向量。
  • void normalize():就地(in-place)归一化向量,如果向量是零向量或长度非常接近1,则不进行任何操作。
  • QVector4D &operator*=(float factor):将向量乘以一个标量因子。
  • QVector4D &operator*=(const QVector4D &vector):将向量与另一个向量进行分量乘法运算。
  • QVector4D &operator+=(const QVector4D &vector):将向量与另一个向量进行分量加法运算。
  • QVector4D &operator-=(const QVector4D &vector):将向量与另一个向量进行分量减法运算。
  • QVector4D &operator/=(float divisor):将向量除以一个标量因子。
  • QVector4D &operator/=(const QVector4D &vector):将向量与另一个向量进行分量除法运算(对应分量相除)。

七、static函数介绍

在Qt 5.15版本中,QVector4D类提供了一个static成员函数:

  • static float dotProduct(const QVector4D &v1, const QVector4D &v2):计算两个向量的点积。

八、运算符重载

QVector4D类支持以下运算符重载,使得向量的操作更加直观和方便:

  • QVector4D operator+(const QVector4D &vector):向量加法。
  • QVector4D operator-(const QVector4D &vector):向量减法。
  • QVector4D operator*(float factor):向量与标量乘法。
  • QVector4D operator*(const QVector4D &vector):向量与向量分量乘法(不同于operator*=(const QVector4D &vector),后者会修改原向量)。
  • QVector4D operator/(float divisor):向量与标量除法。
  • QVector4D operator/(const QVector4D &divisor):向量与向量分量除法(对应分量相除)。
  • bool operator==(const QVector4D &vector):向量相等比较。
  • bool operator!=(const QVector4D &vector):向量不等比较。

此外,QVector4D类还支持类型转换运算符operator QVariant() const,允许将QVector4D对象转换为QVariant对象。

九、详细代码举例

以下是一个使用QVector4D类的详细代码示例:

#include <QCoreApplication>
#include <QVector4D>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 构造QVector4D对象QVector4D vector1(1.0f, 2.0f, 3.0f, 4.0f);QVector4D vector2(5.0f, 6.0f, 7.0f, 8.0f);// 输出向量的分量qDebug() << "Vector1:" << "x=" << vector1.x() << ", y=" << vector1.y() << ", z=" << vector1.z() << ", w=" << vector1.w();qDebug() << "Vector2:" << "x=" << vector2.x() << ", y=" << vector2.y() << ", z=" << vector2.z() << ", w=" << vector2.w();// 向量加法QVector4D sum = vector1 + vector2;qDebug() << "Sum:" << "x=" << sum.x() << ", y=" << sum.y() << ", z=" << sum.z() << ", w=" << sum.w();// 向量减法QVector4D difference = vector1 - vector2;qDebug() << "Difference:" << "x=" << difference.x() << ", y=" << difference.y() << ", z=" << difference.z() << ", w=" << difference.w();// 向量与标量乘法QVector4D scaledVector = vector1 * 2.0f;qDebug() << "Scaled Vector1:" << "x=" << scaledVector.x() << ", y=" << scaledVector.y() << ", z=" << scaledVector.z() << ", w=" << scaledVector.w();// 向量点积float dotProd = QVector4D::dotProduct(vector1, vector2);qDebug() << "Dot Product:" << dotProd;// 向量归一化QVector4D normalizedVector = vector1.normalized();qDebug() << "Normalized Vector1:" << "x=" << normalizedVector.x() << ", y=" << normalizedVector.y() << ", z=" << normalizedVector.z() << ", w=" << normalizedVector.w();// 向量长度float length = vector1.length();qDebug() << "Length of Vector1:" << length;return a.exec();
}

在这个示例中,我们创建了两个QVector4D对象vector1vector2,并使用了加法、减法、与标量乘法、点积、归一化和长度计算等成员函数来操作它们。此外,我们还展示了如何使用qDebug()函数输出向

何曾参静谧的博客


在这里插入图片描述


http://www.ppmy.cn/devtools/133608.html

相关文章

【Python】爬虫通过验证码

1、将验证码下载至本地 # 获取验证码界面html url http://www.example.com/a.html resp requests.get(url) soup BeautifulSoup(resp.content.decode(UTF-8), html.parser)#找到验证码图片标签&#xff0c;获取其地址 src soup.select_one(div.captcha-row img)[src]# 验证…

多云环境的管理与优化:策略与实践

随着企业数字化转型的推进&#xff0c;越来越多的企业选择采用多云策略来提升灵活性、保障数据安全并优化成本管理。然而&#xff0c;多云环境的管理和优化需要面对诸多挑战。本文将详细探讨多云环境的管理和优化策略&#xff0c;结合实际代码示例&#xff0c;帮助运维工程师有…

新版 idea 编写 idea 插件时,启动出现 ClassNotFound

IntelliJ IDEA 2024.1.6 (Ultimate Edition) Build #IU-241.19072.14, built on August 8, 2024 Licensed to Sophia Tout Subscription is active until June 29, 2025. For educational use only. Runtime version: 17.0.111-b1207.30 amd64 Kotlin: 241.19072.14-IJ 新版本…

Linux内核USB2.0驱动框架分析--设备描述符以及USB标准请求

一&#xff0c;在标准的USB请求命令中&#xff0c;经常会看到描述符&#xff08;Descriptor&#xff09;&#xff0c;这是什么来的呢&#xff1f; Descriptor即描述符&#xff0c;是一个完整的数据结构&#xff0c;可以通过C语言等编程实现&#xff0c;并存储在USB设备中&…

uniapp 如何使用vuex store (亲测)

首先是安装&#xff1a; npm install vuexnext --save 安装之后&#xff0c;Vue2 这样写 不管在哪里&#xff0c;建立一个JS文件&#xff0c;假设命名&#xff1a;store.js 代码这样写&#xff1a; import Vue from vue; import Vuex from vuex;Vue.use(Vuex);const store…

Python酷库之旅-第三方库Pandas(208)

目录 一、用法精讲 971、pandas.MultiIndex.set_levels方法 971-1、语法 971-2、参数 971-3、功能 971-4、返回值 971-5、说明 971-6、用法 971-6-1、数据准备 971-6-2、代码示例 971-6-3、结果输出 972、pandas.MultiIndex.from_arrays类方法 972-1、语法 972-2…

国内AI工具复现GPTs效果详解

国内AI工具复现GPTs效果详解 引言 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;逐渐成为研究和应用的热点。GPTs&#xff08;Generative Pre-trained Transformer&#xff09;系列模型&#xff0c;特别是GPT-4的推出&a…

基于Spring Boot与Redis的令牌主动失效机制实现

目录 前言1. 项目结构和依赖配置1.1 项目依赖配置1.2 Redis连接配置 2. 令牌主动失效机制的实现流程2.1 登录成功后将令牌存储到Redis中2.2 使用拦截器验证令牌2.3 用户修改密码后删除旧令牌 3. Redis的配置与测试4. 可能的扩展与优化结语 前言 在现代Web系统中&#xff0c;用…