- java.lang.Object
-
- org.spongepowered.math.imaginary.Quaterniond
-
- All Implemented Interfaces:
Serializable
,Comparable<Quaterniond>
,Imaginaryd
@Immutable public final class Quaterniond extends Object implements Imaginaryd, Comparable<Quaterniond>, Serializable
Represent a quaternion of the formxi + yj + zk + w
.The x, y, z and w components are stored as
double
s. This class is immutable.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static Quaterniond
IDENTITY
An immutable identity (0, 0, 0, 1) quaternion.static Quaterniond
ZERO
An immutable identity (0, 0, 0, 0) quaternion.
-
Constructor Summary
Constructors Constructor Description Quaterniond(double x, double y, double z, double w)
Constructs a new quaternion from the double components.Quaterniond(float x, float y, float z, float w)
Constructs a new quaternion from the float components.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Quaterniond
add(double x, double y, double z, double w)
Adds the double components of another quaternion to this one.Quaterniond
add(float x, float y, float z, float w)
Adds the float components of another quaternion to this one.Quaterniond
add(Quaterniond q)
Adds another quaternion to this one.Vector3d
axesAnglesDeg()
Returns the angles in degrees around the x, y and z axes that correspond to the rotation represented by this quaternion.Vector3d
axesAnglesRad()
Returns the angles in radians around the x, y and z axes that correspond to the rotation represented by this quaternion.Vector3d
axis()
Returns the axis of rotation for this quaternion.int
compareTo(Quaterniond q)
Quaterniond
conjugate()
Conjugates the quaternion.Vector3d
direction()
Returns a unit vector representing the direction of this quaternion, which isVector3d.FORWARD
rotated by this quaternion.Quaterniond
div(double a)
Divides the components of this quaternion by a double scalar.Quaterniond
div(double x, double y, double z, double w)
Divides this quaternions by the double components of another one.Quaterniond
div(float a)
Divides the components of this quaternion by a float scalar.Quaterniond
div(float x, float y, float z, float w)
Divides this quaternions by the float components of another one.Quaterniond
div(Quaterniond q)
Divides this quaternions by another one.double
dot(double x, double y, double z, double w)
Returns the dot product of this quaternion with the double components of another one.double
dot(float x, float y, float z, float w)
Returns the dot product of this quaternion with the float components of another one.double
dot(Quaterniond q)
Returns the dot product of this quaternion with another one.boolean
equals(Object other)
static Quaterniond
from(double x, double y, double z, double w)
Creates a new quaternion from the double components.static Quaterniond
fromAngleDegAxis(double angle, double x, double y, double z)
Creates a new quaternion from the rotation double angle in degrees around the axis vector double components.static Quaterniond
fromAngleDegAxis(double angle, Vector3d axis)
Creates a new quaternion from the rotation double angle in degrees around the axis vector.static Quaterniond
fromAngleDegAxis(float angle, float x, float y, float z)
Creates a new quaternion from the rotation float angle in degrees around the axis vector float components.static Quaterniond
fromAngleDegAxis(float angle, Vector3d axis)
Creates a new quaternion from the rotation float angle in degrees around the axis vector.static Quaterniond
fromAngleRadAxis(double angle, double x, double y, double z)
Creates a new quaternion from the rotation double angle in radians around the axis vector double components.static Quaterniond
fromAngleRadAxis(double angle, Vector3d axis)
Creates a new quaternion from the rotation double angle in radians around the axis vector.static Quaterniond
fromAngleRadAxis(float angle, float x, float y, float z)
Creates a new quaternion from the rotation float angle in radians around the axis vector float components.static Quaterniond
fromAngleRadAxis(float angle, Vector3d axis)
Creates a new quaternion from the rotation float angle in radians around the axis vector.static Quaterniond
fromAxesAnglesDeg(double pitch, double yaw, double roll)
Creates a new quaternion from the double angles in degrees around the x, y and z axes.static Quaterniond
fromAxesAnglesDeg(float pitch, float yaw, float roll)
Creates a new quaternion from the float angles in degrees around the x, y and z axes.static Quaterniond
fromAxesAnglesRad(double pitch, double yaw, double roll)
Creates a new quaternion from the double angles in radians around the x, y and z axes.static Quaterniond
fromAxesAnglesRad(float pitch, float yaw, float roll)
Creates a new quaternion from the float angles in radians around the x, y and z axes.static Quaterniond
fromImaginary(double x, double y, double z)
Creates a new quaternion from the double imaginary components.static Quaterniond
fromReal(double w)
Creates a new quaternion from the double real component.static Quaterniond
fromRotationMatrix(Matrix3d matrix)
Creates a new quaternion from the rotation matrix.static Quaterniond
fromRotationTo(Vector3d from, Vector3d to)
Creates a new quaternion from the angle-axis rotation defined from the first to the second vector.int
hashCode()
Quaterniond
invert()
Inverts the quaternion.double
length()
Returns the length of this quaternion.double
lengthSquared()
Returns the square of the length of this quaternion.Quaterniond
mul(double a)
Multiplies the components of this quaternion by a double scalar.Quaterniond
mul(double x, double y, double z, double w)
Multiplies the double components of another quaternion with this one.Quaterniond
mul(float a)
Multiplies the components of this quaternion by a float scalar.Quaterniond
mul(float x, float y, float z, float w)
Multiplies the float components of another quaternion with this one.Quaterniond
mul(Quaterniond q)
Multiplies another quaternion with this one.Quaterniond
normalize()
Normalizes this quaternion.Vector3d
rotate(double x, double y, double z)
Rotates the double components of a vector by this quaternion.Vector3d
rotate(float x, float y, float z)
Rotates the float components of a vector by this quaternion.Vector3d
rotate(Vector3d v)
Rotates a vector by this quaternion.Quaterniond
sub(double x, double y, double z, double w)
Subtracts the double components of another quaternion from this one.Quaterniond
sub(float x, float y, float z, float w)
Subtracts the float components of another quaternion from this one.Quaterniond
sub(Quaterniond q)
Subtracts another quaternion from this one.Complexd
toComplex()
Converts this quaternion to a complex by extracting the rotation around the axis and returning it as a rotation in the plane perpendicular to the rotation axis.Quaterniond
toDouble()
Quaternionf
toFloat()
String
toString()
double
w()
Gets the w (real) component of this quaternion.double
x()
Gets the x (imaginary) component of this quaternion.double
y()
Gets the y (imaginary) component of this quaternion.double
z()
Gets the z (imaginary) component of this quaternion.
-
-
-
Field Detail
-
ZERO
public static final Quaterniond ZERO
An immutable identity (0, 0, 0, 0) quaternion.
-
IDENTITY
public static final Quaterniond IDENTITY
An immutable identity (0, 0, 0, 1) quaternion.
-
-
Constructor Detail
-
Quaterniond
public Quaterniond(float x, float y, float z, float w)
Constructs a new quaternion from the float components.- Parameters:
x
- The x (imaginary) componenty
- The y (imaginary) componentz
- The z (imaginary) componentw
- The w (real) component
-
Quaterniond
public Quaterniond(double x, double y, double z, double w)
Constructs a new quaternion from the double components.- Parameters:
x
- The x (imaginary) componenty
- The y (imaginary) componentz
- The z (imaginary) componentw
- The w (real) component
-
-
Method Detail
-
x
public double x()
Gets the x (imaginary) component of this quaternion.- Returns:
- The x (imaginary) component
-
y
public double y()
Gets the y (imaginary) component of this quaternion.- Returns:
- The y (imaginary) component
-
z
public double z()
Gets the z (imaginary) component of this quaternion.- Returns:
- The z (imaginary) component
-
w
public double w()
Gets the w (real) component of this quaternion.- Returns:
- The w (real) component
-
add
public Quaterniond add(Quaterniond q)
Adds another quaternion to this one.- Parameters:
q
- The quaternion to add- Returns:
- A new quaternion, which is the sum of both
-
add
public Quaterniond add(float x, float y, float z, float w)
Adds the float components of another quaternion to this one.- Parameters:
x
- The x (imaginary) component of the quaternion to addy
- The y (imaginary) component of the quaternion to addz
- The z (imaginary) component of the quaternion to addw
- The w (real) component of the quaternion to add- Returns:
- A new quaternion, which is the sum of both
-
add
public Quaterniond add(double x, double y, double z, double w)
Adds the double components of another quaternion to this one.- Parameters:
x
- The x (imaginary) component of the quaternion to addy
- The y (imaginary) component of the quaternion to addz
- The z (imaginary) component of the quaternion to addw
- The w (real) component of the quaternion to add- Returns:
- A new quaternion, which is the sum of both
-
sub
public Quaterniond sub(Quaterniond q)
Subtracts another quaternion from this one.- Parameters:
q
- The quaternion to subtract- Returns:
- A new quaternion, which is the difference of both
-
sub
public Quaterniond sub(float x, float y, float z, float w)
Subtracts the float components of another quaternion from this one.- Parameters:
x
- The x (imaginary) component of the quaternion to subtracty
- The y (imaginary) component of the quaternion to subtractz
- The z (imaginary) component of the quaternion to subtractw
- The w (real) component of the quaternion to subtract- Returns:
- A new quaternion, which is the difference of both
-
sub
public Quaterniond sub(double x, double y, double z, double w)
Subtracts the double components of another quaternion from this one.- Parameters:
x
- The x (imaginary) component of the quaternion to subtracty
- The y (imaginary) component of the quaternion to subtractz
- The z (imaginary) component of the quaternion to subtractw
- The w (real) component of the quaternion to subtract- Returns:
- A new quaternion, which is the difference of both
-
mul
public Quaterniond mul(float a)
Multiplies the components of this quaternion by a float scalar.- Parameters:
a
- The multiplication scalar- Returns:
- A new quaternion, which has each component multiplied by the scalar
-
mul
public Quaterniond mul(double a)
Multiplies the components of this quaternion by a double scalar.- Specified by:
mul
in interfaceImaginaryd
- Parameters:
a
- The multiplication scalar- Returns:
- A new quaternion, which has each component multiplied by the scalar
-
mul
public Quaterniond mul(Quaterniond q)
Multiplies another quaternion with this one.- Parameters:
q
- The quaternion to multiply with- Returns:
- A new quaternion, which is the product of both
-
mul
public Quaterniond mul(float x, float y, float z, float w)
Multiplies the float components of another quaternion with this one.- Parameters:
x
- The x (imaginary) component of the quaternion to multiply withy
- The y (imaginary) component of the quaternion to multiply withz
- The z (imaginary) component of the quaternion to multiply withw
- The w (real) component of the quaternion to multiply with- Returns:
- A new quaternion, which is the product of both
-
mul
public Quaterniond mul(double x, double y, double z, double w)
Multiplies the double components of another quaternion with this one.- Parameters:
x
- The x (imaginary) component of the quaternion to multiply withy
- The y (imaginary) component of the quaternion to multiply withz
- The z (imaginary) component of the quaternion to multiply withw
- The w (real) component of the quaternion to multiply with- Returns:
- A new quaternion, which is the product of both
-
div
public Quaterniond div(float a)
Divides the components of this quaternion by a float scalar.- Parameters:
a
- The division scalar- Returns:
- A new quaternion, which has each component divided by the scalar
-
div
public Quaterniond div(double a)
Divides the components of this quaternion by a double scalar.- Specified by:
div
in interfaceImaginaryd
- Parameters:
a
- The division scalar- Returns:
- A new quaternion, which has each component divided by the scalar
-
div
public Quaterniond div(Quaterniond q)
Divides this quaternions by another one.- Parameters:
q
- The quaternion to divide with- Returns:
- The quotient of the two quaternions
-
div
public Quaterniond div(float x, float y, float z, float w)
Divides this quaternions by the float components of another one.- Parameters:
x
- The x (imaginary) component of the quaternion to divide withy
- The y (imaginary) component of the quaternion to divide withz
- The z (imaginary) component of the quaternion to divide withw
- The w (real) component of the quaternion to divide with- Returns:
- The quotient of the two quaternions
-
div
public Quaterniond div(double x, double y, double z, double w)
Divides this quaternions by the double components of another one.- Parameters:
x
- The x (imaginary) component of the quaternion to divide withy
- The y (imaginary) component of the quaternion to divide withz
- The z (imaginary) component of the quaternion to divide withw
- The w (real) component of the quaternion to divide with- Returns:
- The quotient of the two quaternions
-
dot
public double dot(Quaterniond q)
Returns the dot product of this quaternion with another one.- Parameters:
q
- The quaternion to calculate the dot product with- Returns:
- The dot product of the two quaternions
-
dot
public double dot(float x, float y, float z, float w)
Returns the dot product of this quaternion with the float components of another one.- Parameters:
x
- The x (imaginary) component of the quaternion to calculate the dot product withy
- The y (imaginary) component of the quaternion to calculate the dot product withz
- The z (imaginary) component of the quaternion to calculate the dot product withw
- The w (real) component of the quaternion to calculate the dot product with- Returns:
- The dot product of the two quaternions
-
dot
public double dot(double x, double y, double z, double w)
Returns the dot product of this quaternion with the double components of another one.- Parameters:
x
- The x (imaginary) component of the quaternion to calculate the dot product withy
- The y (imaginary) component of the quaternion to calculate the dot product withz
- The z (imaginary) component of the quaternion to calculate the dot product withw
- The w (real) component of the quaternion to calculate the dot product with- Returns:
- The dot product of the two quaternions
-
rotate
public Vector3d rotate(Vector3d v)
Rotates a vector by this quaternion.- Parameters:
v
- The vector to rotate- Returns:
- The rotated vector
-
rotate
public Vector3d rotate(float x, float y, float z)
Rotates the float components of a vector by this quaternion.- Parameters:
x
- The x component of the vectory
- The y component of the vectorz
- The z component of the vector- Returns:
- The rotated vector
-
rotate
public Vector3d rotate(double x, double y, double z)
Rotates the double components of a vector by this quaternion.- Parameters:
x
- The x component of the vectory
- The y component of the vectorz
- The z component of the vector- Returns:
- The rotated vector
-
direction
public Vector3d direction()
Returns a unit vector representing the direction of this quaternion, which isVector3d.FORWARD
rotated by this quaternion.- Returns:
- The vector representing the direction this quaternion is pointing to
-
axis
public Vector3d axis()
Returns the axis of rotation for this quaternion.- Returns:
- The axis of rotation
-
axesAnglesDeg
public Vector3d axesAnglesDeg()
Returns the angles in degrees around the x, y and z axes that correspond to the rotation represented by this quaternion.- Returns:
- The angle in degrees for each axis, stored in a vector, in the corresponding component
-
axesAnglesRad
public Vector3d axesAnglesRad()
Returns the angles in radians around the x, y and z axes that correspond to the rotation represented by this quaternion.- Returns:
- The angle in radians for each axis, stored in a vector, in the corresponding component
-
conjugate
public Quaterniond conjugate()
Conjugates the quaternion.Conjugation of a quaternion
a
is an operation returning quaterniona'
such thata' * a = a * a' = |a|<sup>2</sup>
where|a|<sup>2</sup>
is squared length ofa
.- Specified by:
conjugate
in interfaceImaginaryd
- Returns:
- the conjugated quaternion
-
invert
public Quaterniond invert()
Inverts the quaternion.Inversion of a quaternion
a
returns quaterniona<sup>-1</sup> = a' / |a|<sup>2</sup>
wherea'
isconjugation
ofa
, and|a|<sup>2</sup>
is squared length ofa
.For any quaternions
a, b, c
such thata * b = c
, the equationsa<sup>-1</sup> * c = b
andc * b<sup>-1</sup> = a
are true.- Specified by:
invert
in interfaceImaginaryd
- Returns:
- the inverted quaternion
-
lengthSquared
public double lengthSquared()
Returns the square of the length of this quaternion.- Specified by:
lengthSquared
in interfaceImaginaryd
- Returns:
- The square of the length
-
length
public double length()
Returns the length of this quaternion.- Specified by:
length
in interfaceImaginaryd
- Returns:
- The length
-
normalize
public Quaterniond normalize()
Normalizes this quaternion.- Specified by:
normalize
in interfaceImaginaryd
- Returns:
- A new quaternion of unit length
-
toComplex
public Complexd toComplex()
Converts this quaternion to a complex by extracting the rotation around the axis and returning it as a rotation in the plane perpendicular to the rotation axis.- Returns:
- The rotation without the axis as a complex
-
toFloat
public Quaternionf toFloat()
- Specified by:
toFloat
in interfaceImaginaryd
-
toDouble
public Quaterniond toDouble()
- Specified by:
toDouble
in interfaceImaginaryd
-
compareTo
public int compareTo(Quaterniond q)
- Specified by:
compareTo
in interfaceComparable<Quaterniond>
-
fromReal
public static Quaterniond fromReal(double w)
Creates a new quaternion from the double real component.The
ZERO
constant is re-used whenw
is 0.- Parameters:
w
- The w (real) component- Returns:
- The quaternion created from the double real component
-
fromImaginary
public static Quaterniond fromImaginary(double x, double y, double z)
Creates a new quaternion from the double imaginary components.The
ZERO
constant is re-used whenx
,y
, andz
are 0.- Parameters:
x
- The x (imaginary) componenty
- The y (imaginary) componentz
- The z (imaginary) component- Returns:
- The quaternion created from the double imaginary components
-
from
public static Quaterniond from(double x, double y, double z, double w)
Creates a new quaternion from the double components.The
ZERO
constant is re-used whenx
,y
,z
, andw
are 0.- Parameters:
x
- The x (imaginary) componenty
- The y (imaginary) componentz
- The z (imaginary) componentw
- The w (real) component- Returns:
- The quaternion created from the double components
-
fromAxesAnglesDeg
public static Quaterniond fromAxesAnglesDeg(float pitch, float yaw, float roll)
Creates a new quaternion from the float angles in degrees around the x, y and z axes.- Parameters:
pitch
- The rotation around xyaw
- The rotation around yroll
- The rotation around z- Returns:
- The quaternion defined by the rotations around the axes
-
fromAxesAnglesRad
public static Quaterniond fromAxesAnglesRad(float pitch, float yaw, float roll)
Creates a new quaternion from the float angles in radians around the x, y and z axes.- Parameters:
pitch
- The rotation around xyaw
- The rotation around yroll
- The rotation around z- Returns:
- The quaternion defined by the rotations around the axes
-
fromAxesAnglesDeg
public static Quaterniond fromAxesAnglesDeg(double pitch, double yaw, double roll)
Creates a new quaternion from the double angles in degrees around the x, y and z axes.- Parameters:
pitch
- The rotation around xyaw
- The rotation around yroll
- The rotation around z- Returns:
- The quaternion defined by the rotations around the axes
-
fromAxesAnglesRad
public static Quaterniond fromAxesAnglesRad(double pitch, double yaw, double roll)
Creates a new quaternion from the double angles in radians around the x, y and z axes.- Parameters:
pitch
- The rotation around xyaw
- The rotation around yroll
- The rotation around z- Returns:
- The quaternion defined by the rotations around the axes
-
fromRotationTo
public static Quaterniond fromRotationTo(Vector3d from, Vector3d to)
Creates a new quaternion from the angle-axis rotation defined from the first to the second vector.- Parameters:
from
- The first vectorto
- The second vector- Returns:
- The quaternion defined by the angle-axis rotation between the vectors
-
fromAngleDegAxis
public static Quaterniond fromAngleDegAxis(float angle, Vector3d axis)
Creates a new quaternion from the rotation float angle in degrees around the axis vector.- Parameters:
angle
- The rotation angle in degreesaxis
- The axis of rotation- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleRadAxis
public static Quaterniond fromAngleRadAxis(float angle, Vector3d axis)
Creates a new quaternion from the rotation float angle in radians around the axis vector.- Parameters:
angle
- The rotation angle in radiansaxis
- The axis of rotation- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleDegAxis
public static Quaterniond fromAngleDegAxis(double angle, Vector3d axis)
Creates a new quaternion from the rotation double angle in degrees around the axis vector.- Parameters:
angle
- The rotation angle in degreesaxis
- The axis of rotation- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleRadAxis
public static Quaterniond fromAngleRadAxis(double angle, Vector3d axis)
Creates a new quaternion from the rotation double angle in radians around the axis vector.- Parameters:
angle
- The rotation angle in radiansaxis
- The axis of rotation- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleDegAxis
public static Quaterniond fromAngleDegAxis(float angle, float x, float y, float z)
Creates a new quaternion from the rotation float angle in degrees around the axis vector float components.- Parameters:
angle
- The rotation angle in degreesx
- The x component of the axis vectory
- The y component of the axis vectorz
- The z component of the axis vector- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleRadAxis
public static Quaterniond fromAngleRadAxis(float angle, float x, float y, float z)
Creates a new quaternion from the rotation float angle in radians around the axis vector float components.- Parameters:
angle
- The rotation angle in radiansx
- The x component of the axis vectory
- The y component of the axis vectorz
- The z component of the axis vector- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleDegAxis
public static Quaterniond fromAngleDegAxis(double angle, double x, double y, double z)
Creates a new quaternion from the rotation double angle in degrees around the axis vector double components.- Parameters:
angle
- The rotation angle in degreesx
- The x component of the axis vectory
- The y component of the axis vectorz
- The z component of the axis vector- Returns:
- The quaternion defined by the rotation around the axis
-
fromAngleRadAxis
public static Quaterniond fromAngleRadAxis(double angle, double x, double y, double z)
Creates a new quaternion from the rotation double angle in radians around the axis vector double components.- Parameters:
angle
- The rotation angle in radiansx
- The x component of the axis vectory
- The y component of the axis vectorz
- The z component of the axis vector- Returns:
- The quaternion defined by the rotation around the axis
-
fromRotationMatrix
public static Quaterniond fromRotationMatrix(Matrix3d matrix)
Creates a new quaternion from the rotation matrix. The matrix will be interpreted as a rotation matrix even if it is not.- Parameters:
matrix
- The rotation matrix- Returns:
- The quaternion defined by the rotation matrix
-
-