Qt Reference Documentation

# QQuaternion Class Reference

The QQuaternion class represents a quaternion consisting of a vector and scalar. More...

     #include <QQuaternion>

This class was introduced in Qt 4.6.

- List of all members, including inherited members

## Public Functions

| QQuaternion ()
| QQuaternion ( qreal scalar, qreal xpos, qreal ypos, qreal zpos )
| QQuaternion ( qreal scalar, const QVector3D & vector )
| QQuaternion ( const QVector4D & vector )
QQuaternion | conjugate () const
bool | isIdentity () const
bool | isNull () const
qreal | length () const
qreal | lengthSquared () const
void | normalize ()
QQuaternion | normalized () const
QVector3D | rotatedVector ( const QVector3D & vector ) const
qreal | scalar () const
void | setScalar ( qreal scalar )
void | setVector ( const QVector3D & vector )
void | setVector ( qreal x, qreal y, qreal z )
void | setX ( qreal x )
void | setY ( qreal y )
void | setZ ( qreal z )
QVector4D | toVector4D () const
QVector3D | vector () const
qreal | x () const
qreal | y () const
qreal | z () const
| operator QVariant () const
QQuaternion & | operator*= ( qreal factor )
QQuaternion & | operator*= ( const QQuaternion & quaternion )
QQuaternion & | operator+= ( const QQuaternion & quaternion )
QQuaternion & | operator-= ( const QQuaternion & quaternion )
QQuaternion & | operator/= ( qreal divisor )

## Static Public Members

QQuaternion | fromAxisAndAngle ( const QVector3D & axis, qreal angle )
QQuaternion | fromAxisAndAngle ( qreal x, qreal y, qreal z, qreal angle )
QQuaternion | nlerp ( const QQuaternion & q1, const QQuaternion & q2, qreal t )
QQuaternion | slerp ( const QQuaternion & q1, const QQuaternion & q2, qreal t )

## Related Non-Members

bool | qFuzzyCompare ( const QQuaternion & q1, const QQuaternion & q2 )
bool | operator!= ( const QQuaternion & q1, const QQuaternion & q2 )
const QQuaternion | operator* ( const QQuaternion & q1, const QQuaternion & q2 )
const QQuaternion | operator* ( qreal factor, const QQuaternion & quaternion )
const QQuaternion | operator* ( const QQuaternion & quaternion, qreal factor )
const QQuaternion | operator+ ( const QQuaternion & q1, const QQuaternion & q2 )
const QQuaternion | operator- ( const QQuaternion & q1, const QQuaternion & q2 )
const QQuaternion | operator- ( const QQuaternion & quaternion )
const QQuaternion | operator/ ( const QQuaternion & quaternion, qreal divisor )
QDataStream & | operator<< ( QDataStream & stream, const QQuaternion & quaternion )
bool | operator== ( const QQuaternion & q1, const QQuaternion & q2 )
QDataStream & | operator>> ( QDataStream & stream, QQuaternion & quaternion )
QDataStream & | operator>> ( QDataStream & stream, QEasingCurve & easing )

## Detailed Description

The QQuaternion class represents a quaternion consisting of a vector and scalar.

Quaternions are used to represent rotations in 3D space, and consist of a 3D rotation axis specified by the x, y, and z coordinates, and a scalar representing the rotation angle.

## Member Function Documentation

### QQuaternion::QQuaternion ()

Constructs an identity quaternion, i.e. with coordinates (1, 0, 0, 0).

### QQuaternion::QQuaternion ( qreal scalar, qreal xpos, qreal ypos, qreal zpos )

Constructs a quaternion with the vector (xpos, ypos, zpos) and scalar.

### QQuaternion::QQuaternion ( qreal scalar, const QVector3D & vector )

Constructs a quaternion vector from the specified vector and scalar.

See also vector() and scalar().

### QQuaternion::QQuaternion ( const QVector4D & vector )

Constructs a quaternion from the components of vector.

### QQuaternion QQuaternion::conjugate () const

