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

ops/2024/11/14 12:08:51/

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「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/ops/133560.html

相关文章

java常用工具介绍

1. 集成开发环境&#xff08;IDE&#xff09;&#xff1a; • Eclipse&#xff1a;一个开放源代码的、基于Java的可扩展开发平台。它提供了一个框架和一组服务&#xff0c;用于通过插件组件构建开发环境。Eclipse 还包括用于Java开发的工具&#xff08;Java Development Tools,…

基于SpringBoot的垃圾分类回收系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户、回收员功能模块&#xff1a;管理员&#xff08;用户管理、回收员管理、垃圾类型管理、商品分类管理、环保商城管理、上门回收管理、订单分配管理、订单管理、系统管理等&#xff09;、回收员&#xff08;订单分配、订单管理…

人工智能理论之opencv图像预处理、数据库、GUI布局的综合应用(图像预处理版块)

文章目录 前言图像预处理卷积核概念图像平滑处理高斯滤波 双边滤波中值滤波Canny边缘检测图像形态学操作形态学梯度顶帽小结 图片预处理1.引入库 图像预处理错误尝试成功运行 总结 前言 对前面学习综合应用的总结&#xff0c;不单是一个版块&#xff0c;而是三个版块综合到一起…

【大数据测试HDFS + Flask详细教程与实例】

大数据测试HDFS Flask 1. 环境准备安装工具安装Hadoop&#xff08;以单机模式为例&#xff09;安装Flask和HDFS Python客户端 2. HDFS Flask基本架构基本文件结构 3. 创建Flask应用与与HDFS交互步骤1&#xff1a;配置HDFS连接步骤2&#xff1a;构建Flask应用 4. 创建前端界面…

图论导引 - 第三章 第四节 - 11/13

相关算法 在本节中&#xff0c;我们简要描述与本章相关的三个问题——最短路径问题、中国邮递员问题和旅行商问题。 最短路径问题可以通过一种高效算法来解决&#xff0c;即通过一个有限的、逐步执行的程序能快速得出解决方案。邮递员问题只考虑一种特殊情况。旅行商问题&…

Redis设计与实现 学习笔记 第十七章 集群

Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过分片&#xff08;sharding&#xff0c;水平切分&#xff09;来进行数据共享&#xff0c;并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点&#xff08;node&#xff09;组成&#xff0c;在刚开…

02-分布式对象存储设计原理

02-分布式对象存储设计原理 保存图片、音视频等大文件就是对象存储&#xff1a; 很好的大文件读写性能 还可通过水平扩展实现近乎无限容量 并兼顾服务高可用、数据高可靠 对象存储“全能”&#xff0c;主要因为&#xff0c;对象存储是原生分布式存储系统&#xff0c;相比MySQL、…

聚焦国际数字影像,打造特色产业集群

在数字经济浪潮的推动下&#xff0c;众多城市和地区正积极投身于这一新兴领域的园区建设与规划&#xff0c;旨在打造数字经济与创意产业蓬勃发展的沃土。 规划国际数字影像产业园的首要任务&#xff0c;在于精准定位与明确目标。鉴于数字影像产业的多元化特性&#xff0c;涵盖…