QQuaternion 类

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

头文件 #include <QQuaternion>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公开函数

QQuaternion()
QQuaternion(float scalar, float xpos, float ypos, float zpos)
QQuaternion(float scalar, const QVector3D &vector)
QQuaternion(const QVector4D &vector)
QQuaternionconjugated() const
voidgetAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const
voidgetAxisAndAngle(float *x, float *y, float *z, float *angle) const
voidgetAxisAndAngle(QVector3D *axis, float *angle) const
voidgetEulerAngles(float *pitch, float *yaw, float *roll) const
QQuaternioninverted() const
boolisIdentity() const
boolisNull() const
floatlength() const
floatlengthSquared() const
voidnormalize()
QQuaternionnormalized() const
QVector3DrotatedVector(const QVector3D &vector) const
floatscalar() const
voidsetScalar(float scalar)
voidsetVector(const QVector3D &vector)
voidsetVector(float x, float y, float z)
voidsetX(float x)
voidsetY(float y)
voidsetZ(float z)
QVector3DtoEulerAngles() const
QMatrix3x3toRotationMatrix() const
QVector4DtoVector4D() const
QVector3Dvector() const
floatx() const
floaty() const
floatz() const
QVariantoperator QVariant() const
QQuaternion &operator*=(float factor)
QQuaternion &operator*=(const QQuaternion &quaternion)
QQuaternion &operator+=(const QQuaternion &quaternion)
QQuaternion &operator-=(const QQuaternion &quaternion)
QQuaternion &operator/=(float divisor)

静态公共成员

floatdotProduct(const QQuaternion &q1, const QQuaternion &q2)
QQuaternionfromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
QQuaternionfromAxisAndAngle(const QVector3D &axis, float angle)
QQuaternionfromAxisAndAngle(float x, float y, float z, float angle)
QQuaternionfromDirection(const QVector3D &direction, const QVector3D &up)
QQuaternionfromEulerAngles(float pitch, float yaw, float roll)
QQuaternionfromEulerAngles(const QVector3D &eulerAngles)
QQuaternionfromRotationMatrix(const QMatrix3x3 &rot3x3)
QQuaternionnlerp(const QQuaternion &q1, const QQuaternion &q2, float t)
QQuaternionrotationTo(const QVector3D &from, const QVector3D &to)
QQuaternionslerp(const QQuaternion &q1, const QQuaternion &q2, float t)
boolqFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2)
booloperator!=(const QQuaternion &q1, const QQuaternion &q2)
QQuaternionoperator*(float factor, const QQuaternion &quaternion)
QQuaternionoperator*(const QQuaternion &quaternion, float factor)
QQuaternionoperator*(const QQuaternion &q1, const QQuaternion &q2)
QVector3Doperator*(const QQuaternion &quaternion, const QVector3D &vec)
QQuaternionoperator+(const QQuaternion &q1, const QQuaternion &q2)
QQuaternionoperator-(const QQuaternion &q1, const QQuaternion &q2)
QQuaternionoperator-(const QQuaternion &quaternion)
QQuaternionoperator/(const QQuaternion &quaternion, float divisor)
QDataStream &operator<<(QDataStream &stream, const QQuaternion &quaternion)
booloperator==(const QQuaternion &q1, const QQuaternion &q2)
QDataStream &operator>>(QDataStream &stream, QQuaternion &quaternion)

详细描述

四元数用于表示3D空间中的旋转,包括由x、y、z坐标指定的3D旋转轴和一个表示旋转角度的标量。

成员函数文档

[constexpr noexcept] QQuaternion::QQuaternion()

构造一个单位四元数(1, 0, 0, 0),即向量(0, 0, 0)和标量1。

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

构造一个具有向量(xpos, ypos, zpos)和标量的四元数。

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

从指定的向量(向量)和标量(标量)构建四元数向量。

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

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

从向量成分构建四元数。

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

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

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

返回 q1q2 的点积。

另请参阅 length()。

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

使用三个轴(xAxisyAxiszAxis)构建四元数。

注意: 假设这些轴是正交归一的。

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

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