Returns the conjugate of this quaternion, which is (-x, -y, -z, scalar).

### QQuaternion QQuaternion::fromAxisAndAngle ( const QVector3D & axis, qreal angle )`[static]`

Creates a normalized quaternion that corresponds to rotating through angle degrees about the specified 3D axis.

### QQuaternion QQuaternion::fromAxisAndAngle ( qreal x, qreal y, qreal z, qreal angle )`[static]`

Creates a normalized quaternion that corresponds to rotating through angle degrees about the 3D axis (x, y, z).

### bool QQuaternion::isIdentity () const

Returns true if the x, y, and z components of this quaternion are set to 0.0, and the scalar component is set to 1.0; otherwise returns false.

### bool QQuaternion::isNull () const

Returns true if the x, y, z, and scalar components of this quaternion are set to 0.0; otherwise returns false.

### qreal QQuaternion::length () const

Returns the length of the quaternion. This is also called the "norm".

See also lengthSquared() and normalized().

### qreal QQuaternion::lengthSquared () const

Returns the squared length of the quaternion.

See also length().

### QQuaternion QQuaternion::nlerp ( const QQuaternion & q1, const QQuaternion & q2, qreal t )`[static]`

Interpolates along the shortest linear path between the rotational positions q1 and q2. The value t should be between 0 and 1, indicating the distance to travel between q1 and q2. The result will be normalized().

If t is less than or equal to 0, then q1 will be returned. If t is greater than or equal to 1, then q2 will be returned.

The nlerp() function is typically faster than slerp() and will give approximate results to spherical interpolation that are good enough for some applications.

See also slerp().

### void QQuaternion::normalize ()

Normalizes the currect quaternion in place. Nothing happens if this is a null quaternion or the length of the quaternion is very close to 1.

See also length() and normalized().

### QQuaternion QQuaternion::normalized () const

Returns the normalized unit form of this quaternion.

If this quaternion is null, then a null quaternion is returned. If the length of the quaternion is very close to 1, then the quaternion will be returned as-is. Otherwise the normalized form of the quaternion of length 1 will be returned.

See also length() and normalize().

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

Rotates vector with this quaternion to produce a new vector in 3D space. The following code:

     QVector3D result = q.rotatedVector(vector);

is equivalent to the following:

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

### qreal QQuaternion::scalar () const

Returns the scalar component of this quaternion.

See also setScalar(), x(), y(), and z().

### void QQuaternion::setScalar ( qreal scalar )

Sets the scalar component of this quaternion to scalar.

See also scalar(), setX(), setY(), and setZ().

### void QQuaternion::setVector ( const QVector3D & vector )

Sets the vector component of this quaternion to vector.

See also vector() and setScalar().

### void QQuaternion::setVector ( qreal x, qreal y, qreal z )

Sets the vector component of this quaternion to (x, y, z).

See also vector() and setScalar().

### void QQuaternion::setX ( qreal x )

Sets the x coordinate of this quaternion's vector to the given x coordinate.

See also x(), setY(), setZ(), and setScalar().

### void QQuaternion::setY ( qreal y )

Sets the y coordinate of this quaternion's vector to the given y coordinate.

See also y(), setX(), setZ(), and setScalar().

### void QQuaternion::setZ ( qreal z )

Sets the z coordinate of this quaternion's vector to the given z coordinate.

See also z(), setX(), setY(), and setScalar().

### QQuaternion QQuaternion::slerp ( const QQuaternion & q1, const QQuaternion & q2, qreal t )`[static]`

Interpolates along the shortest spherical path between the rotational positions q1 and q2. The value t should be between 0 and 1, indicating the spherical distance to travel between q1 and q2.

If t is less than or equal to 0, then q1 will be returned. If t is greater than or equal to 1, then q2 will be returned.

See also nlerp().

### QVector4D QQuaternion::toVector4D () const

Returns this quaternion as a 4D vector.

### QVector3D QQuaternion::vector () const

Returns the vector component of this quaternion.

