1. 概述
QQuaternion
是 Qt 中用于表示三维空间中旋转的四元数类。它包含一个标量部分和一个三维向量部分,可以用来表示旋转操作。四元数在计算机图形学中广泛用于平滑的旋转和插值。
2. 重要方法
-
默认构造函数
QQuaternion::QQuaternion(); // 构造单位四元数 (1, 0, 0, 0)
-
从标量和向量构造
QQuaternion::QQuaternion(float scalar, const QVector3D &vector); // 从标量和向量构造四元数 QQuaternion::QQuaternion(float scalar, float xpos, float ypos, float zpos); // 从标量和三个坐标构造四元数
-
从
QVector4D
构造QQuaternion::QQuaternion(const QVector4D &vector); // 从 QVector4D 构造四元数
基本操作
-
共轭
QQuaternion QQuaternion::conjugated() const; // 返回四元数的共轭
-
点积
static float QQuaternion::dotProduct(const QQuaternion &q1, const QQuaternion &q2); // 返回两个四元数的点积
-
从轴和角度构造
static QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle); // 从轴和角度构造四元数 static QQuaternion QQuaternion::fromAxisAndAngle(float x, float y, float z, float angle); // 从轴和角度构造四元数
-
归一化
void QQuaternion::normalize(); // 归一化四元数 QQuaternion QQuaternion::normalized() const; // 返回归一化的四元数
-
旋转向量
QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const; // 旋转一个向量
-
设置和获取分量
void QQuaternion::setScalar(float scalar); // 设置标量部分 void QQuaternion::setVector(const QVector3D &vector); // 设置向量部分 float QQuaternion::scalar() const; // 获取标量部分 QVector3D QQuaternion::vector() const; // 获取向量部分
转换
-
欧拉角
void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const; // 获取欧拉角 QVector3D QQuaternion::toEulerAngles() const; // 返回欧拉角
-
旋转矩阵
QMatrix3x3 QQuaternion::toRotationMatrix() const; // 转换为旋转矩阵
-
四元数到
QVector4D
QVector4D QQuaternion::toVector4D() const; // 转换为 QVector4D
其他
-
长度
float QQuaternion::length() const; // 返回四元数的长度 float QQuaternion::lengthSquared() const; // 返回四元数的长度平方
-
检查
bool QQuaternion::isIdentity() const; // 检查是否为单位四元数 bool QQuaternion::isNull() const; // 检查是否为零四元数
-
插值
static QQuaternion QQuaternion::slerp(const QQuaternion &q1, const QQuaternion &q2, float t); // 球面线性插值 static QQuaternion QQuaternion::nlerp(const QQuaternion &q1, const QQuaternion &q2, float t); // 归一化线性插值
运算符重载
-
乘法
QQuaternion &QQuaternion::operator*=(float factor); // 乘以标量 QQuaternion &QQuaternion::operator*=(const QQuaternion &quaternion); // 乘以另一个四元数
-
加法
QQuaternion &QQuaternion::operator+=(const QQuaternion &quaternion); // 加法
-
减法
QQuaternion &QQuaternion::operator-=(const QQuaternion &quaternion); // 减法
-
除法
QQuaternion &QQuaternion::operator/=(float divisor); // 除以标量
#include <QCoreApplication>
#include <QQuaternion>
#include <QVector3D>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 构造一个四元数QQuaternion quaternion(0.7071, 0.7071, 0.0, 0.0);// 归一化四元数quaternion.normalize();// 获取四元数的标量和向量部分float scalar = quaternion.scalar();QVector3D vector = quaternion.vector();qDebug() << "Scalar:" << scalar;qDebug() << "Vector:" << vector;// 旋转一个向量QVector3D originalVector(1.0, 0.0, 0.0);QVector3D rotatedVector = quaternion.rotatedVector(originalVector);qDebug() << "Original Vector:" << originalVector;qDebug() << "Rotated Vector:" << rotatedVector;// 转换为欧拉角QVector3D eulerAngles = quaternion.toEulerAngles();qDebug() << "Euler Angles:" << eulerAngles;return app.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!