创建一个归一化的四元数,它对应于在指定的三维 axis 上旋转 angle 度。

另请参阅 getAxisAndAngle()。

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

创建一个归一化的四元数,它对应于在三维轴 (xyz) 上旋转 angle 度。

另请参阅 getAxisAndAngle()。

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

使用指定的前进方向 direction 和向上方向 up 构建四元数。如果没有指定向上方向或前进向量与向上向量共线,则将生成一个新正交归一的上向方向。

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

[静态] QQuaternion QQuaternion::fromEulerAngles(float pitches , float yaws , float rolls )

创建一个四元数,它对应于绕 z 轴旋转 rolls 度,绕 x 轴旋转 pitches 度,以及绕 y 轴旋转 yaws 度(按此顺序)。

另请参阅 getEulerAngles

[静态] QQuaternion QQuaternion::fromEulerAngles(const QVector3D & eulerAngles )

这是一个重载函数。

创建一个四元数,它对应于绕 z 轴旋转 eulerAngles.z() 度,绕 x 轴旋转 eulerAngles.x() 度,以及绕 y 轴旋转 eulerAngles.y() 度(按此顺序)。

另请参阅 toEulerAngles

[静态] QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 & rot3x3 )

创建一个四元数,它对应于旋转矩阵 rot3x3

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

另请参阅 toRotationMatrixfromAxes

void QQuaternion::getAxes(QVector3D * xAxis, QVector3D * yAxis, QVector3D * zAxis) const

返回定义四元数的 3 个正交归一轴(《i xAxis》、《i yAxis》、《i zAxis》)。

另请参阅 fromAxestoRotationMatrix

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

提取与该四元数对应的 3D 轴(《x》、《y》、《z》)和旋转角《i angle》(以度为单位)。

另请参阅 fromAxisAndAngle

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

这是一个重载函数。

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

另请参阅 fromAxisAndAngle

void QQuaternion::getEulerAngles(float * pitch, float * yaw, float * roll) const

计算与该四元数对应的 roll、pitch 和 yaw 欧拉角(以度为单位)。

另请参阅 fromEulerAngles

[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)

沿着旋转位置 q1q2 之间的最短线性路径进行插值。值 t 应在 0 到 1 之间,表示在 q1q2 之间 travel 的距离。结果是 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 并在三维空间中生成一个新的向量。以下代码等效于以下代码

QVector3D result = q.rotatedVector(vector);

是等效的

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

[静态] 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()。

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

在旋转位置 q1q2 之间的最短球路径上插值。值 t 应在 0 和 1 之间,表示 q1q2 之间的球面距离。

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

另请参阅 nlerp

QVector3D QQuaternion::toEulerAngles() const

这是一个重载函数。

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

另请参阅 fromEulerAngles

QMatrix3x3 QQuaternion::toRotationMatrix() const

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

注意:如果这个四元数没有规范化,最终的旋转矩阵将包含缩放信息。

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

[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

QVariant QQuaternion::operator QVariant() const

将四元数作为 QVariant 返回。

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

将此四元数的组件乘以给定的 factor,并返回对此四元数的引用。

另请参阅operator/=()。

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

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

[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)

如果 q1q2 相等,则返回 true,允许浮点比较中有小量的模糊因素;否则返回 false。

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

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

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

返回给定 quaternion 的一个副本,乘以给定的 factor

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

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

返回给定 quaternion 的一个副本,乘以给定的 factor

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

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

使用四元数乘法相乘 q1q2。结果对应于应用由 q1q2 指定的两个旋转。

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

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

使用四元数 quaternion 旋转向量 vec,以在 3D 空间中产生一个新向量。

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

返回一个 QQuaternion 对象,它是所给四元数 q1q2 的和;每个分量分别相加。

参见 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)

返回通过将给定 quaternion 的所有分量除以给定 divisor 形成的 QQuaternion 对象。

参见 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数据类型序列化

© 2024 The Qt Company Ltd. 此处包含的文档贡献的版权属于各自的拥有者。提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt及其相关标志是芬兰及其它国家和地区The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。