QQuaternion Class
QQ 四元数类表示由向量和标量组成的四元数。更多
头文件: | #include <QQuaternion> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 所有成员(包括继承成员)的列表
- QQuaternion 是3D 渲染的一部分。
公共函数
QQuaternion() | |
QQuaternion(const QVector4D &vector) | |
QQuaternion(float scalar, const QVector3D &vector) | |
QQuaternion(float scalar, float xpos, float ypos, float zpos) | |
QQuaternion | conjugated() const |
void | getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const |
void | getAxisAndAngle(float *x, float *y, float *z, float *angle) const |
void | getAxisAndAngle(QVector3D *axis, float *angle) const |
void | getEulerAngles(float *pitch, float *yaw, float *roll) 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) |
QVector3D | toEulerAngles() const |
QMatrix3x3 | toRotationMatrix() const |
QVector4D | toVector4D() const |
QVector3D | vector() const |
float | x() const |
float | y() const |
float | z() const |
QVariant | 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) |
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) |
QQuaternion | fromEulerAngles(const QVector3D &eulerAngles) |
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 &quaternion) |
QQuaternion | operator-(const QQuaternion &q1, const QQuaternion &q2) |
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) |
成员函数文档
[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 构建四元数向量。
[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().
[static]
QQuaternion QQuaternion::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
使用 3 个轴 (xAxis,yAxis,zAxis) 构建四元数。
注: 假设轴是正交的。
另请参见 getAxes() 和fromRotationMatrix() 。
[static]
QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle)
创建一个归一化四元数,对应于围绕指定 3Daxis 旋转angle 度。
另请参阅 getAxisAndAngle().
[static]
QQuaternion QQuaternion::fromAxisAndAngle(float x, float y, float z, float angle)
创建一个归一化四元数,对应于围绕三维轴旋转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 度(依次类推)。
另请参阅 getEulerAngles().
[static]
QQuaternion QQuaternion::fromEulerAngles(const QVector3D &eulerAngles)
这是一个重载函数。
创建一个四元数,对应于eulerAngles 的旋转:绕 Z 轴旋转 eulerAngles.z() 度,绕 X 轴旋转 eulerAngles.x() 度,绕 Y 轴旋转 eulerAngles.y() 度(依次类推)。
另请参阅 toEulerAngles() 。
[static]
QQuaternion QQuaternion::fromRotationMatrix(const QMatrix3x3 &rot3x3)
创建与旋转矩阵rot3x3 相对应的四元数。
注: 如果给定的旋转矩阵未进行归一化处理,生成的四元数将包含缩放信息。
另请参阅 toRotationMatrix() 和fromAxes() 。
void QQuaternion::getAxes(QVector3D *xAxis, QVector3D *yAxis, QVector3D *zAxis) const
返回定义四元数的 3 个正交轴 (xAxis,yAxis,zAxis)。
另请参阅 fromAxes() 和toRotationMatrix() 。
void QQuaternion::getAxisAndAngle(float *x, float *y, float *z, float *angle) const
提取三维轴 (x,y,z) 和与此四元数相对应的旋转角度angle (单位:度)。
另请参见 fromAxisAndAngle().
void QQuaternion::getAxisAndAngle(QVector3D *axis, float *angle) const
这是一个重载函数。
提取与该四元数相对应的三维轴axis 和旋转角度angle (单位:度)。
另请参见 fromAxisAndAngle().
void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const
计算与此四元数对应的roll,pitch, 和yaw 欧拉角(以度为单位)。
另请参见 fromEulerAngles().
[constexpr noexcept]
QQuaternion QQuaternion::inverted() const
返回此四元数的逆值。如果此四元数为空,则返回一个空四元数。
[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 ,在三维空间中生成一个新的矢量。以下代码
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 。
[constexpr noexcept]
void QQuaternion::setVector(float x, float y, float z)
将此四元数的矢量分量设置为 (x,y,z)。
[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() 。
QVector3D QQuaternion::toEulerAngles() const
这是一个重载函数。
计算与此四元数相对应的滚转、俯仰和偏航欧拉角(以度为单位)。
另请参见 fromEulerAngles().
QMatrix3x3 QQuaternion::toRotationMatrix() const
创建与此四元数相对应的旋转矩阵。
注意: 如果此四元数未进行归一化处理,生成的旋转矩阵将包含缩放信息。
另请参阅 fromRotationMatrix() 和getAxes()。
[constexpr noexcept]
QVector4D QQuaternion::toVector4D() const
将此四元数作为 4D 向量返回。
[constexpr noexcept]
QVector3D QQuaternion::vector() const
返回此四元数的矢量分量。
[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*=(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 &quaternion)
这是一个重载函数。
返回QQuaternion 对象,该对象是通过改变给定quaternion 的所有三个分量的符号形成的。
等价于QQuaternion(0,0,0,0) - quaternion
。
[constexpr noexcept]
QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2)
返回一个QQuaternion 对象,该对象由q2 与q1 相减而得,每个部分分别相减。
另请参阅 QQuaternion::operator-=().
[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 数据类型。
© 2025 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.