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

news/2024/11/14 12:03:44/

在这里插入图片描述

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

相关文章

【国产操作系统对Qt支持有哪些?】

国产操作系统 鸿蒙操作系统:由华为开发,主要用于智能设备和物联网领域。 深度操作系统:基于Linux的操作系统,适用于个人电脑和服务器。 中标麒麟:由中国电子科技集团公司研发,适用于服务器和桌面环境。 悠然操作系统:面向教育和个人用户的Linux发行版。 红旗Linux:早期…

重构代码之移动字段

移动字段用于将字段从一个类移动到另一个更合适的类中。通常&#xff0c;当某个字段在当前类中的使用很少&#xff0c;或者更多地被其他类依赖时&#xff0c;可以考虑将其移动到更加合适的类中&#xff0c;以提升代码的聚合性和可维护性。 一、适用场景 字段主要为其他类提供…

@ComponentScan:Spring Boot中的自动装配大师

文章目录 1. 什么是ComponentScan注解&#xff1f;2. 为什么需要ComponentScan注解&#xff1f;3. 如何使用ComponentScan注解&#xff1f;4. ComponentScan注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里&#xff0c;自动装配&#xff08;Auto-wiring&a…

如何从头开始构建神经网络?(附教程)

随着流行的深度学习框架的出现&#xff0c;如 TensorFlow、Keras、PyTorch 以及其他类似库&#xff0c;学习神经网络对于新手来说变得更加便捷。虽然这些框架可以让你在几分钟内解决最复杂的计算任务&#xff0c;但它们并不要求你理解背后所有需求的核心概念和直觉。如果你知道…

WIndows搭建NGINX环境

在Windows系统上搭建NGINX的步骤相对简单&#xff0c;以下是基本的步骤&#xff1a; 下载NGINX&#xff1a; 访问NGINX官方网站&#xff08;http://nginx.org/&#xff09;下载最新的稳定版本&#xff0c;或者使用Windows版本&#xff0c;通常是一个名为nginx/Windows-版本号.z…

Rust 语言学习笔记(一)

学了不少编程语言&#xff0c;多数是离不开垃圾回收的&#xff0c;要么像 C 仍然是过于复杂&#xff0c;对于通用&#xff0c;编译型编程语言 Rust 是个不错的选择, Rust 不需要垃圾回收器。Rust 是由 Mozilla 主导开发的&#xff0c;设计准则为 "安全&#xff0c;并发&am…

VScode下脚本被禁止运行的原因及解决方案

报错信息 npm : 无法加载文件 D:\softforjava\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi on_Policies。 原因及解决方案 需要以管理员身份运行vscode&…