com.badlogic.gdx.math
Class Quaternion

java.lang.Object
  extended by com.badlogic.gdx.math.Quaternion
All Implemented Interfaces:
Serializable

public class Quaternion
extends Object
implements Serializable

A simple quaternion class.

Author:
[email protected], vesuvio, xoppa
See Also:
http://en.wikipedia.org/wiki/Quaternion, Serialized Form

Field Summary
 float w
           
 float x
           
 float y
           
 float z
           
 
Constructor Summary
Quaternion()
           
Quaternion(float x, float y, float z, float w)
          Constructor, sets the four components of the quaternion.
Quaternion(Quaternion quaternion)
          Constructor, sets the quaternion components from the given quaternion.
Quaternion(Vector3 axis, float angle)
          Constructor, sets the quaternion from the given axis vector and the angle around that axis in degrees.
 
Method Summary
 Quaternion conjugate()
          Conjugate the quaternion.
 Quaternion cpy()
           
 float dot(float x, float y, float z, float w)
          Get the dot product between this and the other quaternion (commutative).
static float dot(float x1, float y1, float z1, float w1, float x2, float y2, float z2, float w2)
          Get the dot product between the two quaternions (commutative).
 float dot(Quaternion other)
          Get the dot product between this and the other quaternion (commutative).
 boolean equals(Object obj)
           
 float getAngle()
          Get the angle in degrees of the rotation this quaternion represents.
 float getAngleAround(float axisX, float axisY, float axisZ)
          Get the angle in degrees of the rotation around the specified axis.
 float getAngleAround(Vector3 axis)
          Get the angle in degrees of the rotation around the specified axis.
 float getAngleAroundRad(float axisX, float axisY, float axisZ)
          Get the angle in radians of the rotation around the specified axis.
 float getAngleAroundRad(Vector3 axis)
          Get the angle in radians of the rotation around the specified axis.
 float getAngleRad()
          Get the angle in radians of the rotation this quaternion represents.
 float getAxisAngle(Vector3 axis)
          Get the axis angle representation of the rotation in degrees.
 float getAxisAngleRad(Vector3 axis)
          Get the axis-angle representation of the rotation in radians.
 int getGimbalPole()
          Get the pole of the gimbal lock, if any.
 float getPitch()
          Get the pitch euler angle in degrees, which is the rotation around the x axis.
 float getPitchRad()
          Get the pitch euler angle in radians, which is the rotation around the x axis.
 float getRoll()
          Get the roll euler angle in degrees, which is the rotation around the z axis.
 float getRollRad()
          Get the roll euler angle in radians, which is the rotation around the z axis.
 void getSwingTwist(float axisX, float axisY, float axisZ, Quaternion swing, Quaternion twist)
          Get the swing rotation and twist rotation for the specified axis.
 void getSwingTwist(Vector3 axis, Quaternion swing, Quaternion twist)
          Get the swing rotation and twist rotation for the specified axis.
 float getYaw()
          Get the yaw euler angle in degrees, which is the rotation around the y axis.
 float getYawRad()
          Get the yaw euler angle in radians, which is the rotation around the y axis.
 int hashCode()
           
 Quaternion idt()
          Sets the quaternion to an identity Quaternion
 boolean isIdentity()
           
 boolean isIdentity(float tolerance)
           
 float len()
           
static float len(float x, float y, float z, float w)
           
 float len2()
           
