本页内容

QQuaternion Class

QQuaternion 类表示由一个向量和一个标量组成的四元数。更多内容...

头文件: #include <QQuaternion>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

公共类型

(since 6.11) struct Axes
(since 6.11) struct Axis
(since 6.11) struct EulerAngles

公共函数

QQuaternion()
QQuaternion(const QVector4D &vector)
QQuaternion(float scalar, const QVector3D &vector)
QQuaternion(float scalar, float xpos, float ypos, float zpos)
QQuaternion conjugated() const
(since 6.11) QQuaternion::EulerAngles<float> eulerAngles() const
void getAxisAndAngle(float *x, float *y, float *z, float *angle) const
void getAxisAndAngle(QVector3D *axis, float *angle) const
QQuaternion inverted() const
bool isIdentity() const
bool isNull() const
float length() const
float lengthSquared() const
void normalize()
QQuaternion normalized() const
QVector3D rotatedVector(const QVector3D &vector) const
float scalar() const
void setScalar(float scalar)
void setVector(const QVector3D &vector)
void setVector(float x, float y, float z)
void setX(float x)
void setY(float y)
void setZ(float z)
(since 6.11) QQuaternion::Axes toAxes() const
QVector3D toEulerAngles() const
QMatrix3x3 toRotationMatrix() const
QVector4D toVector4D() const
QVector3D vector() const
float x() const
float y() const
float z() const
operator QVariant() const
QQuaternion &operator*=(const QQuaternion &quaternion)
QQuaternion &operator*=(float factor)
QQuaternion &operator+=(const QQuaternion &quaternion)
QQuaternion &operator-=(const QQuaternion &quaternion)
QQuaternion &operator/=(float divisor)

静态公共成员

float dotProduct(const QQuaternion &q1, const QQuaternion &q2)
(since 6.11) QQuaternion fromAxes(QQuaternion::Axes axes)
QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle)
QQuaternion fromAxisAndAngle(float x, float y, float z, float angle)
QQuaternion fromDirection(const QVector3D &direction, const QVector3D &up)
QQuaternion fromEulerAngles(float pitch, float yaw, float roll)
(since 6.11) QQuaternion fromEulerAngles(QQuaternion::EulerAngles<float> angles)
QQuaternion fromEulerAngles(const QVector3D &angles)
QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3)
QQuaternion nlerp(const QQuaternion &q1, const QQuaternion &q2, float t)
QQuaternion rotationTo(const QVector3D &from, const QVector3D &to)
QQuaternion slerp(const QQuaternion &q1, const QQuaternion &q2, float t)
bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2)
bool operator!=(const QQuaternion &q1, const QQuaternion &q2)
QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2)
QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)
QQuaternion operator*(const QQuaternion &quaternion, float factor)
QQuaternion operator*(float factor, const QQuaternion &quaternion)
QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2)
QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2)
QQuaternion operator-(const QQuaternion &quaternion)
QQuaternion operator/(const QQuaternion &quaternion, float divisor)
QDataStream &operator<<(QDataStream &stream, const QQuaternion &quaternion)
bool operator==(const QQuaternion &q1, const QQuaternion &q2)
QDataStream &operator>>(QDataStream &stream, QQuaternion &quaternion)

详细描述

四元数用于表示三维空间中的旋转,由 x、y 和 z 坐标指定的三维旋转轴以及表示旋转角度的标量组成。

成员函数文档

[constexpr noexcept] QQuaternion::QQuaternion()

构建一个单位四元数 (1, 0, 0, 0),即具有向量 (0, 0, 0) 和标量 1 的四元数。

[explicit constexpr noexcept] QQuaternion::QQuaternion(const QVector4D &vector)

根据vector 的各分量构建一个四元数。

[constexpr noexcept] QQuaternion::QQuaternion(float scalar, const QVector3D &vector)

根据指定的vector 和scalar 构建一个四元数向量。

另请参阅 vector() 和scalar()。

[constexpr noexcept] QQuaternion::QQuaternion(float scalar, float xpos, float ypos, float zpos)

根据向量 (xpos,ypos,zpos) 和scalar 构造一个四元数。

[constexpr noexcept] QQuaternion QQuaternion::conjugated() const

返回该四元数的共轭,即 (-x, -y, -z, 标量)。

[static constexpr noexcept] float QQuaternion::dotProduct(const QQuaternion &q1, const QQuaternion &q2)

