- java.lang.Object
-
- org.spongepowered.math.imaginary.Quaternionf
-
- All Implemented Interfaces:
Serializable,Comparable<Quaternionf>,Imaginaryf
@Immutable public final class Quaternionf extends Object implements Imaginaryf, Comparable<Quaternionf>, Serializable
Represent a quaternion of the formxi + yj + zk + w.The x, y, z and w components are stored as
floats. This class is immutable.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static QuaternionfIDENTITYAn immutable identity (0, 0, 0, 1) quaternion.static QuaternionfZEROAn immutable identity (0, 0, 0, 0) quaternion.
-
Constructor Summary
Constructors Constructor Description Quaternionf(double x, double y, double z, double w)Constructs a new quaternion from the double components.Quaternionf(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 Quaternionfadd(double x, double y, double z, double w)Adds the double components of another quaternion to this one.Quaternionfadd(float x, float y, float z, float w)Adds the float components of another quaternion to this one.Quaternionfadd(Quaternionf q)Adds another quaternion to this one.Vector3faxesAnglesDeg()Returns the angles in degrees around the x, y and z axes that correspond to the rotation represented by this quaternion.Vector3faxesAnglesRad()Returns the angles in radians around the x, y and z axes that correspond to the rotation represented by this quaternion.Vector3faxis()Returns the axis of rotation for this quaternion.intcompareTo(Quaternionf q)Quaternionfconjugate()Conjugates the quaternion.Vector3fdirection()Returns a unit vector representing the direction of this quaternion, which isVector3f.FORWARDrotated by this quaternion.Quaternionfdiv(double a)Divides the components of this quaternion by a double scalar.Quaternionfdiv(double x, double y, double z, double w)Divides this quaternions by the double components of another one.Quaternionfdiv(float a)Divides the components of this quaternion by a float scalar.Quaternionfdiv(float x, float y, float z, float w)Divides this quaternions by the float components of another one.Quaternionfdiv(Quaternionf q)Divides this quaternions by another one.floatdot(double x, double y, double z, double w)Returns the dot product of this quaternion with the double components of another one.floatdot(float x, float y, float z, float w)Returns the dot product of this quaternion with the float components of another one.floatdot(Quaternionf q)Returns the dot product of this quaternion with another one.booleanequals(Object other)static Quaternionffrom(float x, float y, float z, float w)Creates a new quaternion from the float components.static QuaternionffromAngleDegAxis(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 QuaternionffromAngleDegAxis(double angle, Vector3f axis)Creates a new quaternion from the rotation double angle in degrees around the axis vector.static QuaternionffromAngleDegAxis(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 QuaternionffromAngleDegAxis(float angle, Vector3f axis)Creates a new quaternion from the rotation float angle in degrees around the axis vector.static QuaternionffromAngleRadAxis(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 QuaternionffromAngleRadAxis(double angle, Vector3f axis)Creates a new quaternion from the rotation double angle in radians around the axis vector.static QuaternionffromAngleRadAxis(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 QuaternionffromAngleRadAxis(float angle, Vector3f axis)Creates a new quaternion from the rotation float angle in radians around the axis vector.static QuaternionffromAxesAnglesDeg(double pitch, double yaw, double roll)Creates a new quaternion from the double angles in degrees around the x, y and z axes.static QuaternionffromAxesAnglesDeg(float pitch, float yaw, float roll)Creates a new quaternion from the float angles in degrees around the x, y and z axes.static QuaternionffromAxesAnglesRad(double pitch, double yaw, double roll)Creates a new quaternion from the double angles in radians around the x, y and z axes.static QuaternionffromAxesAnglesRad(float pitch, float yaw, float roll)Creates a new quaternion from the float angles in radians around the x, y and z axes.static QuaternionffromImaginary(float x, float y, float z)Creates a new quaternion from the float imaginary components.static QuaternionffromReal(float w)Creates a new quaternion from the float real component.static QuaternionffromRotationMatrix(Matrix3f matrix)Creates a new quaternion from the rotation matrix.static QuaternionffromRotationTo(Vector3f from, Vector3f to)Creates a new quaternion from the angle-axis rotation defined from the first to the second vector.inthashCode()Quaternionfinvert()Inverts the quaternion.floatlength()Returns the length of this quaternion.floatlengthSquared()Returns the square of the length of this quaternion.Quaternionfmul(double a)Multiplies the components of this quaternion by a double scalar.Quaternionfmul(double x, double y, double z, double w)Multiplies the double components of another quaternion with this one.Quaternionfmul(float a)Multiplies the components of this quaternion by a float scalar.Quaternionfmul(float x, float y, float z, float w)Multiplies the float components of another quaternion with this one.Quaternionfmul(Quaternionf q)Multiplies another quaternion with this one.Quaternionfnormalize()Normalizes this quaternion.Vector3frotate(double x, double y, double z)Rotates the double components of a vector by this quaternion.Vector3frotate(float x, float y, float z)Rotates the float components of a vector by this quaternion.Vector3frotate(Vector3f v)Rotates a vector by this quaternion.Quaternionfsub(double x, double y, double z, double w)Subtracts the double components of another quaternion from this one.Quaternionfsub(float x, float y, float z, float w)Subtracts the float components of another quaternion from this one.Quaternionfsub(Quaternionf q)Subtracts another quaternion from this one.ComplexftoComplex()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.QuaterniondtoDouble()QuaternionftoFloat()StringtoString()floatw()Gets the w (real) component of this quaternion.floatx()Gets the x (imaginary) component of this quaternion.floaty()Gets the y (imaginary) component of this quaternion.floatz()Gets the z (imaginary) component of this quaternion.
-
-
-
Field Detail
-
ZERO
public static final Quaternionf ZERO
An immutable identity (0, 0, 0, 0) quaternion.
-
IDENTITY
public static final Quaternionf IDENTITY
An immutable identity (0, 0, 0, 1) quaternion.
-
-
Constructor Detail
-
Quaternionf
public Quaternionf(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
-
Quaternionf
public Quaternionf(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
-
-
Method Detail
-
x
public float x()
Gets the x (imaginary) component of this quaternion.- Returns:
- The x (imaginary) component
-
y
public float y()
Gets the y (imaginary) component of this quaternion.- Returns:
- The y (imaginary) component
-
z
public float z()
Gets the z (imaginary) component of this quaternion.- Returns:
- The z (imaginary) component
-
w
public float w()
Gets the w (real) component of this quaternion.- Returns:
- The w (real) component
-
add
public Quaternionf add(Quaternionf 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 Quaternionf 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
-
add
public Quaternionf 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
-
sub
public Quaternionf sub(Quaternionf 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 Quaternionf 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
-
sub
public Quaternionf 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
-
mul
public Quaternionf mul(double a)
Multiplies the components of this quaternion by a double scalar.- Parameters:
a- The multiplication scalar- Returns:
- A new quaternion, which has each component multiplied by the scalar
-
mul
public Quaternionf mul(float a)
Multiplies the components of this quaternion by a float scalar.- Specified by:
mulin interfaceImaginaryf- Parameters:
a- The multiplication scalar- Returns:
- A new quaternion, which has each component multiplied by the scalar
-
mul
public Quaternionf mul(Quaternionf 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 Quaternionf 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
-
mul
public Quaternionf 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
-
div
public Quaternionf div(double a)
Divides the components of this quaternion by a double scalar.- Parameters:
a- The division scalar- Returns:
- A new quaternion, which has each component divided by the scalar
-
div
public Quaternionf div(float a)
Divides the components of this quaternion by a float scalar.- Specified by:
divin interfaceImaginaryf- Parameters:
a- The division scalar- Returns:
- A new quaternion, which has each component divided by the scalar
-
div
public Quaternionf div(Quaternionf q)
Divides this quaternions by another one.- Parameters:
q- The quaternion to divide with- Returns:
- The quotient of the two quaternions
-
div
public Quaternionf 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
-
div
public Quaternionf 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
-
dot
public float dot(Quaternionf 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 float 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
-
dot
public float 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
-
rotate
public Vector3f rotate(Vector3f v)
Rotates a vector by this quaternion.- Parameters:
v- The vector to rotate- Returns:
- The rotated vector
-
rotate
public Vector3f 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
-
rotate
public Vector3f 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
-
direction
public Vector3f direction()
Returns a unit vector representing the direction of this quaternion, which isVector3f.FORWARDrotated by this quaternion.- Returns:
- The vector representing the direction this quaternion is pointing to
-
axis
public Vector3f axis()
Returns the axis of rotation for this quaternion.- Returns:
- The axis of rotation
-
axesAnglesDeg
public Vector3f 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 Vector3f 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 Quaternionf conjugate()
Conjugates the quaternion.Conjugation of a quaternion
ais an operation returning quaterniona'such thata' * a = a * a' = |a|<sup>2</sup>where|a|<sup>2</sup>is squared length ofa.- Specified by:
conjugatein interfaceImaginaryf- Returns:
- the conjugated quaternion
-
invert
public Quaternionf invert()
Inverts the quaternion.Inversion of a quaternion
areturns quaterniona<sup>-1</sup> = a' / |a|<sup>2</sup>wherea'isconjugationofa, and|a|<sup>2</sup>is squared length ofa.For any quaternions
a, b, csuch thata * b = c, the equationsa<sup>-1</sup> * c = bandc * b<sup>-1</sup> = aare true.- Specified by:
invertin interfaceImaginaryf- Returns:
- the inverted quaternion
-
lengthSquared
public float lengthSquared()
Returns the square of the length of this quaternion.- Specified by:
lengthSquaredin interfaceImaginaryf- Returns:
- The square of the length
-
length
public float length()
Returns the length of this quaternion.- Specified by:
lengthin interfaceImaginaryf- Returns:
- The length
-
normalize
public Quaternionf normalize()
Normalizes this quaternion.- Specified by:
normalizein interfaceImaginaryf- Returns:
- A new quaternion of unit length
-
toComplex
public Complexf 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:
toFloatin interfaceImaginaryf
-
toDouble
public Quaterniond toDouble()
- Specified by:
toDoublein interfaceImaginaryf
-
compareTo
public int compareTo(Quaternionf q)
- Specified by:
compareToin interfaceComparable<Quaternionf>
-
fromReal
public static Quaternionf fromReal(float w)
Creates a new quaternion from the float real component.The
ZEROconstant is re-used whenwis 0.- Parameters:
w- The w (real) component- Returns:
- The quaternion created from the float real component
-
fromImaginary
public static Quaternionf fromImaginary(float x, float y, float z)
Creates a new quaternion from the float imaginary components.The
ZEROconstant is re-used whenx,y, andzare 0.- Parameters:
x- The x (imaginary) componenty- The y (imaginary) componentz- The z (imaginary) component- Returns:
- The quaternion created from the float imaginary components
-
from
public static Quaternionf from(float x, float y, float z, float w)
Creates a new quaternion from the float components.The
ZEROconstant is re-used whenx,y,z, andware 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 float components
-
fromAxesAnglesDeg
public static Quaternionf 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 Quaternionf 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
-
fromAxesAnglesDeg
public static Quaternionf 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 Quaternionf 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
-
fromRotationTo
public static Quaternionf fromRotationTo(Vector3f from, Vector3f 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 Quaternionf fromAngleDegAxis(double angle, Vector3f 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 Quaternionf fromAngleRadAxis(double angle, Vector3f 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 Quaternionf fromAngleDegAxis(float angle, Vector3f 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 Quaternionf fromAngleRadAxis(float angle, Vector3f 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 Quaternionf 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 Quaternionf 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
-
fromAngleDegAxis
public static Quaternionf 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 Quaternionf 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
-
fromRotationMatrix
public static Quaternionf fromRotationMatrix(Matrix3f 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
-
-