✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「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类都是一个非常实用的工具。