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. 的商标。所有其他商标均为其各自所有者的财产。