En esta página

QQuaternion Class

La clase QQuaternion representa un cuaternión formado por un vector y un escalar. Más...

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

Tipos Públicos

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

Funciones Públicas

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)

Miembros públicos estáticos

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

Descripción Detallada

Los cuaterniones se utilizan para representar rotaciones en el espacio 3D, y consisten en un eje de rotación 3D especificado por las coordenadas x, y, z, y un escalar que representa el ángulo de rotación.

Documentación de funciones

[constexpr noexcept] QQuaternion::QQuaternion()

Construye un cuaternión identidad (1, 0, 0, 0), es decir, con el vector (0, 0, 0) y el escalar 1.

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

Construye un cuaternión a partir de los componentes de vector.

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

Construye un vector cuaternión a partir de los datos especificados vector y scalar.

Véase también vector() y scalar().

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

Construye un cuaternión con el vector (xpos, ypos, zpos) y scalar.

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

Devuelve el conjugado de este cuaternión, que es (-x, -y, -z, escalar).

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

Devuelve el producto punto de q1 y q2.

Véase también length().

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

Devuelve los ángulos de Euler (en grados) que corresponden a este cuaternión.

Esta función se introdujo en Qt 6.11.

Véase también fromEulerAngles().

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

Construye el cuaternión utilizando los ejes contenidos en axes.

Nota: Se asume que los ejes son ortonormales.

Esta función se introdujo en Qt 6.11.

Véase también toAxes() y fromRotationMatrix().

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

Se trata de una función sobrecargada.

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

Crea un cuaternión normalizado que corresponde a la rotación a través de angle grados sobre el 3D especificado axis.

Véase también getAxisAndAngle().

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

Crea un cuaternión normalizado que corresponde a la rotación de angle grados sobre el eje 3D (x, y, z).

Véase también getAxisAndAngle().

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

Construye el cuaternión utilizando la dirección hacia delante especificada direction y la dirección hacia arriba up. Si no se especifica la dirección hacia arriba o los vectores hacia delante y hacia arriba son colineales, se generará una nueva dirección hacia arriba ortonormal.

Véase también fromAxes() y rotationTo().

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

Crea un cuaternión que corresponde a una rotación de roll grados alrededor del eje z, pitch grados alrededor del eje x, y yaw grados alrededor del eje y (en ese orden).

Ver también eulerAngles(), toEulerAngles(), y fromEulerAngles(QQuaternion::EulerAngles<float>).

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

Equivalente a

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

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.11.

Véase también eulerAngles(), toEulerAngles(), y fromEulerAngles().

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

Crea un cuaternión que corresponde a una rotación de angles: ángulos.z() grados alrededor del eje z, ángulos.x() grados alrededor del eje x, y ángulos.y() grados alrededor del eje y (en ese orden).

Se trata de una función sobrecargada.

Véase también toEulerAngles().

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

Crea un cuaternión que corresponde a la matriz de rotación rot3x3.

Nota: Si la matriz de rotación dada no está normalizada, el cuaternión resultante contendrá información de escala.

Véase también toRotationMatrix() y fromAxes().

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

Extrae un eje 3D (x, y, z) y un ángulo de rotación angle (en grados) que corresponde a este cuaternión.

Todos los punteros x, y, z, y angle deben ser válidos, nonullptr, de lo contrario el comportamiento es indefinido.

Véase también fromAxisAndAngle().

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

Extrae un eje 3D axis y un ángulo de rotación angle (en grados) que corresponde a este cuaternión.

Tanto axis como angle deben ser punteros válidos, nonullptr, de lo contrario el comportamiento es indefinido.

Se trata de una función sobrecargada.

Véase también fromAxisAndAngle().

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

Devuelve la inversa de este cuaternión. Si este quaternion es nulo, se devuelve un quaternion nulo.

Véase también isNull() y length().

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

Devuelve true si los componentes x, y, y z de este cuaternión se establecen en 0,0, y el componente escalar se establece en 1,0; de lo contrario devuelve false.

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

Devuelve true si los componentes x, y, z y escalar de este cuaternión son 0,0; en caso contrario, devuelve false.

float QQuaternion::length() const

Devuelve la longitud del cuaternión. También se denomina "norma".

Véase también lengthSquared(), normalized() y dotProduct().

float QQuaternion::lengthSquared() const

Devuelve la longitud al cuadrado del cuaternión.

Nota: Aunque es barato de calcular, es susceptible a desbordamientos y subdesbordamientos que length() evita en muchos casos.

Véase también length() y dotProduct().

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

Interpola a lo largo del camino lineal más corto entre las posiciones rotacionales q1 y q2. El valor t debe estar entre 0 y 1, indicando la distancia a recorrer entre q1 y q2. El resultado será normalized().

Si t es menor o igual que 0, se devolverá q1. Si t es mayor o igual que 1, entonces se devolverá q2.

La función nlerp() es típicamente más rápida que slerp() y dará resultados aproximados a la interpolación esférica que son suficientemente buenos para algunas aplicaciones.

Véase también slerp().

void QQuaternion::normalize()

Normaliza el cuaternión actual en su lugar. No ocurre nada si se trata de un cuaternión nulo o si la longitud del cuaternión es muy cercana a 1.

Véase también length() y normalized().

QQuaternion QQuaternion::normalized() const

Devuelve la forma unitaria normalizada de este cuaternión.

Si este cuaternión es nulo, se devuelve un cuaternión nulo. Si la longitud del cuaternión es muy cercana a 1, entonces se devolverá el cuaternión tal cual. En caso contrario, se devolverá la forma normalizada del cuaternión de longitud 1.