返回q1 与q2 的点积。

另请参阅 length()。

[since 6.11] QQuaternion::EulerAngles<float> QQuaternion::eulerAngles() const

返回与该四元数对应的欧拉角(单位为度)。

该函数在 Qt 6.11 中引入。

另请参阅 fromEulerAngles()。

[static, since 6.11] QQuaternion QQuaternion::fromAxes(QQuaternion::Axes axes)

使用axes 中包含的坐标轴构造四元数。

注意: 假设这些坐 标轴为正交规范的。

该函数在 Qt 6.11 中引入。

另请参阅 toAxes() 和fromRotationMatrix()。

[static] QQuaternion QQuaternion::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)

这是一个重载函数。

[static] QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle)

创建一个归一化四元数,该四元数对应于围绕指定的 3Daxis 进行angle 度的旋转。

另请参阅 getAxisAndAngle()。

[static] QQuaternion QQuaternion::fromAxisAndAngle(float x, float y, float z, float angle)

创建一个归一化四元数,该四元数对应于绕 3D 轴旋转angle 度的操作(x ,y ,z )。

另请参阅 getAxisAndAngle()。

[static] QQuaternion QQuaternion::fromDirection(const QVector3D &direction, const QVector3D &up)

使用指定的前进方向direction 和向上方向up 构造四元数。如果未指定向上方向,或者前进向量与向上向量共线,则会生成一个新的正交规范向上方向。

另请参阅 fromAxes() 和rotationTo()。

[static] QQuaternion QQuaternion::fromEulerAngles(float pitch, float yaw, float roll)

创建一个四元数,该四元数对应于围绕 z 轴旋转roll 度、围绕 x 轴旋转pitch 度以及围绕 y 轴旋转yaw 度(按此顺序)的旋转。

另请参阅 eulerAngles()、toEulerAngles(),以及fromEulerAngles(QQuaternion::EulerAngles<float>)。

[static, since 6.11] QQuaternion QQuaternion::fromEulerAngles(QQuaternion::EulerAngles<float> angles)

等同于

fromEulerAngles(angles.pitch, angles.yaw, angles.roll);

这是一个重载函数。

该函数在 Qt 6.11 中引入。

另请参阅 eulerAngles()、toEulerAngles()、以及fromEulerAngles()。

[static] QQuaternion QQuaternion::fromEulerAngles(const QVector3D &angles)

创建一个四元数,该四元数对应于以下旋转:angles :沿z轴旋转 angles.z() 度,沿x轴旋转 angles.x() 度,沿y轴旋转 angles.y() 度(按此顺序)。

这是一个重载函数。

另请参阅 toEulerAngles()。

[static] QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 &rot3x3)

创建一个与旋转矩阵rot3x3 对应的四元数。

注意:如果 给定的旋转矩阵未归一化,生成的四元数将包含缩放信息。

另请参阅 toRotationMatrix() 和fromAxes()。

void QQuaternion::getAxisAndAngle(float *x, float *y, float *z, float *angle) const

提取一个 3D 轴向量(x 、y 、z )以及与该四元数对应的旋转角度angle (单位为度)。

x 、y 、z 和angle 必须均为有效的、非nullptr 指针,否则行为未定义。

另请参阅 fromAxisAndAngle()。

void QQuaternion::getAxisAndAngle(QVector3D *axis, float *angle) const

提取与该四元数对应的 3D 轴axis 以及旋转角度angle (单位为度)。

axis 和angle 必须均为有效的、非nullptr 指针,否则行为未定义。

这是一个重载函数。

另请参阅 fromAxisAndAngle()。

[constexpr noexcept] QQuaternion QQuaternion::inverted() const

返回该四元数的逆元。如果该四元数为空,则返回一个空四元数。

另请参阅 isNull() 和length()。

[constexpr noexcept] bool QQuaternion::isIdentity() const

如果该四元数的 x、y 和 z 分量均设为 0.0,且标量分量设为 1.0,则返回true ;否则返回false 。

[constexpr noexcept] bool QQuaternion::isNull() const

如果该四元数的 x、y、z 以及标量分量均设为 0.0,则返回 `true `;否则返回 `false`。

float QQuaternion::length() const

返回四元数的长度。这也被称为“范数”。

另请参阅 lengthSquared()、normalized() 和dotProduct()。

float QQuaternion::lengthSquared() const

返回四元数的长度平方。