static float len2(float x, float y, float z, float w)
           
 Quaternion mul(float scalar)
          Multiplies the components of this quaternion with the given scalar.
 Quaternion mul(float x, float y, float z, float w)
          Multiplies this quaternion with another one in the form of this = this * other
 Quaternion mul(Quaternion other)
          Multiplies this quaternion with another one in the form of this = this * other
 Quaternion mulLeft(float x, float y, float z, float w)
          Multiplies this quaternion with another one in the form of this = other * this
 Quaternion mulLeft(Quaternion other)
          Multiplies this quaternion with another one in the form of this = other * this
 Quaternion nor()
          Normalizes this quaternion to unit length
 Quaternion set(float x, float y, float z, float w)
          Sets the components of the quaternion
 Quaternion set(Quaternion quaternion)
          Sets the quaternion components from the given quaternion.
 Quaternion set(Vector3 axis, float angle)
          Sets the quaternion components from the given axis and angle around that axis.
 Quaternion setEulerAngles(float yaw, float pitch, float roll)
          Sets the quaternion to the given euler angles in degrees.
 Quaternion setEulerAnglesRad(float yaw, float pitch, float roll)
          Sets the quaternion to the given euler angles in radians.
 Quaternion setFromAxes(boolean normalizeAxes, float xx, float xy, float xz, float yx, float yy, float yz, float zx, float zy, float zz)
           Sets the Quaternion from the given x-, y- and z-axis.
 Quaternion setFromAxes(float xx, float xy, float xz, float yx, float yy, float yz, float zx, float zy, float zz)
           Sets the Quaternion from the given x-, y- and z-axis which have to be orthonormal.
 Quaternion setFromAxis(float x, float y, float z, float degrees)
          Sets the quaternion components from the given axis and angle around that axis.
 Quaternion setFromAxis(Vector3 axis, float degrees)
          Sets the quaternion components from the given axis and angle around that axis.
 Quaternion setFromAxisRad(float x, float y, float z, float radians)
          Sets the quaternion components from the given axis and angle around that axis.
 Quaternion setFromAxisRad(Vector3 axis, float radians)
          Sets the quaternion components from the given axis and angle around that axis.
 Quaternion setFromCross(float x1, float y1, float z1, float x2, float y2, float z2)
          Set this quaternion to the rotation between two vectors.
 Quaternion setFromCross(Vector3 v1, Vector3 v2)
          Set this quaternion to the rotation between two vectors.
 Quaternion setFromMatrix(boolean normalizeAxes, Matrix3 matrix)
          Sets the Quaternion from the given matrix, optionally removing any scaling.
 Quaternion setFromMatrix(boolean normalizeAxes, Matrix4 matrix)
          Sets the Quaternion from the given matrix, optionally removing any scaling.
 Quaternion setFromMatrix(Matrix3 matrix)
          Sets the Quaternion from the given rotation matrix, which must not contain scaling.
 Quaternion setFromMatrix(Matrix4 matrix)
          Sets the Quaternion from the given rotation matrix, which must not contain scaling.
 Quaternion slerp(Quaternion end, float alpha)
          Spherical linear interpolation between this quaternion and the other quaternion, based on the alpha value in the range [0,1].
 void toMatrix(float[] matrix)
          Fills a 4x4 matrix with the rotation matrix represented by this quaternion.
 String toString()
           
 Vector3 transform(Vector3 v)
          Transforms the given vector using this quaternion
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

x

public float x

y

public float y

z

public float z

w

public float w
Constructor Detail

Quaternion

public Quaternion(float x,
                  float y,
                  float z,
                  float w)
Constructor, sets the four components of the quaternion.

Parameters:
x - The x-component
y - The y-component
z - The z-component
w - The w-component

Quaternion

public Quaternion()

Quaternion

public Quaternion(Quaternion quaternion)
Constructor, sets the quaternion components from the given quaternion.

Parameters:
quaternion - The quaternion to copy.

Quaternion

public Quaternion(Vector3 axis,
                  float angle)
Constructor, sets the quaternion from the given axis vector and the angle around that axis in degrees.

Parameters:
axis - The axis
angle - The angle in degrees.
Method Detail

set

public Quaternion set(float x,
                      float y,
                      float z,
                      float w)
Sets the components of the quaternion

Parameters:
x - The x-component
y - The y-component
z - The z-component
w - The w-component
Returns:
This quaternion for chaining

set

public Quaternion set(Quaternion quaternion)
Sets the quaternion components from the given quaternion.

Parameters:
quaternion - The quaternion.
Returns:
This quaternion for chaining.

