public class Quaterniond extends Object implements Externalizable
Modifier and Type | Field and Description |
---|---|
double |
w
The real/scalar part of the quaternion.
|
double |
x
The first component of the vector part.
|
double |
y
The second component of the vector part.
|
double |
z
The third component of the vector part.
|
Constructor and Description |
---|
Quaterniond()
Create a new
Quaterniond and initialize it with (x=0, y=0, z=0, w=1),
where (x, y, z) is the vector part of the quaternion and w is the real/scalar part. |
Quaterniond(AxisAngle4d axisAngle)
Create a new
Quaterniond and initialize it to represent the same rotation as the given AxisAngle4d . |
Quaterniond(AxisAngle4f axisAngle)
Create a new
Quaterniond and initialize it to represent the same rotation as the given AxisAngle4f . |
Quaterniond(double x,
double y,
double z)
Create a new
Quaterniond and initialize its imaginary components to the given values,
and its real part to 1.0. |
Quaterniond(double x,
double y,
double z,
double w)
Create a new
Quaterniond and initialize its components to the given values. |
Quaterniond(Quaterniond source)
Create a new
Quaterniond and initialize its components to the same values as the given Quaterniond . |
Quaterniond(Quaternionf source)
Create a new
Quaterniond and initialize its components to the same values as the given Quaternionf . |
Modifier and Type | Method and Description |
---|---|
Quaterniond |
add(Quaterniond q2)
Add
q2 to this quaternion. |
Quaterniond |
add(Quaterniond q2,
Quaterniond dest)
Add
q2 to this quaternion and store the result in dest . |
double |
angle()
Return the angle in radians represented by this quaternion rotation.
|
Quaterniond |
conjugate()
Conjugate this quaternion.
|
Quaterniond |
conjugate(Quaterniond dest)
Conjugate this quaternion and store the result in
dest . |
Quaterniond |
difference(Quaterniond other)
Compute the difference between
this and the other quaternion
and store the result in this . |
Quaterniond |
difference(Quaterniond other,
Quaterniond dest)
Compute the difference between
this and the other quaternion
and store the result in dest . |
Quaterniond |
div(Quaterniond b)
Divide
this quaternion by b . |
Quaterniond |
div(Quaterniond b,
Quaterniond dest)
Divide
this quaternion by b and store the result in dest . |
double |
dot(Quaterniond otherQuat)
Return the dot product of this
Quaterniond and otherQuat . |
boolean |
equals(Object obj) |
Quaterniond |
fromAxisAngleDeg(Vector3d axis,
double angle)
Set this quaternion to be a representation of the supplied axis and
angle (in radians).
|
Quaterniond |
fromAxisAngleRad(double axisX,
double axisY,
double axisZ,
double angle)
Set this quaternion to be a representation of the supplied axis and
angle (in radians).
|
Quaterniond |
fromAxisAngleRad(Vector3d axis,
double angle)
Set this quaternion to be a representation of the supplied axis and
angle (in radians).
|
Matrix3d |
get(Matrix3d dest)
Set the given destination matrix to the rotation represented by
this . |
Matrix3f |
get(Matrix3f dest)
Set the given destination matrix to the rotation represented by
this . |
Matrix4d |
get(Matrix4d dest)
Set the given destination matrix to the rotation represented by
this . |
Matrix4f |
get(Matrix4f dest)
Set the given destination matrix to the rotation represented by
this . |
Quaterniond |
get(Quaterniond dest)
Set the given
Quaterniond to the values of this . |
Vector3d |
getEulerAnglesXYZ(Vector3d eulerAngles)
Get the euler angles in radians in rotation sequence XYZ of this quaternion and store them in the
provided parameter
eulerAngles . |
int |
hashCode() |
Quaterniond |
identity()
Set this quaternion to the identity.
|
Quaterniond |
integrate(double dt,
double vx,
double vy,
double vz)
Integrate the rotation given by the angular velocity
(vx, vy, vz) around the x, y and z axis, respectively,
with respect to the given elapsed time delta dt and add the differentiate rotation to the rotation represented by this quaternion. |
Quaterniond |
integrate(double dt,
double vx,
double vy,
double vz,
Quaterniond dest)
Integrate the rotation given by the angular velocity
(vx, vy, vz) around the x, y and z axis, respectively,
with respect to the given elapsed time delta dt and add the differentiate rotation to the rotation represented by this quaternion
and store the result into dest . |
Quaterniond |
invert()
Invert this quaternion and
normalize it. |
Quaterniond |
invert(Quaterniond dest)
Invert this quaternion and store the
normalized result in dest . |
double |
lengthSquared()
Return the square of the length of this quaternion.
|
Quaterniond |
lookRotate(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ)
Apply a rotation to this quaternion that maps the given direction to the positive Z axis.
|
Quaterniond |
lookRotate(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ,
Quaterniond dest)
Apply a rotation to this quaternion that maps the given direction to the positive Z axis, and store the result in
dest . |
Quaterniond |
lookRotate(Vector3d dir,
Vector3d up)
Apply a rotation to this quaternion that maps the given direction to the positive Z axis.
|
Quaterniond |
lookRotate(Vector3d dir,
Vector3d up,
Quaterniond dest)
Apply a rotation to this quaternion that maps the given direction to the positive Z axis, and store the result in
dest . |
Quaterniond |
mul(double qx,
double qy,
double qz,
double qw)
Multiply this quaternion by the quaternion represented via (qx, qy, qz, qw).
|
Quaterniond |
mul(double qx,
double qy,
double qz,
double qw,
Quaterniond dest)
Multiply this quaternion by the quaternion represented via (qx, qy, qz, qw) and store the result in
dest . |
Quaterniond |
mul(Quaterniond q)
Multiply this quaternion by
q . |
Quaterniond |
mul(Quaterniond q,
Quaterniond dest)
Multiply this quaternion by
q and store the result in dest . |
Quaterniond |
nlerp(Quaterniond q,
double factor)
Compute a linear (non-spherical) interpolation of
this and the given quaternion q
and store the result in this . |
Quaterniond |
nlerp(Quaterniond q,
double factor,
Quaterniond dest)
Compute a linear (non-spherical) interpolation of
this and the given quaternion q
and store the result in dest . |
Quaterniond |
nlerpIterative(Quaterniond q,
double alpha,
double dotThreshold,
Quaterniond dest)
Compute linear (non-spherical) interpolations of
this and the given quaternion q
iteratively and store the result in dest . |
Quaterniond |
normalize()
Normalize this quaternion.
|
Quaterniond |
normalize(Quaterniond dest)
Normalize this quaternion and store the result in
dest . |
Vector3d |
positiveX(Vector3d dir)
Obtain the direction of +X before the rotation transformation represented by
this quaternion is applied. |
Vector3d |
positiveY(Vector3d dir)
Obtain the direction of +Y before the rotation transformation represented by
this quaternion is applied. |
Vector3d |
positiveZ(Vector3d dir)
Obtain the direction of +Z before the rotation transformation represented by
this quaternion is applied. |
Quaterniond |
premul(double qx,
double qy,
double qz,
double qw)
Pre-multiply this quaternion by the quaternion represented via (qx, qy, qz, qw).
|
Quaterniond |
premul(double qx,
double qy,
double qz,
double qw,
Quaterniond dest)
Pre-multiply this quaternion by the quaternion represented via (qx, qy, qz, qw) and store the result in
dest . |
Quaterniond |
premul(Quaterniond q)
Pre-multiply this quaternion by
q . |
Quaterniond |
premul(Quaterniond q,
Quaterniond dest)
Pre-multiply this quaternion by
q and store the result in dest . |
void |
readExternal(ObjectInput in) |
Quaterniond |
rotate(double angleX,
double angleY,
double angleZ)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes of the cartesian space. |
Quaterniond |
rotate(double angleX,
double angleY,
double angleZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes of the
cartesian space and store the result in dest . |
Quaterniond |
rotate(Vector3d anglesXYZ)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes
of the cartesian space. |
Quaterniond |
rotate(Vector3d anglesXYZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes of the
cartesian space and store the result in dest . |
Quaterniond |
rotateAxis(double angle,
double axisX,
double axisY,
double axisZ)
Apply a rotation to
this quaternion rotating the given radians about the specified axis. |
Quaterniond |
rotateAxis(double angle,
double axisX,
double axisY,
double axisZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the specified axis
and store the result in dest . |
Quaterniond |
rotateAxis(double angle,
Vector3d axis)
Apply a rotation to
this quaternion rotating the given radians about the specified axis. |
Quaterniond |
rotateAxis(double angle,
Vector3d axis,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the specified axis
and store the result in dest . |
Quaterniond |
rotateLocal(double angleX,
double angleY,
double angleZ)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes of the
local coordinate system represented by this quaternion. |
Quaterniond |
rotateLocal(double angleX,
double angleY,
double angleZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the basis unit axes of the
local coordinate system represented by this quaternion and store the result in dest . |
Quaterniond |
rotateLocalX(double angle)
Apply a rotation to
this quaternion rotating the given radians about the local x axis. |
Quaterniond |
rotateLocalX(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the local x axis
and store the result in dest . |
Quaterniond |
rotateLocalY(double angle)
Apply a rotation to
this quaternion rotating the given radians about the local y axis. |
Quaterniond |
rotateLocalY(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the local y axis
and store the result in dest . |
Quaterniond |
rotateLocalZ(double angle)
Apply a rotation to
this quaternion rotating the given radians about the local z axis. |
Quaterniond |
rotateLocalZ(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the local z axis
and store the result in dest . |
Quaterniond |
rotateTo(double fromDirX,
double fromDirY,
double fromDirZ,
double toDirX,
double toDirY,
double toDirZ)
Apply a rotation to
this that rotates the fromDir vector to point along toDir. |
Quaterniond |
rotateTo(double fromDirX,
double fromDirY,
double fromDirZ,
double toDirX,
double toDirY,
double toDirZ,
Quaterniond dest)
Apply a rotation to
this that rotates the fromDir vector to point along toDir and
store the result in dest . |
Quaterniond |
rotateTo(Vector3d fromDir,
Vector3d toDir)
Apply a rotation to
this that rotates the fromDir vector to point along toDir . |
Quaterniond |
rotateTo(Vector3d fromDir,
Vector3d toDir,
Quaterniond dest)
Apply a rotation to
this that rotates the fromDir vector to point along toDir and
store the result in dest . |
Quaterniond |
rotateX(double angle)
Apply a rotation to
this quaternion rotating the given radians about the x axis. |
Quaterniond |
rotateX(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the x axis
and store the result in dest . |
Quaterniond |
rotateXYZ(double angleX,
double angleY,
double angleZ)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles using rotation sequence XYZ. |
Quaterniond |
rotateXYZ(double angleX,
double angleY,
double angleZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles using rotation sequence XYZ and store the result in dest . |
Quaterniond |
rotateY(double angle)
Apply a rotation to
this quaternion rotating the given radians about the y axis. |
Quaterniond |
rotateY(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the y axis
and store the result in dest . |
Quaterniond |
rotateYXZ(double angleZ,
double angleY,
double angleX)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence YXZ. |
Quaterniond |
rotateYXZ(double angleY,
double angleX,
double angleZ,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence YXZ and store the result in dest . |
Quaterniond |
rotateZ(double angle)
Apply a rotation to
this quaternion rotating the given radians about the z axis. |
Quaterniond |
rotateZ(double angle,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the z axis
and store the result in dest . |
Quaterniond |
rotateZYX(double angleZ,
double angleY,
double angleX)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence ZYX. |
Quaterniond |
rotateZYX(double angleZ,
double angleY,
double angleX,
Quaterniond dest)
Apply a rotation to
this quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence ZYX and store the result in dest . |
Quaterniond |
rotation(double angleX,
double angleY,
double angleZ)
Set this quaternion to represent a rotation of the given angles in radians about the basis unit axes of the cartesian space.
|
Quaterniond |
rotationAxis(AxisAngle4f axisAngle)
Set this
Quaterniond to a rotation of the given angle in radians about the supplied
axis, all of which are specified via the AxisAngle4f . |
Quaterniond |
rotationAxis(double angle,
double axisX,
double axisY,
double axisZ)
Set this quaternion to a rotation of the given angle in radians about the supplied axis.
|
Quaterniond |
rotationTo(double fromDirX,
double fromDirY,
double fromDirZ,
double toDirX,
double toDirY,
double toDirZ)
Set
this quaternion to a rotation that rotates the fromDir vector to point along toDir. |
Quaterniond |
rotationTo(Vector3d fromDir,
Vector3d toDir)
Set
this quaternion to a rotation that rotates the fromDir vector to point along toDir . |
Quaterniond |
rotationX(double angle)
Set this quaternion to represent a rotation of the given radians about the x axis.
|
Quaterniond |
rotationXYZ(double angleX,
double angleY,
double angleZ)
Set this quaternion from the supplied euler angles (in radians) with rotation order XYZ.
|
Quaterniond |
rotationY(double angle)
Set this quaternion to represent a rotation of the given radians about the y axis.
|
Quaterniond |
rotationYXZ(double angleY,
double angleX,
double angleZ)
Set this quaternion from the supplied euler angles (in radians) with rotation order YXZ.
|
Quaterniond |
rotationZ(double angle)
Set this quaternion to represent a rotation of the given radians about the z axis.
|
Quaterniond |
rotationZYX(double angleZ,
double angleY,
double angleX)
Set this quaternion from the supplied euler angles (in radians) with rotation order ZYX.
|
Quaterniond |
scale(double factor)
Scale the rotation represented by this quaternion by the given
factor using sperical linear interpolation. |
Quaterniond |
scale(double factor,
Quaterniond dest)
Scale the rotation represented by this quaternion by the given
factor using sperical linear interpolation, and store the result in dest . |
Quaterniond |
set(AxisAngle4d axisAngle)
Set this
Quaterniond to be equivalent to the given
AxisAngle4d . |
Quaterniond |
set(AxisAngle4f axisAngle)
Set this
Quaterniond to be equivalent to the given
AxisAngle4f . |
Quaterniond |
set(double x,
double y,
double z)
Set the x, y and z components of this quaternion to the new values.
|
Quaterniond |
set(double x,
double y,
double z,
double w)
Set this quaternion to the new values.
|
Quaterniond |
set(Quaterniond q)
Set this quaternion to be a copy of q.
|
Quaterniond |
set(Quaternionf q)
Set this quaternion to be a copy of q.
|
Quaterniond |
setAngleAxis(double angle,
double x,
double y,
double z)
Set this quaternion to a rotation equivalent to the supplied axis and
angle (in radians).
|
Quaterniond |
setAngleAxis(double angle,
Vector3d axis)
Set this quaternion to be a representation of the supplied axis and
angle (in radians).
|
Quaterniond |
setFromNormalized(Matrix3d mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromNormalized(Matrix3f mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromNormalized(Matrix4d mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromNormalized(Matrix4f mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromUnnormalized(Matrix3d mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromUnnormalized(Matrix3f mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromUnnormalized(Matrix4d mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
setFromUnnormalized(Matrix4f mat)
Set this quaternion to be a representation of the rotational component of the given matrix.
|
Quaterniond |
slerp(Quaterniond target,
double alpha)
Interpolate between
this quaternion and the specified
target using sperical linear interpolation using the specified interpolation factor alpha . |
Quaterniond |
slerp(Quaterniond target,
double alpha,
Quaterniond dest)
Interpolate between
this quaternion and the specified
target using sperical linear interpolation using the specified interpolation factor alpha ,
and store the result in dest . |
String |
toString()
Return a string representation of this quaternion.
|
String |
toString(NumberFormat formatter)
Return a string representation of this quaternion by formatting the components with the given
NumberFormat . |
Vector3d |
transform(Vector3d vec)
Transform the given vector by this quaternion.
|
Vector3d |
transform(Vector3d vec,
Vector3d dest)
Transform the given vector by this quaternion and store the result in
dest . |
Vector4d |
transform(Vector4d vec)
Transform the given vector by this quaternion.
|
Vector4d |
transform(Vector4d vec,
Vector4d dest)
Transform the given vector by this quaternion and store the result in
dest . |
void |
writeExternal(ObjectOutput out) |
public double x
public double y
public double z
public double w
public Quaterniond()
Quaterniond
and initialize it with (x=0, y=0, z=0, w=1),
where (x, y, z) is the vector part of the quaternion and w is the real/scalar part.public Quaterniond(double x, double y, double z, double w)
Quaterniond
and initialize its components to the given values.x
- the first component of the imaginary party
- the second component of the imaginary partz
- the third component of the imaginary partw
- the real partpublic Quaterniond(double x, double y, double z)
Quaterniond
and initialize its imaginary components to the given values,
and its real part to 1.0.x
- the first component of the imaginary party
- the second component of the imaginary partz
- the third component of the imaginary partpublic Quaterniond(Quaterniond source)
Quaterniond
and initialize its components to the same values as the given Quaterniond
.source
- the Quaterniond
to take the component values frompublic Quaterniond(Quaternionf source)
Quaterniond
and initialize its components to the same values as the given Quaternionf
.source
- the Quaternionf
to take the component values frompublic Quaterniond(AxisAngle4f axisAngle)
Quaterniond
and initialize it to represent the same rotation as the given AxisAngle4f
.axisAngle
- the axis-angle to initialize this quaternion withpublic Quaterniond(AxisAngle4d axisAngle)
Quaterniond
and initialize it to represent the same rotation as the given AxisAngle4d
.axisAngle
- the axis-angle to initialize this quaternion withpublic Quaterniond normalize()
public Quaterniond normalize(Quaterniond dest)
dest
.dest
- will hold the resultpublic Quaterniond add(Quaterniond q2)
q2
to this quaternion.q2
- the quaternion to add to thispublic Quaterniond add(Quaterniond q2, Quaterniond dest)
q2
to this quaternion and store the result in dest
.q2
- the quaternion to add to thisdest
- will hold the resultpublic double dot(Quaterniond otherQuat)
Quaterniond
and otherQuat
.otherQuat
- the other quaternionpublic double angle()
public Matrix3d get(Matrix3d dest)
this
.dest
- the matrix to write the rotation intopublic Matrix3f get(Matrix3f dest)
this
.dest
- the matrix to write the rotation intopublic Matrix4d get(Matrix4d dest)
this
.dest
- the matrix to write the rotation intopublic Matrix4f get(Matrix4f dest)
this
.dest
- the matrix to write the rotation intopublic Quaterniond get(Quaterniond dest)
Quaterniond
to the values of this
.dest
- the Quaterniond
to setset(Quaterniond)
public Quaterniond set(double x, double y, double z, double w)
x
- the new value of xy
- the new value of yz
- the new value of zw
- the new value of wpublic Quaterniond set(double x, double y, double z)
x
- the new value of xy
- the new value of yz
- the new value of zpublic Quaterniond set(Quaterniond q)
q
- the Quaterniond
to copypublic Quaterniond set(Quaternionf q)
q
- the Quaternionf
to copypublic Quaterniond set(AxisAngle4f axisAngle)
Quaterniond
to be equivalent to the given
AxisAngle4f
.axisAngle
- the AxisAngle4f
public Quaterniond set(AxisAngle4d axisAngle)
Quaterniond
to be equivalent to the given
AxisAngle4d
.axisAngle
- the AxisAngle4d
public Quaterniond setAngleAxis(double angle, double x, double y, double z)
This method assumes that the given rotation axis (x, y, z) is already normalized
angle
- the angle in radiansx
- the x-component of the normalized rotation axisy
- the y-component of the normalized rotation axisz
- the z-component of the normalized rotation axispublic Quaterniond setAngleAxis(double angle, Vector3d axis)
angle
- the angle in radiansaxis
- the rotation axispublic Quaterniond setFromUnnormalized(Matrix4f mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are no unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromNormalized(Matrix4f mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromUnnormalized(Matrix4d mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are no unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromNormalized(Matrix4d mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromUnnormalized(Matrix3f mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are no unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromNormalized(Matrix3f mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromUnnormalized(Matrix3d mat)
This method assumes that the first three columns of the upper left 3x3 submatrix are no unit vectors.
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond setFromNormalized(Matrix3d mat)
mat
- the matrix whose rotational component is used to set this quaternionpublic Quaterniond fromAxisAngleRad(Vector3d axis, double angle)
axis
- the rotation axisangle
- the angle in radianspublic Quaterniond fromAxisAngleRad(double axisX, double axisY, double axisZ, double angle)
axisX
- the x component of the rotation axisaxisY
- the y component of the rotation axisaxisZ
- the z component of the rotation axisangle
- the angle in radianspublic Quaterniond fromAxisAngleDeg(Vector3d axis, double angle)
axis
- the rotation axisangle
- the angle in radianspublic Quaterniond mul(Quaterniond q)
q
.
If T is this
and Q is the given
quaternion, then the resulting quaternion R is:
R = T * Q
So, this method uses post-multiplication like the matrix classes, resulting in a vector to be transformed by Q first, and then by T.
q
- the quaternion to multiply this
bypublic Quaterniond mul(Quaterniond q, Quaterniond dest)
q
and store the result in dest
.
If T is this
and Q is the given
quaternion, then the resulting quaternion R is:
R = T * Q
So, this method uses post-multiplication like the matrix classes, resulting in a vector to be transformed by Q first, and then by T.
q
- the quaternion to multiply this
bydest
- will hold the resultpublic Quaterniond mul(double qx, double qy, double qz, double qw)
If T is this
and Q is the given
quaternion, then the resulting quaternion R is:
R = T * Q
So, this method uses post-multiplication like the matrix classes, resulting in a vector to be transformed by Q first, and then by T.
qx
- the x component of the quaternion to multiply this
byqy
- the y component of the quaternion to multiply this
byqz
- the z component of the quaternion to multiply this
byqw
- the w component of the quaternion to multiply this
bypublic Quaterniond mul(double qx, double qy, double qz, double qw, Quaterniond dest)
dest
.
If T is this
and Q is the given
quaternion, then the resulting quaternion R is:
R = T * Q
So, this method uses post-multiplication like the matrix classes, resulting in a vector to be transformed by Q first, and then by T.
qx
- the x component of the quaternion to multiply this
byqy
- the y component of the quaternion to multiply this
byqz
- the z component of the quaternion to multiply this
byqw
- the w component of the quaternion to multiply this
bydest
- will hold the resultpublic Quaterniond premul(Quaterniond q)
q
.
If T is this
and Q is the given quaternion, then the resulting quaternion R is:
R = Q * T
So, this method uses pre-multiplication, resulting in a vector to be transformed by T first, and then by Q.
q
- the quaternion to pre-multiply this
bypublic Quaterniond premul(Quaterniond q, Quaterniond dest)
q
and store the result in dest
.
If T is this
and Q is the given quaternion, then the resulting quaternion R is:
R = Q * T
So, this method uses pre-multiplication, resulting in a vector to be transformed by T first, and then by Q.
q
- the quaternion to pre-multiply this
bydest
- will hold the resultpublic Quaterniond premul(double qx, double qy, double qz, double qw)
If T is this
and Q is the given quaternion, then the resulting quaternion R is:
R = Q * T
So, this method uses pre-multiplication, resulting in a vector to be transformed by T first, and then by Q.
qx
- the x component of the quaternion to multiply this
byqy
- the y component of the quaternion to multiply this
byqz
- the z component of the quaternion to multiply this
byqw
- the w component of the quaternion to multiply this
bypublic Quaterniond premul(double qx, double qy, double qz, double qw, Quaterniond dest)
dest
.
If T is this
and Q is the given quaternion, then the resulting quaternion R is:
R = Q * T
So, this method uses pre-multiplication, resulting in a vector to be transformed by T first, and then by Q.
qx
- the x component of the quaternion to multiply this
byqy
- the y component of the quaternion to multiply this
byqz
- the z component of the quaternion to multiply this
byqw
- the w component of the quaternion to multiply this
bydest
- will hold the resultpublic Vector3d transform(Vector3d vec)
vec
- the vector to transformpublic Vector3d transform(Vector3d vec, Vector3d dest)
dest
.
This will apply the rotation described by this quaternion to the given vector.vec
- the vector to transformdest
- will hold the resultpublic Vector4d transform(Vector4d vec)
Only the first three components of the given 4D vector are being used and modified.
vec
- the vector to transformpublic Vector4d transform(Vector4d vec, Vector4d dest)
dest
.
This will apply the rotation described by this quaternion to the given vector.
Only the first three components of the given 4D vector are being used and set on the destination.
vec
- the vector to transformdest
- will hold the resultpublic Quaterniond invert(Quaterniond dest)
normalized
result in dest
.
If this quaternion is already normalized, then conjugate(Quaterniond)
should be used instead.
dest
- will hold the resultconjugate(Quaterniond)
public Quaterniond invert()
normalize
it.
If this quaternion is already normalized, then conjugate()
should be used instead.
conjugate()
public Quaterniond div(Quaterniond b, Quaterniond dest)
this
quaternion by b
and store the result in dest
.
The division expressed using the inverse is performed in the following way:
dest = this * b^-1, where b^-1 is the inverse of b
.
b
- the Quaterniond
to divide this bydest
- will hold the resultpublic Quaterniond div(Quaterniond b)
this
quaternion by b
.
The division expressed using the inverse is performed in the following way:
this = this * b^-1, where b^-1 is the inverse of b
.
b
- the Quaterniond
to divide this bypublic Quaterniond conjugate()
public Quaterniond conjugate(Quaterniond dest)
dest
.dest
- will hold the resultpublic Quaterniond identity()
public double lengthSquared()
public Quaterniond rotationXYZ(double angleX, double angleY, double angleZ)
This method is equivalent to calling: rotationX(angleX).rotateY(angleY).rotateZ(angleZ)
Reference: this stackexchange answer
angleX
- the angle in radians to rotate about xangleY
- the angle in radians to rotate about yangleZ
- the angle in radians to rotate about zpublic Quaterniond rotationZYX(double angleZ, double angleY, double angleX)
This method is equivalent to calling: rotationZ(angleZ).rotateY(angleY).rotateX(angleX)
Reference: this stackexchange answer
angleX
- the angle in radians to rotate about xangleY
- the angle in radians to rotate about yangleZ
- the angle in radians to rotate about zpublic Quaterniond rotationYXZ(double angleY, double angleX, double angleZ)
This method is equivalent to calling: rotationY(angleY).rotateX(angleX).rotateZ(angleZ)
Reference: https://en.wikipedia.org
angleY
- the angle in radians to rotate about yangleX
- the angle in radians to rotate about xangleZ
- the angle in radians to rotate about zpublic Quaterniond slerp(Quaterniond target, double alpha)
this
quaternion and the specified
target
using sperical linear interpolation using the specified interpolation factor alpha
.
This method resorts to non-spherical linear interpolation when the absolute dot product between this
and target
is
below 1E-6.
target
- the target of the interpolation, which should be reached with alpha = 1.0alpha
- the interpolation factor, within [0..1]public Quaterniond slerp(Quaterniond target, double alpha, Quaterniond dest)
this
quaternion and the specified
target
using sperical linear interpolation using the specified interpolation factor alpha
,
and store the result in dest
.
This method resorts to non-spherical linear interpolation when the absolute dot product between this
and target
is
below 1E-6.
Reference: http://fabiensanglard.net
target
- the target of the interpolation, which should be reached with alpha = 1.0alpha
- the interpolation factor, within [0..1]dest
- will hold the resultpublic Quaterniond scale(double factor)
factor
using sperical linear interpolation.
This method is equivalent to performing a spherical linear interpolation between the unit quaternion and this
,
and thus equivalent to calling: new Quaterniond().slerp(this, factor)
Reference: http://fabiensanglard.net
factor
- the scaling/interpolation factor, within [0..1]slerp(Quaterniond, double)
public Quaterniond scale(double factor, Quaterniond dest)
factor
using sperical linear interpolation, and store the result in dest
.
This method is equivalent to performing a spherical linear interpolation between the unit quaternion and this
,
and thus equivalent to calling: new Quaterniond().slerp(this, factor, dest)
Reference: http://fabiensanglard.net
factor
- the scaling/interpolation factor, within [0..1]dest
- will hold the resultslerp(Quaterniond, double, Quaterniond)
public Quaterniond integrate(double dt, double vx, double vy, double vz)
(vx, vy, vz)
around the x, y and z axis, respectively,
with respect to the given elapsed time delta dt
and add the differentiate rotation to the rotation represented by this quaternion.
This method pre-multiplies the rotation given by dt
and (vx, vy, vz)
by this
, so
the angular velocities are always relative to the local coordinate system of the rotation represented by this
quaternion.
This method is equivalent to calling: rotateLocal(dt * vx, dt * vy, dt * vz)
Reference: http://physicsforgames.blogspot.de/
dt
- the delta timevx
- the angular velocity around the x axisvy
- the angular velocity around the y axisvz
- the angular velocity around the z axisrotateLocal(double, double, double)
public Quaterniond integrate(double dt, double vx, double vy, double vz, Quaterniond dest)
(vx, vy, vz)
around the x, y and z axis, respectively,
with respect to the given elapsed time delta dt
and add the differentiate rotation to the rotation represented by this quaternion
and store the result into dest
.
This method pre-multiplies the rotation given by dt
and (vx, vy, vz)
by this
, so
the angular velocities are always relative to the local coordinate system of the rotation represented by this
quaternion.
This method is equivalent to calling: rotateLocal(dt * vx, dt * vy, dt * vz, dest)
Reference: http://physicsforgames.blogspot.de/
dt
- the delta timevx
- the angular velocity around the x axisvy
- the angular velocity around the y axisvz
- the angular velocity around the z axisdest
- will hold the resultrotateLocal(double, double, double, Quaterniond)
public Quaterniond nlerp(Quaterniond q, double factor)
this
and the given quaternion q
and store the result in this
.q
- the other quaternionfactor
- the interpolation factor. It is between 0.0 and 1.0public Quaterniond nlerp(Quaterniond q, double factor, Quaterniond dest)
this
and the given quaternion q
and store the result in dest
.
Reference: http://fabiensanglard.net
q
- the other quaternionfactor
- the interpolation factor. It is between 0.0 and 1.0dest
- will hold the resultpublic Quaterniond nlerpIterative(Quaterniond q, double alpha, double dotThreshold, Quaterniond dest)
this
and the given quaternion q
iteratively and store the result in dest
.
This method performs a series of small-step nlerp interpolations to avoid doing a costly spherical linear interpolation, like
slerp
,
by subdividing the rotation arc between this
and q
via non-spherical linear interpolations as long as
the absolute dot product of this
and q
is greater than the given dotThreshold
parameter.
Thanks to @theagentd at http://www.java-gaming.org/ for providing the code.
q
- the other quaternionalpha
- the interpolation factor, between 0.0 and 1.0dotThreshold
- the threshold for the dot product of this
and q
above which this method performs another iteration
of a small-step linear interpolationdest
- will hold the resultpublic Quaterniond lookRotate(Vector3d dir, Vector3d up)
Because there are multiple possibilities for such a rotation, this method will choose the one that ensures the given up direction to remain
parallel to the plane spanned by the up
and dir
vectors.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
Reference: http://answers.unity3d.com
dir
- the direction to map to the positive Z axisup
- the vector which will be mapped to a vector parallel to the plane
spanned by the given dir
and up
lookRotate(double, double, double, double, double, double, Quaterniond)
public Quaterniond lookRotate(Vector3d dir, Vector3d up, Quaterniond dest)
dest
.
Because there are multiple possibilities for such a rotation, this method will choose the one that ensures the given up direction to remain
parallel to the plane spanned by the up
and dir
vectors.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
Reference: http://answers.unity3d.com
dir
- the direction to map to the positive Z axisup
- the vector which will be mapped to a vector parallel to the plane
spanned by the given dir
and up
dest
- will hold the resultlookRotate(double, double, double, double, double, double, Quaterniond)
public Quaterniond lookRotate(double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
Because there are multiple possibilities for such a rotation, this method will choose the one that ensures the given up direction to remain parallel to the plane spanned by the up and dir vectors.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
Reference: http://answers.unity3d.com
dirX
- the x-coordinate of the direction to look alongdirY
- the y-coordinate of the direction to look alongdirZ
- the z-coordinate of the direction to look alongupX
- the x-coordinate of the up vectorupY
- the y-coordinate of the up vectorupZ
- the z-coordinate of the up vectorlookRotate(double, double, double, double, double, double, Quaterniond)
public Quaterniond lookRotate(double dirX, double dirY, double dirZ, double upX, double upY, double upZ, Quaterniond dest)
dest
.
Because there are multiple possibilities for such a rotation, this method will choose the one that ensures the given up direction to remain parallel to the plane spanned by the up and dir vectors.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
Reference: http://answers.unity3d.com
dirX
- the x-coordinate of the direction to look alongdirY
- the y-coordinate of the direction to look alongdirZ
- the z-coordinate of the direction to look alongupX
- the x-coordinate of the up vectorupY
- the y-coordinate of the up vectorupZ
- the z-coordinate of the up vectordest
- will hold the resultpublic String toString()
This method creates a new DecimalFormat
on every invocation with the format string " 0.000E0;-".
public String toString(NumberFormat formatter)
NumberFormat
.formatter
- the NumberFormat
used to format the quaternion components withpublic void writeExternal(ObjectOutput out) throws IOException
writeExternal
in interface Externalizable
IOException
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
readExternal
in interface Externalizable
IOException
ClassNotFoundException
public Quaterniond difference(Quaterniond other)
this
and the other
quaternion
and store the result in this
.
The difference is the rotation that has to be applied to get from
this
rotation to other
. If T is this
, Q
is other
and D is the computed difference, then the following equation holds:
T * D = Q
It is defined as: D = T^-1 * Q, where T^-1 denotes the inverse
of T.
other
- the other quaternionpublic Quaterniond difference(Quaterniond other, Quaterniond dest)
this
and the other
quaternion
and store the result in dest
.
The difference is the rotation that has to be applied to get from
this
rotation to other
. If T is this
, Q
is other
and D is the computed difference, then the following equation holds:
T * D = Q
It is defined as: D = T^-1 * Q, where T^-1 denotes the inverse
of T.
other
- the other quaterniondest
- will hold the resultpublic Quaterniond rotationTo(double fromDirX, double fromDirY, double fromDirZ, double toDirX, double toDirY, double toDirZ)
this
quaternion to a rotation that rotates the fromDir vector to point along toDir.
Since there can be multiple possible rotations, this method chooses the one with the shortest arc.
Reference: stackoverflow.com
fromDirX
- the x-coordinate of the direction to rotate into the destination directionfromDirY
- the y-coordinate of the direction to rotate into the destination directionfromDirZ
- the z-coordinate of the direction to rotate into the destination directiontoDirX
- the x-coordinate of the direction to rotate totoDirY
- the y-coordinate of the direction to rotate totoDirZ
- the z-coordinate of the direction to rotate topublic Quaterniond rotationTo(Vector3d fromDir, Vector3d toDir)
this
quaternion to a rotation that rotates the fromDir
vector to point along toDir
.
Because there can be multiple possible rotations, this method chooses the one with the shortest arc.
fromDir
- the starting directiontoDir
- the destination directionrotationTo(double, double, double, double, double, double)
public Quaterniond rotateTo(double fromDirX, double fromDirY, double fromDirZ, double toDirX, double toDirY, double toDirZ, Quaterniond dest)
this
that rotates the fromDir vector to point along toDir and
store the result in dest
.
Since there can be multiple possible rotations, this method chooses the one with the shortest arc.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
Reference: stackoverflow.com
fromDirX
- the x-coordinate of the direction to rotate into the destination directionfromDirY
- the y-coordinate of the direction to rotate into the destination directionfromDirZ
- the z-coordinate of the direction to rotate into the destination directiontoDirX
- the x-coordinate of the direction to rotate totoDirY
- the y-coordinate of the direction to rotate totoDirZ
- the z-coordinate of the direction to rotate todest
- will hold the resultpublic Quaterniond rotationAxis(AxisAngle4f axisAngle)
Quaterniond
to a rotation of the given angle in radians about the supplied
axis, all of which are specified via the AxisAngle4f
.axisAngle
- the AxisAngle4f
giving the rotation angle in radians and the axis to rotate aboutrotationAxis(double, double, double, double)
public Quaterniond rotationAxis(double angle, double axisX, double axisY, double axisZ)
angle
- the rotation angle in radiansaxisX
- the x-coordinate of the rotation axisaxisY
- the y-coordinate of the rotation axisaxisZ
- the z-coordinate of the rotation axispublic Quaterniond rotation(double angleX, double angleY, double angleZ)
angleX
- the angle in radians to rotate about the x axisangleY
- the angle in radians to rotate about the y axisangleZ
- the angle in radians to rotate about the z axispublic Quaterniond rotationX(double angle)
angle
- the angle in radians to rotate about the x axispublic Quaterniond rotationY(double angle)
angle
- the angle in radians to rotate about the y axispublic Quaterniond rotationZ(double angle)
angle
- the angle in radians to rotate about the z axispublic Quaterniond rotateTo(double fromDirX, double fromDirY, double fromDirZ, double toDirX, double toDirY, double toDirZ)
this
that rotates the fromDir vector to point along toDir.
Since there can be multiple possible rotations, this method chooses the one with the shortest arc.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
fromDirX
- the x-coordinate of the direction to rotate into the destination directionfromDirY
- the y-coordinate of the direction to rotate into the destination directionfromDirZ
- the z-coordinate of the direction to rotate into the destination directiontoDirX
- the x-coordinate of the direction to rotate totoDirY
- the y-coordinate of the direction to rotate totoDirZ
- the z-coordinate of the direction to rotate torotateTo(double, double, double, double, double, double, Quaterniond)
public Quaterniond rotateTo(Vector3d fromDir, Vector3d toDir, Quaterniond dest)
this
that rotates the fromDir
vector to point along toDir
and
store the result in dest
.
Because there can be multiple possible rotations, this method chooses the one with the shortest arc.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
fromDir
- the starting directiontoDir
- the destination directiondest
- will hold the resultrotateTo(double, double, double, double, double, double, Quaterniond)
public Quaterniond rotateTo(Vector3d fromDir, Vector3d toDir)
this
that rotates the fromDir
vector to point along toDir
.
Because there can be multiple possible rotations, this method chooses the one with the shortest arc.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
fromDir
- the starting directiontoDir
- the destination directionrotateTo(double, double, double, double, double, double, Quaterniond)
public Quaterniond rotate(Vector3d anglesXYZ, Quaterniond dest)
this
quaternion rotating the given radians about the basis unit axes of the
cartesian space and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
anglesXYZ
- the angles in radians to rotate about the x, y and z axes, respectivelydest
- will hold the resultrotate(double, double, double, Quaterniond)
public Quaterniond rotate(Vector3d anglesXYZ)
this
quaternion rotating the given radians about the basis unit axes
of the cartesian space.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
anglesXYZ
- the angles in radians to rotate about the x, y and z axes, respectivelyrotate(double, double, double, Quaterniond)
public Quaterniond rotate(double angleX, double angleY, double angleZ)
this
quaternion rotating the given radians about the basis unit axes of the cartesian space.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleX
- the angle in radians to rotate about the x axisangleY
- the angle in radians to rotate about the y axisangleZ
- the angle in radians to rotate about the z axisrotate(double, double, double, Quaterniond)
public Quaterniond rotate(double angleX, double angleY, double angleZ, Quaterniond dest)
this
quaternion rotating the given radians about the basis unit axes of the
cartesian space and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleX
- the angle in radians to rotate about the x axisangleY
- the angle in radians to rotate about the y axisangleZ
- the angle in radians to rotate about the z axisdest
- will hold the resultrotate(double, double, double)
public Quaterniond rotateLocal(double angleX, double angleY, double angleZ)
this
quaternion rotating the given radians about the basis unit axes of the
local coordinate system represented by this quaternion.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angleX
- the angle in radians to rotate about the local x axisangleY
- the angle in radians to rotate about the local y axisangleZ
- the angle in radians to rotate about the local z axisrotateLocal(double, double, double, Quaterniond)
public Quaterniond rotateLocal(double angleX, double angleY, double angleZ, Quaterniond dest)
this
quaternion rotating the given radians about the basis unit axes of the
local coordinate system represented by this quaternion and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angleX
- the angle in radians to rotate about the local x axisangleY
- the angle in radians to rotate about the local y axisangleZ
- the angle in radians to rotate about the local z axisdest
- will hold the resultrotateLocal(double, double, double)
public Quaterniond rotateX(double angle)
this
quaternion rotating the given radians about the x axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the x axisrotate(double, double, double, Quaterniond)
public Quaterniond rotateX(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the x axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the x axisdest
- will hold the resultrotate(double, double, double, Quaterniond)
public Quaterniond rotateY(double angle)
this
quaternion rotating the given radians about the y axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the y axisrotate(double, double, double, Quaterniond)
public Quaterniond rotateY(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the y axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the y axisdest
- will hold the resultrotate(double, double, double, Quaterniond)
public Quaterniond rotateZ(double angle)
this
quaternion rotating the given radians about the z axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the z axisrotate(double, double, double, Quaterniond)
public Quaterniond rotateZ(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the z axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the z axisdest
- will hold the resultrotate(double, double, double, Quaterniond)
public Quaterniond rotateLocalX(double angle)
this
quaternion rotating the given radians about the local x axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local x axispublic Quaterniond rotateLocalX(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the local x axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local x axisdest
- will hold the resultpublic Quaterniond rotateLocalY(double angle)
this
quaternion rotating the given radians about the local y axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local y axispublic Quaterniond rotateLocalY(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the local y axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local y axisdest
- will hold the resultpublic Quaterniond rotateLocalZ(double angle)
this
quaternion rotating the given radians about the local z axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local z axispublic Quaterniond rotateLocalZ(double angle, Quaterniond dest)
this
quaternion rotating the given radians about the local z axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be R * Q
. So when transforming a
vector v
with the new quaternion by using R * Q * v
, the
rotation represented by this
will be applied first!
angle
- the angle in radians to rotate about the local z axisdest
- will hold the resultpublic Quaterniond rotateXYZ(double angleX, double angleY, double angleZ)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles using rotation sequence XYZ.
This method is equivalent to calling: rotateX(angleX).rotateY(angleY).rotateZ(angleZ)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleX
- the angle in radians to rotate about the x axisangleY
- the angle in radians to rotate about the y axisangleZ
- the angle in radians to rotate about the z axispublic Quaterniond rotateXYZ(double angleX, double angleY, double angleZ, Quaterniond dest)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles using rotation sequence XYZ and store the result in dest
.
This method is equivalent to calling: rotateX(angleX, dest).rotateY(angleY).rotateZ(angleZ)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleX
- the angle in radians to rotate about the x axisangleY
- the angle in radians to rotate about the y axisangleZ
- the angle in radians to rotate about the z axisdest
- will hold the resultpublic Quaterniond rotateZYX(double angleZ, double angleY, double angleX)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence ZYX.
This method is equivalent to calling: rotateZ(angleZ).rotateY(angleY).rotateX(angleX)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleZ
- the angle in radians to rotate about the z axisangleY
- the angle in radians to rotate about the y axisangleX
- the angle in radians to rotate about the x axispublic Quaterniond rotateZYX(double angleZ, double angleY, double angleX, Quaterniond dest)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence ZYX and store the result in dest
.
This method is equivalent to calling: rotateZ(angleZ, dest).rotateY(angleY).rotateX(angleX)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleZ
- the angle in radians to rotate about the z axisangleY
- the angle in radians to rotate about the y axisangleX
- the angle in radians to rotate about the x axisdest
- will hold the resultpublic Quaterniond rotateYXZ(double angleZ, double angleY, double angleX)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence YXZ.
This method is equivalent to calling: rotateY(angleY).rotateX(angleX).rotateZ(angleZ)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleY
- the angle in radians to rotate about the y axisangleX
- the angle in radians to rotate about the x axisangleZ
- the angle in radians to rotate about the z axispublic Quaterniond rotateYXZ(double angleY, double angleX, double angleZ, Quaterniond dest)
this
quaternion rotating the given radians about the cartesian base unit axes,
called the euler angles, using the rotation sequence YXZ and store the result in dest
.
This method is equivalent to calling: rotateY(angleY, dest).rotateX(angleX).rotateZ(angleZ)
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angleY
- the angle in radians to rotate about the y axisangleX
- the angle in radians to rotate about the x axisangleZ
- the angle in radians to rotate about the z axisdest
- will hold the resultpublic Vector3d getEulerAnglesXYZ(Vector3d eulerAngles)
eulerAngles
.eulerAngles
- will hold the euler angles in radianspublic Quaterniond rotateAxis(double angle, double axisX, double axisY, double axisZ, Quaterniond dest)
this
quaternion rotating the given radians about the specified axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the specified axisaxisX
- the x coordinate of the rotation axisaxisY
- the y coordinate of the rotation axisaxisZ
- the z coordinate of the rotation axisdest
- will hold the resultpublic Quaterniond rotateAxis(double angle, Vector3d axis, Quaterniond dest)
this
quaternion rotating the given radians about the specified axis
and store the result in dest
.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the specified axisaxis
- the rotation axisdest
- will hold the resultrotateAxis(double, double, double, double, Quaterniond)
public Quaterniond rotateAxis(double angle, Vector3d axis)
this
quaternion rotating the given radians about the specified axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the specified axisaxis
- the rotation axisrotateAxis(double, double, double, double, Quaterniond)
public Quaterniond rotateAxis(double angle, double axisX, double axisY, double axisZ)
this
quaternion rotating the given radians about the specified axis.
If Q
is this
quaternion and R
the quaternion representing the
specified rotation, then the new quaternion will be Q * R
. So when transforming a
vector v
with the new quaternion by using Q * R * v
, the
rotation added by this method will be applied first!
angle
- the angle in radians to rotate about the specified axisaxisX
- the x coordinate of the rotation axisaxisY
- the y coordinate of the rotation axisaxisZ
- the z coordinate of the rotation axisrotateAxis(double, double, double, double, Quaterniond)
public Vector3d positiveX(Vector3d dir)
this
quaternion is applied.
This method is equivalent to the following code:
Quaterniond inv = new Quaterniond(this).invert(); inv.transform(dir.set(1, 0, 0));
dir
- will hold the direction of +Xpublic Vector3d positiveY(Vector3d dir)
this
quaternion is applied.
This method is equivalent to the following code:
Quaterniond inv = new Quaterniond(this).invert(); inv.transform(dir.set(0, 1, 0));
dir
- will hold the direction of +Ypublic Vector3d positiveZ(Vector3d dir)
this
quaternion is applied.
This method is equivalent to the following code:
Quaterniond inv = new Quaterniond(this).invert(); inv.transform(dir.set(0, 0, 1));
dir
- will hold the direction of +ZCopyright © 2015–2016 JOML. All rights reserved.