注意:虽然 计算成本较低,但该函数容易发生溢出和下溢,而length() 在许多情况下可以避免这些问题。

另请参阅 length() 和dotProduct()。

[static] QQuaternion QQuaternion::nlerp(const QQuaternion &q1, const QQuaternion &q2, float t)

沿旋转位置q1 和q2 之间的最短线性路径进行插值。参数t 的值应在 0 到 1 之间,表示从q1 到q2 之间的移动距离。结果将由normalized() 返回。

如果t 小于或等于 0,则返回q1 。如果t 大于或等于 1,则返回q2 。

nlerp() 函数通常比slerp() 更快,并能提供球面插值的近似结果,对于某些应用而言已足够精确。

另请参阅 slerp()。

void QQuaternion::normalize()

就地对当前四元数进行归一化。如果该四元数为空四元数,或者其长度非常接近 1,则不会发生任何变化。

另请参阅 length() 和normalized()。

QQuaternion QQuaternion::normalized() const

返回该四元数的归一化单位形式。

如果该四元数为空,则返回空四元数。如果四元数的模值非常接近 1,则直接返回该四元数。否则,将返回模值为 1 的四元数的归一化形式。

另请参阅 normalize()、length() 和dotProduct()。

QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const

使用此四元数旋转向量vector ,以在3D空间中生成一个新向量。以下代码:

QVector3D result = q.rotatedVector(vector);

等同于以下代码:

QVector3D result = (q * QQuaternion(0, vector) * q.conjugated()).vector();

[static] QQuaternion QQuaternion::rotationTo(const QVector3D &from, const QVector3D &to)

返回一个最短弧四元数,用于将方向从向量from 所描述的方向旋转到向量to 所描述的方向。

另请参阅 fromDirection()。

[constexpr noexcept] float QQuaternion::scalar() const

返回该四元数的标量分量。

另请参阅 setScalar()、x()、y() 以及z()。

[constexpr noexcept] void QQuaternion::setScalar(float scalar)

将此四元数的标量分量设置为scalar 。

另请参阅 scalar()、setX()、setY() 以及setZ()。

[constexpr noexcept] void QQuaternion::setVector(const QVector3D &vector)

将该四元数的向量分量设置为vector 。

另请参阅 vector() 和setScalar()。

[constexpr noexcept] void QQuaternion::setVector(float x, float y, float z)

将该四元数的向量分量设置为 (x,y,z)。

另请参阅 vector() 和setScalar()。

[constexpr noexcept] void QQuaternion::setX(float x)

将此四元数向量的 x 坐标设置为给定的x 坐标。

另请参阅 x()、setY()、setZ() 以及setScalar()。

[constexpr noexcept] void QQuaternion::setY(float y)

将此四元数向量的 y 坐标设置为给定的y 坐标。

另请参阅 y()、setX()、setZ() 以及setScalar()。

[constexpr noexcept] void QQuaternion::setZ(float z)

将此四元数向量的 z 坐标设置为给定的z 坐标。

另请参阅 z()、setX()、setY() 以及setScalar()。

[static] QQuaternion QQuaternion::slerp(const QQuaternion &q1, const QQuaternion &q2, float t)

沿旋转位置q1 和q2 之间的最短球面路径进行插值。参数t 的值应在 0 到 1 之间,表示从q1 到q2 之间需行进的球面距离。

如果t 小于或等于 0,则返回q1 ;如果t 大于或等于 1,则返回q2 。

另请参阅 nlerp()。

[since 6.11] QQuaternion::Axes QQuaternion::toAxes() const

返回定义该四元数的三个正交规范坐标轴。

该函数在 Qt 6.11 中引入。

另请参阅 QQuaternion::Axes 、fromAxes (QQuaternion::Axes)以及toRotationMatrix ()。

QVector3D QQuaternion::toEulerAngles() const

计算与该四元数对应的横滚角、俯仰角和偏航角(单位为度)的欧拉角。

另请参阅 fromEulerAngles()。

QMatrix3x3 QQuaternion::toRotationMatrix() const

创建一个与该四元数对应的旋转矩阵。

注意:如果 该四元数未归一化,生成的旋转矩阵将包含缩放信息。

另请参阅 fromRotationMatrix() 和toAxes()。

[constexpr noexcept] QVector4D QQuaternion::toVector4D() const

将该四元数作为 4D 向量返回。

[constexpr noexcept] QVector3D QQuaternion::vector() const

返回该四元数的向量分量。