set

public Quaternion set(Vector3 axis,
                      float angle)
Sets the quaternion components from the given axis and angle around that axis.

Parameters:
axis - The axis
angle - The angle in degrees
Returns:
This quaternion for chaining.

cpy

public Quaternion cpy()
Returns:
a copy of this quaternion

len

public static final float len(float x,
                              float y,
                              float z,
                              float w)
Returns:
the euclidian length of the specified quaternion

len

public float len()
Returns:
the euclidian length of this quaternion

toString

public String toString()
Overrides:
toString in class Object

setEulerAngles

public Quaternion setEulerAngles(float yaw,
                                 float pitch,
                                 float roll)
Sets the quaternion to the given euler angles in degrees.

Parameters:
yaw - the rotation around the y axis in degrees
pitch - the rotation around the x axis in degrees
roll - the rotation around the z axis degrees
Returns:
this quaternion

setEulerAnglesRad

public Quaternion setEulerAnglesRad(float yaw,
                                    float pitch,
                                    float roll)
Sets the quaternion to the given euler angles in radians.

Parameters:
yaw - the rotation around the y axis in radians
pitch - the rotation around the x axis in radians
roll - the rotation around the z axis in radians
Returns:
this quaternion

getGimbalPole

public int getGimbalPole()
Get the pole of the gimbal lock, if any.

Returns:
positive (+1) for north pole, negative (-1) for south pole, zero (0) when no gimbal lock

getRollRad

public float getRollRad()
Get the roll euler angle in radians, which is the rotation around the z axis. Requires that this quaternion is normalized.

Returns:
the rotation around the z axis in radians (between -PI and +PI)

getRoll

public float getRoll()
Get the roll euler angle in degrees, which is the rotation around the z axis. Requires that this quaternion is normalized.

Returns:
the rotation around the z axis in degrees (between -180 and +180)

getPitchRad

public float getPitchRad()
Get the pitch euler angle in radians, which is the rotation around the x axis. Requires that this quaternion is normalized.

Returns:
the rotation around the x axis in radians (between -(PI/2) and +(PI/2))

getPitch

public float getPitch()
Get the pitch euler angle in degrees, which is the rotation around the x axis. Requires that this quaternion is normalized.

Returns:
the rotation around the x axis in degrees (between -90 and +90)

getYawRad

public float getYawRad()
Get the yaw euler angle in radians, which is the rotation around the y axis. Requires that this quaternion is normalized.

Returns:
the rotation around the y axis in radians (between -PI and +PI)

getYaw

public float getYaw()
Get the yaw euler angle in degrees, which is the rotation around the y axis. Requires that this quaternion is normalized.

Returns:
the rotation around the y axis in degrees (between -180 and +180)

len2

public static final float len2(float x,
                               float y,
                               float z,
                               float w)

len2

public float len2()
Returns:
the length of this quaternion without square root

nor

public Quaternion nor()
Normalizes this quaternion to unit length

Returns:
the quaternion for chaining

conjugate

public Quaternion conjugate()
Conjugate the quaternion.

Returns:
This quaternion for chaining

transform

public Vector3 transform(Vector3 v)
Transforms the given vector using this quaternion

Parameters:
v - Vector to transform

mul

public Quaternion mul(Quaternion other)
Multiplies this quaternion with another one in the form of this = this * other

Parameters:
other - Quaternion to multiply with
Returns:
This quaternion for chaining

mul

public Quaternion mul(float x,
                      float y,
                      float z,
                      float w)
Multiplies this quaternion with another one in the form of this = this * other

Parameters:
x - the x component of the other quaternion to multiply with
y - the y component of the other quaternion to multiply with
z - the z component of the other quaternion to multiply with
w - the w component of the other quaternion to multiply with
Returns:
This quaternion for chaining

mulLeft

public Quaternion mulLeft(Quaternion other)
Multiplies this quaternion with another one in the form of this = other * this