See also setVector() and scalar().

### qreal QQuaternion::x () const

Returns the x coordinate of this quaternion's vector.

See also setX(), y(), z(), and scalar().

### qreal QQuaternion::y () const

Returns the y coordinate of this quaternion's vector.

See also setY(), x(), z(), and scalar().

### qreal QQuaternion::z () const

Returns the z coordinate of this quaternion's vector.

See also setZ(), x(), y(), and scalar().

### QQuaternion::operator QVariant () const

Returns the quaternion as a QVariant.

### QQuaternion & QQuaternion::operator*= ( qreal factor )

Multiplies this quaternion's components by the given factor, and returns a reference to this quaternion.

See also operator/=().

### QQuaternion & QQuaternion::operator*= ( const QQuaternion & quaternion )

Multiplies this quaternion by quaternion and returns a reference to this quaternion.

### QQuaternion & QQuaternion::operator+= ( const QQuaternion & quaternion )

Adds the given quaternion to this quaternion and returns a reference to this quaternion.

See also operator-=().

### QQuaternion & QQuaternion::operator-= ( const QQuaternion & quaternion )

Subtracts the given quaternion from this quaternion and returns a reference to this quaternion.

See also operator+=().

### QQuaternion & QQuaternion::operator/= ( qreal divisor )

Divides this quaternion's components by the given divisor, and returns a reference to this quaternion.

See also operator*=().

## Related Non-Members

### bool qFuzzyCompare ( const QQuaternion & q1, const QQuaternion & q2 )

Returns true if q1 and q2 are equal, allowing for a small fuzziness factor for floating-point comparisons; false otherwise.

### bool operator!= ( const QQuaternion & q1, const QQuaternion & q2 )

Returns true if q1 is not equal to q2; otherwise returns false. This operator uses an exact floating-point comparison.

### const QQuaternion operator* ( const QQuaternion & q1, const QQuaternion & q2 )

Multiplies q1 and q2 using quaternion multiplication. The result corresponds to applying both of the rotations specified by q1 and q2.

See also QQuaternion::operator*=().

### const QQuaternion operator* ( qreal factor, const QQuaternion & quaternion )

Returns a copy of the given quaternion, multiplied by the given factor.

See also QQuaternion::operator*=().

### const QQuaternion operator* ( const QQuaternion & quaternion, qreal factor )

Returns a copy of the given quaternion, multiplied by the given factor.

See also QQuaternion::operator*=().

### const QQuaternion operator+ ( const QQuaternion & q1, const QQuaternion & q2 )

Returns a QQuaternion object that is the sum of the given quaternions, q1 and q2; each component is added separately.

See also QQuaternion::operator+=().

### const QQuaternion operator- ( const QQuaternion & q1, const QQuaternion & q2 )

Returns a QQuaternion object that is formed by subtracting q2 from q1; each component is subtracted separately.

See also QQuaternion::operator-=().

### const QQuaternion operator- ( const QQuaternion & quaternion )

This is an overloaded function.

Returns a QQuaternion object that is formed by changing the sign of all three components of the given quaternion.

Equivalent to `QQuaternion(0,0,0,0) - quaternion`.

### const QQuaternion operator/ ( const QQuaternion & quaternion, qreal divisor )

Returns the QQuaternion object formed by dividing all components of the given quaternion by the given divisor.

See also QQuaternion::operator/=().

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

Writes the given quaternion to the given stream and returns a reference to the stream.

See also Serializing Qt Data Types.

### bool operator== ( const QQuaternion & q1, const QQuaternion & q2 )

Returns true if q1 is equal to q2; otherwise returns false. This operator uses an exact floating-point comparison.

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

Reads a quaternion from the given stream into the given quaternion and returns a reference to the stream.

See also Serializing Qt Data Types.

### QDataStream & operator>> ( QDataStream & stream, QEasingCurve & easing )

Reads an easing curve from the given stream into the given easing curve and returns a reference to the stream.

See also Serializing Qt Data Types.