另请参阅 setVector() 和scalar()。

[constexpr noexcept] float QQuaternion::x() const

返回该四元数向量的 x 坐标。

另请参见 setX()、y()、z() 以及scalar()。

[constexpr noexcept] float QQuaternion::y() const

返回该四元数向量的 y 坐标。

另请参阅 setY()、x()、z() 以及scalar()。

[constexpr noexcept] float QQuaternion::z() const

返回该四元数向量的 z 坐标。

另请参阅 setZ()、x()、y() 以及scalar()。

QQuaternion::operator QVariant() const

将四元数作为QVariant 返回。

[constexpr noexcept] QQuaternion &QQuaternion::operator*=(const QQuaternion &quaternion)

将此四元数与quaternion 相乘,并返回对此四元数的引用。

[constexpr noexcept] QQuaternion &QQuaternion::operator*=(float factor)

将该四元数的各分量与给定的factor 相乘,并返回对该四元数的引用。

另请参阅 operator/=()。

[constexpr noexcept] QQuaternion &QQuaternion::operator+=(const QQuaternion &quaternion)

将给定的quaternion 添加到此四元数中,并返回对此四元数的引用。

另请参阅 operator-=()。

[constexpr noexcept] QQuaternion &QQuaternion::operator-=(const QQuaternion &quaternion)

从该四元数中减去给定的quaternion ,并返回该四元数的引用。

另请参阅 operator+=()。

[constexpr] QQuaternion &QQuaternion::operator/=(float divisor)

将该四元数的各分量除以给定的divisor ,并返回对该四元数的引用。

另请参阅 operator*=()。

相关非成员

[constexpr noexcept] bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2)

如果 `q1 ` 和 `q2 ` 相等(允许浮点数比较中存在微小的误差),则返回 `true `;否则返回 `false`。

[constexpr noexcept] bool operator!=(const QQuaternion &q1, const QQuaternion &q2)

如果 `q1 ` 不等于 `q2`,则返回 `true `;否则返回 `false`。该运算符使用精确浮点比较。

[constexpr noexcept] QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2)

使用四元数乘法对q1 和q2 进行乘法运算。结果相当于同时应用由q1 和q2 指定的两个旋转。

另请参阅 QQuaternion::operator*=()。

QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)

使用四元数quaternion 对向量vec 进行旋转,从而在三维空间中生成一个新的向量。

[constexpr noexcept] QQuaternion operator*(const QQuaternion &quaternion, float factor)

返回给定quaternion 的副本,并将其与给定的factor 相乘。

另请参阅 QQuaternion::operator*=()。

[constexpr noexcept] QQuaternion operator*(float factor, const QQuaternion &quaternion)

返回给定quaternion 的副本,并将其与给定的factor 相乘。

另请参阅 QQuaternion::operator*=()。

[constexpr noexcept] QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2)

返回一个QQuaternion 对象,该对象是给定的四元数q1 和q2 的和;每个分量分别相加。

另请参阅 QQuaternion::operator+=()。

[constexpr noexcept] QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2)

返回一个QQuaternion 对象,该对象由从q1 中减去q2 得到;每个分量分别进行减法运算。

另请参阅 QQuaternion::operator-=()。

[constexpr noexcept] QQuaternion operator-(const QQuaternion &quaternion)

返回一个QQuaternion 对象,该对象是通过将给定的quaternion 的三个分量全部改变符号而形成的。

等同于 `QQuaternion(0,0,0,0) - quaternion`。

这是一个重载函数。

[constexpr] QQuaternion operator/(const QQuaternion &quaternion, float divisor)

返回一个QQuaternion 对象,该对象由将给定的quaternion 的所有分量除以给定的divisor 后生成。

另请参阅 QQuaternion::operator/=()。

QDataStream &operator<<(QDataStream &stream, const QQuaternion &quaternion)

将给定的quaternion 写入给定的stream ,并返回该流的引用。

另请参阅 《Qt 数据类型的序列化》。

[constexpr noexcept] bool operator==(const QQuaternion &q1, const QQuaternion &q2)

如果 `q1 ` 等于 `q2`,则返回 `true `;否则返回 `false`。该运算符使用精确浮点比较。

QDataStream &operator>>(QDataStream &stream, QQuaternion &quaternion)

从给定的stream 读取一个四元数到给定的quaternion 中,并返回该流的引用。

另请参阅 《Qt数据类型的序列化》。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.