Parameters:
other - Quaternion to multiply with
Returns:
This quaternion for chaining

mulLeft

public Quaternion mulLeft(float x,
                          float y,
                          float z,
                          float w)
Multiplies this quaternion with another one in the form of this = other * this

Parameters:
x - the x component of the other quaternion to multiply with
y - the y component of the other quaternion to multiply with
z - the z component of the other quaternion to multiply with
w - the w component of the other quaternion to multiply with
Returns:
This quaternion for chaining

toMatrix

public void toMatrix(float[] matrix)
Fills a 4x4 matrix with the rotation matrix represented by this quaternion.

Parameters:
matrix - Matrix to fill

idt

public Quaternion idt()
Sets the quaternion to an identity Quaternion

Returns:
this quaternion for chaining

isIdentity

public boolean isIdentity()
Returns:
If this quaternion is an identity Quaternion

isIdentity

public boolean isIdentity(float tolerance)
Returns:
If this quaternion is an identity Quaternion

setFromAxis

public Quaternion setFromAxis(Vector3 axis,
                              float degrees)
Sets the quaternion components from the given axis and angle around that axis.

Parameters:
axis - The axis
degrees - The angle in degrees
Returns:
This quaternion for chaining.

setFromAxisRad

public Quaternion setFromAxisRad(Vector3 axis,
                                 float radians)
Sets the quaternion components from the given axis and angle around that axis.

Parameters:
axis - The axis
radians - The angle in radians
Returns:
This quaternion for chaining.

setFromAxis

public Quaternion setFromAxis(float x,
                              float y,
                              float z,
                              float degrees)
Sets the quaternion components from the given axis and angle around that axis.

Parameters:
x - X direction of the axis
y - Y direction of the axis
z - Z direction of the axis
degrees - The angle in degrees
Returns:
This quaternion for chaining.

setFromAxisRad

public Quaternion setFromAxisRad(float x,
                                 float y,
                                 float z,
                                 float radians)
Sets the quaternion components from the given axis and angle around that axis.

Parameters:
x - X direction of the axis
y - Y direction of the axis
z - Z direction of the axis
radians - The angle in radians
Returns:
This quaternion for chaining.

setFromMatrix

public Quaternion setFromMatrix(boolean normalizeAxes,
                                Matrix4 matrix)
Sets the Quaternion from the given matrix, optionally removing any scaling.


setFromMatrix

public Quaternion setFromMatrix(Matrix4 matrix)
Sets the Quaternion from the given rotation matrix, which must not contain scaling.


setFromMatrix

public Quaternion setFromMatrix(boolean normalizeAxes,
                                Matrix3 matrix)
Sets the Quaternion from the given matrix, optionally removing any scaling.


setFromMatrix

public Quaternion setFromMatrix(Matrix3 matrix)
Sets the Quaternion from the given rotation matrix, which must not contain scaling.


setFromAxes

public Quaternion setFromAxes(float xx,
                              float xy,
                              float xz,
                              float yx,
                              float yy,
                              float yz,
                              float zx,
                              float zy,
                              float zz)

Sets the Quaternion from the given x-, y- and z-axis which have to be orthonormal.

Taken from Bones framework for JPCT, see http://www.aptalkarga.com/bones/ which in turn took it from Graphics Gem code at ftp://ftp.cis.upenn.edu/pub/graphics/shoemake/quatut.ps.Z.

Parameters:
xx - x-axis x-coordinate
xy - x-axis y-coordinate
xz - x-axis z-coordinate
yx - y-axis x-coordinate
yy - y-axis y-coordinate
yz - y-axis z-coordinate
zx - z-axis x-coordinate
zy - z-axis y-coordinate
zz - z-axis z-coordinate

setFromAxes

public Quaternion setFromAxes(boolean normalizeAxes,
                              float xx,
                              float xy,
                              float xz,
                              float yx,
                              float yy,
                              float yz,
                              float zx,
                              float zy,
                              float zz)

Sets the Quaternion from the given x-, y- and z-axis.

