QQuaternion 类
QQuaternion 类表示一个四元数,由一个向量和一个标量组成。 更多...
| 头文件 | #include <QQuaternion> | 
| CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) | 
| qmake | QT += gui | 
- 所有成员列表,包括继承的成员
- QQuaternion 是 3D 渲染的一部分。 3D 渲染.
公开函数
| QQuaternion() | |
| QQuaternion(float scalar, float xpos, float ypos, float zpos) | |
| QQuaternion(float scalar, const QVector3D &vector) | |
| QQuaternion(const QVector4D &vector) | |
| 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*=(float factor) | 
| QQuaternion & | operator*=(const QQuaternion &quaternion) | 
| 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*(float factor, const QQuaternion &quaternion) | 
| QQuaternion | operator*(const QQuaternion &quaternion, float factor) | 
| QQuaternion | operator*(const QQuaternion &q1, const QQuaternion &q2) | 
| QVector3D | operator*(const QQuaternion &quaternion, const QVector3D &vec) | 
| 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) | 
成员函数文档
[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)
从指定的向量(向量)和标量(标量)构建四元数向量。
[显式 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)
返回 q1 和 q2 的点积。
另请参阅 length()。
[static] QQuaternion QQuaternion::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
使用三个轴(xAxis、yAxis、zAxis)构建四元数。
注意: 假设这些轴是正交归一的。
另请参阅 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)
创建一个归一化的四元数,它对应于在三维轴 (x、y、z) 上旋转 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。
注意: 如果给定的旋转矩阵未归一化,则结果四元数将包含缩放信息。
另请参阅 toRotationMatrix 和 fromAxes。
void QQuaternion::getAxes(QVector3D * xAxis, QVector3D * yAxis, QVector3D * zAxis) const
返回定义四元数的 3 个正交归一轴(《i xAxis》、《i yAxis》、《i zAxis》)。
另请参阅 fromAxes 和 toRotationMatrix。
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)
沿着旋转位置 q1 和 q2 之间的最短线性路径进行插值。值 t 应在 0 到 1 之间,表示在 q1 和 q2 之间 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.
[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()。
[静态] 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 坐标。
[constexpr noexcept] float QQuaternion::y() const
返回此四元数的矢量 y 坐标。
[constexpr noexcept] float QQuaternion::z() const
返回此四元数的矢量 z 坐标。
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)
如果 q1 和 q2 相等,则返回 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)
使用四元数乘法相乘 q1 和 q2。结果对应于应用由 q1 和 q2 指定的两个旋转。
另请参阅QQuaternion::operator*=()。
QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec)
使用四元数 quaternion 旋转向量 vec,以在 3D 空间中产生一个新向量。
[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)
返回通过将给定 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. 的商标。所有其他商标均为其各自所有者的财产。