Véase también normalize(), length() y dotProduct().

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

Rota vector con este cuaternión para producir un nuevo vector en el espacio 3D. El siguiente código

QVector3D result = q.rotatedVector(vector);

es equivalente al siguiente:

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

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

Devuelve el cuaternión de arco más corto para rotar desde la dirección descrita por el vector from a la dirección descrita por el vector to.

Véase también fromDirection().

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

Devuelve el componente escalar de este cuaternión.

Véase también setScalar(), x(), y() y z().

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

Establece el componente escalar de este cuaternión en scalar.

Véase también scalar(), setX(), setY() y setZ().

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

Establece el componente vectorial de este cuaternión en vector.

Véase también vector() y setScalar().

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

Establece el componente vectorial de este cuaternión en (x, y, z).

Véase también vector() y setScalar().

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

Establece la coordenada x del vector de este cuaternión en la coordenada x dada.

Véase también x(), setY(), setZ() y setScalar().

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

Establece la coordenada y del vector de este cuaternión en la coordenada y dada.

Véase también y(), setX(), setZ() y setScalar().

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

Establece la coordenada z del vector de este cuaternión en la coordenada z dada.

Véase también z(), setX(), setY() y setScalar().

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

Interpola a lo largo de la trayectoria esférica más corta entre las posiciones rotacionales q1 y q2. El valor t debe estar entre 0 y 1, indicando la distancia esférica a recorrer entre q1 y q2.

Si t es menor o igual que 0, entonces se devolverá q1. Si t es mayor o igual que 1, entonces se devolverá q2.

Véase también nlerp().

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

Devuelve los tres ejes ortonormales que definen este cuaternión.

Esta función se introdujo en Qt 6.11.

Véase también QQuaternion::Axes, fromAxes(QQuaternion::Axes), y toRotationMatrix().

QVector3D QQuaternion::toEulerAngles() const

Calcula los ángulos de Euler de balanceo, cabeceo y guiñada (en grados) que corresponden a este cuaternión.

Véase también fromEulerAngles().

QMatrix3x3 QQuaternion::toRotationMatrix() const

Crea una matriz de rotación que corresponde a este cuaternión.

Nota: Si este cuaternión no está normalizado, la matriz de rotación resultante contendrá información de escalado.

Véase también fromRotationMatrix() y toAxes().

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

Devuelve este cuaternión como un vector 4D.

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

Devuelve el componente vectorial de este cuaternión.

Véase también setVector() y scalar().

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

Devuelve la coordenada x del vector de este cuaternión.

Véase también setX(), y(), z() y scalar().

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

Devuelve la coordenada y del vector de este cuaternión.

Véase también setY(), x(), z() y scalar().

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

Devuelve la coordenada z del vector de este cuaternión.

Véase también setZ(), x(), y() y scalar().

QQuaternion::operator QVariant() const

Devuelve el cuaternión como QVariant.

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

Multiplica este quaternion por quaternion y devuelve una referencia a este quaternion.

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

Multiplica los componentes de este cuaternión por el valor dado factor, y devuelve una referencia a este cuaternión.

Véase también operator/=().

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

Añade el quaternion dado a este quaternion y devuelve una referencia a este quaternion.

Véase también operator-=().

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

Resta el quaternion dado de este quaternion y devuelve una referencia a este quaternion.

Véase también operator+=().

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

Divide los componentes de este cuaternión entre divisor y devuelve una referencia a este cuaternión.

Véase también operator*=().

No miembros relacionados

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

Devuelve true si q1 y q2 son iguales, permitiendo un pequeño factor de imprecisión para comparaciones de punto flotante; falso en caso contrario.

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

Devuelve true si q1 no es igual a q2; en caso contrario devuelve false. Este operador utiliza una comparación exacta en coma flotante.

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

Multiplica q1 y q2 utilizando la multiplicación de cuaterniones. El resultado corresponde a la aplicación de las dos rotaciones especificadas por q1 y q2.

Véase también QQuaternion::operator*=().

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

Rota un vector vec con un cuaternión quaternion para producir un nuevo vector en el espacio 3D.

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

Devuelve una copia de quaternion, multiplicada por factor.

Véase también QQuaternion::operator*=().

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

Devuelve una copia de quaternion, multiplicada por factor.

Véase también QQuaternion::operator*=().

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

Devuelve un objeto QQuaternion que es la suma de los cuaterniones dados, q1 y q2; cada componente se suma por separado.

Véase también QQuaternion::operator+=().

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

Devuelve un objeto QQuaternion que se forma cambiando el signo de los tres componentes del quaternion dado.

Equivalente a QQuaternion(0,0,0,0) - quaternion.

Se trata de una función sobrecargada.

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

Devuelve un objeto QQuaternion que se forma restando q2 de q1; cada componente se resta por separado.

Véase también QQuaternion::operator-=().

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

Devuelve el objeto QQuaternion formado dividiendo todos los componentes del quaternion dado por el divisor dado.

Véase también QQuaternion::operator/=().

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

Escribe el quaternion dado en el stream dado y devuelve una referencia al flujo.

Véase también Serializar tipos de datos Qt.

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

Devuelve true si q1 es igual a q2; en caso contrario devuelve false. Este operador utiliza una comparación exacta en coma flotante.

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

Lee un quaternion del stream dado al quaternion dado y devuelve una referencia al flujo.

Véase también Serializar tipos de datos 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.