Taken from Bones framework for JPCT, see http://www.aptalkarga.com/bones/ which in turn took it from Graphics Gem code at ftp://ftp.cis.upenn.edu/pub/graphics/shoemake/quatut.ps.Z.

Parameters:
normalizeAxes - whether to normalize the axes (necessary when they contain scaling)
xx - x-axis x-coordinate
xy - x-axis y-coordinate
xz - x-axis z-coordinate
yx - y-axis x-coordinate
yy - y-axis y-coordinate
yz - y-axis z-coordinate
zx - z-axis x-coordinate
zy - z-axis y-coordinate
zz - z-axis z-coordinate

setFromCross

public Quaternion setFromCross(Vector3 v1,
                               Vector3 v2)
Set this quaternion to the rotation between two vectors.

Parameters:
v1 - The base vector, which should be normalized.
v2 - The target vector, which should be normalized.
Returns:
This quaternion for chaining

setFromCross

public Quaternion setFromCross(float x1,
                               float y1,
                               float z1,
                               float x2,
                               float y2,
                               float z2)
Set this quaternion to the rotation between two vectors.

Parameters:
x1 - The base vectors x value, which should be normalized.
y1 - The base vectors y value, which should be normalized.
z1 - The base vectors z value, which should be normalized.
x2 - The target vector x value, which should be normalized.
y2 - The target vector y value, which should be normalized.
z2 - The target vector z value, which should be normalized.
Returns:
This quaternion for chaining

slerp

public Quaternion slerp(Quaternion end,
                        float alpha)
Spherical linear interpolation between this quaternion and the other quaternion, based on the alpha value in the range [0,1]. Taken from. Taken from Bones framework for JPCT, see http://www.aptalkarga.com/bones/

Parameters:
end - the end quaternion
alpha - alpha in the range [0,1]
Returns:
this quaternion for chaining

hashCode

public int hashCode()
Overrides:
hashCode in class Object

equals

public boolean equals(Object obj)
Overrides:
equals in class Object

dot

public static final float dot(float x1,
                              float y1,
                              float z1,
                              float w1,
                              float x2,
                              float y2,
                              float z2,
                              float w2)
Get the dot product between the two quaternions (commutative).

Parameters:
x1 - the x component of the first quaternion
y1 - the y component of the first quaternion
z1 - the z component of the first quaternion
w1 - the w component of the first quaternion
x2 - the x component of the second quaternion
y2 - the y component of the second quaternion
z2 - the z component of the second quaternion
w2 - the w component of the second quaternion
Returns:
the dot product between the first and second quaternion.

dot

public float dot(Quaternion other)
Get the dot product between this and the other quaternion (commutative).

Parameters:
other - the other quaternion.
Returns:
the dot product of this and the other quaternion.

dot

public float dot(float x,
                 float y,
                 float z,
                 float w)
Get the dot product between this and the other quaternion (commutative).

Parameters:
x - the x component of the other quaternion
y - the y component of the other quaternion
z - the z component of the other quaternion
w - the w component of the other quaternion
Returns:
the dot product of this and the other quaternion.

mul

public Quaternion mul(float scalar)
Multiplies the components of this quaternion with the given scalar.

Parameters:
scalar - the scalar.
Returns:
this quaternion for chaining.

getAxisAngle

public float getAxisAngle(Vector3 axis)
Get the axis angle representation of the rotation in degrees. The supplied vector will receive the axis (x, y and z values) of the rotation and the value returned is the angle in degrees around that axis. Note that this method will alter the supplied vector, the existing value of the vector is ignored.

This will normalize this quaternion if needed. The received axis is a unit vector. However, if this is an identity quaternion (no rotation), then the length of the axis may be zero.

Parameters:
axis - vector which will receive the axis
Returns:
the angle in degrees
See Also:
wikipedia, calculation

getAxisAngleRad

public float getAxisAngleRad(Vector3 axis)
Get the axis-angle representation of the rotation in radians. The supplied vector will receive the axis (x, y and z values) of the rotation and the value returned is the angle in radians around that axis. Note that this method will alter the supplied vector, the existing value of the vector is ignored.

This will normalize this quaternion if needed. The received axis is a unit vector. However, if this is an identity quaternion (no rotation), then the length of the axis may be zero.

Parameters:
axis - vector which will receive the axis
Returns:
the angle in radians
See Also:
wikipedia, calculation

getAngleRad

public float getAngleRad()
Get the angle in radians of the rotation this quaternion represents. Does not normalize the quaternion. Use getAxisAngleRad(Vector3) to get both the axis and the angle of this rotation. Use getAngleAroundRad(Vector3) to get the angle around a specific axis.

Returns:
the angle in radians of the rotation

getAngle

public float getAngle()
Get the angle in degrees of the rotation this quaternion represents. Use getAxisAngle(Vector3) to get both the axis and the angle of this rotation. Use getAngleAround(Vector3) to get the angle around a specific axis.

Returns:
the angle in degrees of the rotation

getSwingTwist

public void getSwingTwist(float axisX,
                          float axisY,
                          float axisZ,
                          Quaternion swing,
                          Quaternion twist)
Get the swing rotation and twist rotation for the specified axis. The twist rotation represents the rotation around the specified axis. The swing rotation represents the rotation of the specified axis itself, which is the rotation around an axis perpendicular to the specified axis.

The swing and twist rotation can be used to reconstruct the original quaternion: this = swing * twist

Parameters:
axisX - the X component of the normalized axis for which to get the swing and twist rotation
axisY - the Y component of the normalized axis for which to get the swing and twist rotation
axisZ - the Z component of the normalized axis for which to get the swing and twist rotation
swing - will receive the swing rotation: the rotation around an axis perpendicular to the specified axis
twist - will receive the twist rotation: the rotation around the specified axis
See Also:
calculation

getSwingTwist

public void getSwingTwist(Vector3 axis,
                          Quaternion swing,
                          Quaternion twist)
Get the swing rotation and twist rotation for the specified axis. The twist rotation represents the rotation around the specified axis. The swing rotation represents the rotation of the specified axis itself, which is the rotation around an axis perpendicular to the specified axis.

The swing and twist rotation can be used to reconstruct the original quaternion: this = swing * twist

Parameters:
axis - the normalized axis for which to get the swing and twist rotation
swing - will receive the swing rotation: the rotation around an axis perpendicular to the specified axis
twist - will receive the twist rotation: the rotation around the specified axis
See Also:
calculation

getAngleAroundRad

public float getAngleAroundRad(float axisX,
                               float axisY,
                               float axisZ)
Get the angle in radians of the rotation around the specified axis. The axis must be normalized.

Parameters:
axisX - the x component of the normalized axis for which to get the angle
axisY - the y component of the normalized axis for which to get the angle
axisZ - the z component of the normalized axis for which to get the angle
Returns:
the angle in radians of the rotation around the specified axis

getAngleAroundRad

public float getAngleAroundRad(Vector3 axis)
Get the angle in radians of the rotation around the specified axis. The axis must be normalized.

Parameters:
axis - the normalized axis for which to get the angle
Returns:
the angle in radians of the rotation around the specified axis

getAngleAround

public float getAngleAround(float axisX,
                            float axisY,
                            float axisZ)
Get the angle in degrees of the rotation around the specified axis. The axis must be normalized.

Parameters:
axisX - the x component of the normalized axis for which to get the angle
axisY - the y component of the normalized axis for which to get the angle
axisZ - the z component of the normalized axis for which to get the angle
Returns:
the angle in degrees of the rotation around the specified axis

getAngleAround

public float getAngleAround(Vector3 axis)
Get the angle in degrees of the rotation around the specified axis. The axis must be normalized.

Parameters:
axis - the normalized axis for which to get the angle
Returns:
the angle in degrees of the rotation around the specified axis


Copyright © 2014. All Rights Reserved.