Class QuaternionDouble

java.lang.Object
gaiasky.util.math.QuaternionDouble
All Implemented Interfaces:
Serializable

public class QuaternionDouble extends Object implements Serializable
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    double
     
    double
     
    double
     
    double
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    QuaternionDouble(double x, double y, double z, double w)
    Constructor, sets the four components of the quaternion.
    QuaternionDouble(com.badlogic.gdx.math.Quaternion quaternion)
    Constructor, sets the quaternion components from the given quaternion.
    Constructor, sets the quaternion components from the given quaternion.
    QuaternionDouble(Vector3d axis, double angle)
    Constructor, sets the quaternion from the given axis vector and the angle around that axis in degrees.
  • Method Summary

    Modifier and Type
    Method
    Description
    Conjugate the quaternion.
    cpy()
     
    double
    dot(double x, double y, double z, double w)
    Get the dot product between this and the other quaternion (commutative).
    static double
    dot(double x1, double y1, double z1, double w1, double x2, double y2, double z2, double w2)
    Get the dot product between the two quaternions (commutative).
    double
    Get the dot product between this and the other quaternion (commutative).
    boolean
     
    fromAxes(Vector3d xAxis, Vector3d yAxis, Vector3d zAxis)
    fromAxes creates a Quaternion that represents the coordinate system defined by three axes.
    fromRotationMatrix(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22)
     
    double
    Get the angle in degrees of the rotation this quaternion represents.
    double
    getAngleAround(double axisX, double axisY, double axisZ)
    Get the angle in degrees of the rotation around the specified axis.
    double
    Get the angle in degrees of the rotation around the specified axis.
    double
    getAngleAroundRad(double axisX, double axisY, double axisZ)
    Get the angle in radians of the rotation around the specified axis.
    double
    Get the angle in radians of the rotation around the specified axis.
    double
    Get the angle in radians of the rotation this quaternion represents.
    double
    Get the axis angle representation of the rotation in degrees.
    double
    Get the axis-angle representation of the rotation in radians.
    Gets the camera direction vector corresponding to this quaternion rotation.
    int
    Get the pole of the gimbal lock, if any.
    double
    Get the pitch euler angle in degrees, which is the rotation around the x axis.
    double
    Get the pitch euler angle in radians, which is the rotation around the x axis.
    double
    Get the roll euler angle in degrees, which is the rotation around the z axis.
    double
    Get the roll euler angle in radians, which is the rotation around the z axis.
    void
    getSwingTwist(double axisX, double axisY, double axisZ, QuaternionDouble swing, QuaternionDouble twist)
    Get the swing rotation and twist rotation for the specified axis.
    void
    Get the swing rotation and twist rotation for the specified axis.
    Gets the camera up vector corresponding to this quaternion rotation.
    double
    Get the yaw euler angle in degrees, which is the rotation around the y axis.
    double
    Get the yaw euler angle in radians, which is the rotation around the y axis.
    int
     
    idt()
    Sets the quaternion to an identity QuaternionDouble
    Sets the value of this quaternion to the quaternion inverse of itself.
    boolean
     
    boolean
    isIdentity(double tolerance)
     
    double
    len()
     
    static double
    len(double x, double y, double z, double w)
     
    double
     
    static double
    len2(double x, double y, double z, double w)
     
    mul(double scalar)
    Multiplies the components of this quaternion with the given scalar.
    mul(double x, double y, double z, double w)
    Multiplies this quaternion with another one in the form of this = this * other
    Multiplies this quaternion with another one in the form of this = this * other
    mulAdd(QuaternionDouble q, double s)
    Add quaternion q, scaled by s, to this quaternion (this = this + q * s)
    Multiplies this quaternion by the inverse of quaternion q1 and places the value into this quaternion.
    mulLeft(double x, double y, double z, double w)
    Multiplies this quaternion with another one in the form of this = other * this
    Multiplies this quaternion with another one in the form of this = other * this
    Pre-multiplies this quaternion by the inverse of quaternion q and places the value into this quaternion.
    void
    nlerp(QuaternionDouble q2, double blend)
    Normalized linear interpolation between the current instance and q2 using nlerp, and stores the result in the current instance.
    nor()
    Normalizes this quaternion to unit length.
    set(double x, double y, double z, double w)
    Sets the components of the quaternion
    set(com.badlogic.gdx.math.Quaternion quaternion)
    Sets the quaternion components from the given quaternion.
    set(QuaternionDouble quaternion)
    Sets the quaternion components from the given quaternion.
    set(Vector3d axis, double angle)
    Sets the quaternion components from the given axis and angle around that axis.
    setEulerAngles(double yaw, double pitch, double roll)
    Sets the quaternion to the given euler angles in degrees.
    setEulerAnglesRad(double yaw, double pitch, double roll)
    Sets the quaternion to the given euler angles in radians.
    setFromAxes(boolean normalizeAxes, double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)
    Sets the QuaternionDouble from the given x-, y- and z-axis.
    setFromAxes(double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)
    Sets the QuaternionDouble from the given x-, y- and z-axis which have to be orthonormal.
    setFromAxis(double x, double y, double z, double degrees)
    Sets the quaternion components from the given axis and angle around that axis.
    setFromAxis(Vector3d axis, double degrees)
    Sets the quaternion components from the given axis and angle around that axis.
    setFromAxisRad(double x, double y, double z, double radians)
    Sets the quaternion components from the given axis and angle around that axis.
    setFromAxisRad(Vector3d axis, double radians)
    Sets the quaternion components from the given axis and angle around that axis.
    Sets this quaternion from the given camera basis, using its direction and up vectors.
    setFromCross(double x1, double y1, double z1, double x2, double y2, double z2)
    Set this quaternion to the rotation between two vectors.
    Set this quaternion to the rotation between two vectors.
    setFromMatrix(boolean normalizeAxes, Matrix4d matrix)
    Sets the QuaternionDouble from the given matrix, optionally removing any scaling.
    Sets the QuaternionDouble from the given rotation matrix, which must not contain scaling.
    void
    slerp(QuaternionDouble end, double alpha)
    Spherical linear interpolation between this quaternion and the end quaternion, based on the alpha value in the range [0,1].
    void
    slerp2(QuaternionDouble end, double alpha)
    Second implementation of slerp, slightly different from the default one.
    void
    toMatrix(double[] matrix)
    Fills a 4x4 matrix with the rotation matrix represented by this quaternion.
     
    Transforms the given vector using this quaternion
    double[]
    Returns the components of this quaternion as an array of [x, y, z, w].

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • x

      public double x
    • y

      public double y
    • z

      public double z
    • w

      public double w
  • Constructor Details

    • QuaternionDouble

      public QuaternionDouble(double x, double y, double z, double w)
      Constructor, sets the four components of the quaternion.
      Parameters:
      x - The x-component
      y - The y-component
      z - The z-component
      w - The w-component
    • QuaternionDouble

      public QuaternionDouble()
    • QuaternionDouble

      public QuaternionDouble(QuaternionDouble quaternion)
      Constructor, sets the quaternion components from the given quaternion.
      Parameters:
      quaternion - The quaternion to copy.
    • QuaternionDouble

      public QuaternionDouble(com.badlogic.gdx.math.Quaternion quaternion)
      Constructor, sets the quaternion components from the given quaternion.
      Parameters:
      quaternion - The quaternion to copy.
    • QuaternionDouble

      public QuaternionDouble(Vector3d axis, double angle)
      Constructor, sets the quaternion from the given axis vector and the angle around that axis in degrees.
      Parameters:
      axis - The axis
      angle - The angle in degrees.
  • Method Details

    • len

      public static double len(double x, double y, double z, double w)
      Returns:
      the euclidean length of the specified quaternion
    • len2

      public static double len2(double x, double y, double z, double w)
    • dot

      public static double dot(double x1, double y1, double z1, double w1, double x2, double y2, double z2, double w2)
      Get the dot product between the two quaternions (commutative).
      Parameters:
      x1 - the x component of the first quaternion
      y1 - the y component of the first quaternion
      z1 - the z component of the first quaternion
      w1 - the w component of the first quaternion
      x2 - the x component of the second quaternion
      y2 - the y component of the second quaternion
      z2 - the z component of the second quaternion
      w2 - the w component of the second quaternion
      Returns:
      the dot product between the first and second quaternion.
    • set

      public QuaternionDouble set(double x, double y, double z, double w)
      Sets the components of the quaternion
      Parameters:
      x - The x-component
      y - The y-component
      z - The z-component
      w - The w-component
      Returns:
      This quaternion for chaining
    • set

      public QuaternionDouble set(QuaternionDouble quaternion)
      Sets the quaternion components from the given quaternion.
      Parameters:
      quaternion - The quaternion.
      Returns:
      This quaternion for chaining.
    • set

      public QuaternionDouble set(com.badlogic.gdx.math.Quaternion quaternion)
      Sets the quaternion components from the given quaternion.
      Parameters:
      quaternion - The quaternion.
      Returns:
      This quaternion for chaining.
    • set

      public QuaternionDouble set(Vector3d axis, double angle)
      Sets the quaternion components from the given axis and angle around that axis.
      Parameters:
      axis - The axis
      angle - The angle in degrees
      Returns:
      This quaternion for chaining.
    • cpy

      public QuaternionDouble cpy()
      Returns:
      a copy of this quaternion
    • len

      public double len()
      Returns:
      the Euclidean length of this quaternion
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • setEulerAngles

      public QuaternionDouble setEulerAngles(double yaw, double pitch, double roll)
      Sets the quaternion to the given euler angles in degrees.
      Parameters:
      yaw - the rotation around the y-axis in degrees
      pitch - the rotation around the x-axis in degrees
      roll - the rotation around the z-axis degrees
      Returns:
      this quaternion
    • setEulerAnglesRad

      public QuaternionDouble setEulerAnglesRad(double yaw, double pitch, double roll)
      Sets the quaternion to the given euler angles in radians.
      Parameters:
      yaw - the rotation around the y axis in radians
      pitch - the rotation around the x axis in radians
      roll - the rotation around the z axis in radians
      Returns:
      this quaternion
    • getGimbalPole

      public int getGimbalPole()
      Get the pole of the gimbal lock, if any.
      Returns:
      positive (+1) for north pole, negative (-1) for south pole, zero (0) when no gimbal lock
    • getRollRad

      public double getRollRad()
      Get the roll euler angle in radians, which is the rotation around the z axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the z axis in radians (between -PI and +PI)
    • getRoll

      public double getRoll()
      Get the roll euler angle in degrees, which is the rotation around the z axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the z axis in degrees (between -180 and +180)
    • getPitchRad

      public double getPitchRad()
      Get the pitch euler angle in radians, which is the rotation around the x axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the x axis in radians (between -(PI/2) and +(PI/2))
    • getPitch

      public double getPitch()
      Get the pitch euler angle in degrees, which is the rotation around the x axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the x axis in degrees (between -90 and +90)
    • getYawRad

      public double getYawRad()
      Get the yaw euler angle in radians, which is the rotation around the y axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the y axis in radians (between -PI and +PI)
    • getYaw

      public double getYaw()
      Get the yaw euler angle in degrees, which is the rotation around the y axis. Requires that this quaternion is normalized.
      Returns:
      the rotation around the y axis in degrees (between -180 and +180)
    • len2

      public double len2()
      Returns:
      the length of this quaternion without square root
    • nor

      public QuaternionDouble nor()
      Normalizes this quaternion to unit length.
      Returns:
      the quaternion for chaining.
    • conjugate

      public QuaternionDouble conjugate()
      Conjugate the quaternion.
      Returns:
      This quaternion for chaining
    • transform

      public Vector3d transform(Vector3d v)
      Transforms the given vector using this quaternion
      Parameters:
      v - Vector to transform
    • inverse

      public QuaternionDouble inverse()
      Sets the value of this quaternion to the quaternion inverse of itself. Warning: this quaternion will NOT be normalized. Note that if q not normalized, then q*qinverse=(0,0,0,1) whereas q*qconjugate =(0,0,0,Norm(q)*Norm(q))
      Returns:
      Quaternion
    • mul

      public QuaternionDouble mul(QuaternionDouble other)
      Multiplies this quaternion with another one in the form of this = this * other
      Parameters:
      other - QuaternionDouble to multiply with
      Returns:
      This quaternion for chaining
    • mul

      public QuaternionDouble mul(double x, double y, double z, double w)
      Multiplies this quaternion with another one in the form of this = this * other
      Parameters:
      x - the x component of the other quaternion to multiply with
      y - the y component of the other quaternion to multiply with
      z - the z component of the other quaternion to multiply with
      w - the w component of the other quaternion to multiply with
      Returns:
      This quaternion for chaining
    • mulLeft

      public QuaternionDouble mulLeft(QuaternionDouble other)
      Multiplies this quaternion with another one in the form of this = other * this
      Parameters:
      other - QuaternionDouble to multiply with
      Returns:
      This quaternion for chaining
    • mulLeft

      public QuaternionDouble mulLeft(double x, double y, double z, double w)
      Multiplies this quaternion with another one in the form of this = other * this
      Parameters:
      x - the x component of the other quaternion to multiply with
      y - the y component of the other quaternion to multiply with
      z - the z component of the other quaternion to multiply with
      w - the w component of the other quaternion to multiply with
      Returns:
      This quaternion for chaining
    • mulInverse

      public QuaternionDouble mulInverse(QuaternionDouble q1)
      Multiplies this quaternion by the inverse of quaternion q1 and places the value into this quaternion. The value of the argument quaternion is preserved (this = this * q^-1). Warning: this quaternion will NOT be normalized.
      Parameters:
      q1 - the other quaternion
      Returns:
      QuaternionDouble
    • mulLeftInverse

      public QuaternionDouble mulLeftInverse(QuaternionDouble q1)
      Pre-multiplies this quaternion by the inverse of quaternion q and places the value into this quaternion. The value of the argument quaternion is preserved (this = q^-1 * this). Warning: this quaternion will NOT be normalized.
      Parameters:
      q1 - the other quaternion
      Returns:
      QuaternionDouble
    • toMatrix

      public void toMatrix(double[] matrix)
      Fills a 4x4 matrix with the rotation matrix represented by this quaternion.
      Parameters:
      matrix - Matrix to fill
    • idt

      public QuaternionDouble idt()
      Sets the quaternion to an identity QuaternionDouble
      Returns:
      this quaternion for chaining
    • isIdentity

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

      public boolean isIdentity(double tolerance)
      Returns:
      If this quaternion is an identity QuaternionDouble
    • setFromAxis

      public QuaternionDouble setFromAxis(Vector3d axis, double degrees)
      Sets the quaternion components from the given axis and angle around that axis.
      Parameters:
      axis - The axis
      degrees - The angle in degrees
      Returns:
      This quaternion for chaining.
    • setFromAxisRad

      public QuaternionDouble setFromAxisRad(Vector3d axis, double radians)
      Sets the quaternion components from the given axis and angle around that axis.
      Parameters:
      axis - The axis
      radians - The angle in radians
      Returns:
      This quaternion for chaining.
    • setFromAxis

      public QuaternionDouble setFromAxis(double x, double y, double z, double degrees)
      Sets the quaternion components from the given axis and angle around that axis.
      Parameters:
      x - X direction of the axis
      y - Y direction of the axis
      z - Z direction of the axis
      degrees - The angle in degrees
      Returns:
      This quaternion for chaining.
    • setFromAxisRad

      public QuaternionDouble setFromAxisRad(double x, double y, double z, double radians)
      Sets the quaternion components from the given axis and angle around that axis.
      Parameters:
      x - X direction of the axis
      y - Y direction of the axis
      z - Z direction of the axis
      radians - The angle in radians
      Returns:
      This quaternion for chaining.
    • setFromMatrix

      public QuaternionDouble setFromMatrix(boolean normalizeAxes, Matrix4d matrix)
      Sets the QuaternionDouble from the given matrix, optionally removing any scaling.
    • setFromMatrix

      public QuaternionDouble setFromMatrix(Matrix4d matrix)
      Sets the QuaternionDouble from the given rotation matrix, which must not contain scaling.
    • setFromAxes

      public QuaternionDouble setFromAxes(double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz)

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

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

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

      public QuaternionDouble setFromCamera(Vector3d direction, Vector3d up)
      Sets this quaternion from the given camera basis, using its direction and up vectors.
      Parameters:
      direction - The camera direction vector.
      up - The camera up vector.
      Returns:
      The quaternion representing the current camera orientation.
    • getDirection

      public Vector3d getDirection(Vector3d aux)
      Gets the camera direction vector corresponding to this quaternion rotation.
      Parameters:
      aux - The vector to put the result.
      Returns:
      The direction vector.
    • getUp

      public Vector3d getUp(Vector3d aux)
      Gets the camera up vector corresponding to this quaternion rotation.
      Parameters:
      aux - The vector to put the result.
      Returns:
      The up vector.
    • fromAxes

      public QuaternionDouble fromAxes(Vector3d xAxis, Vector3d yAxis, Vector3d zAxis)
      fromAxes creates a Quaternion that represents the coordinate system defined by three axes. These axes are assumed to be orthogonal and no error checking is applied. Thus, the user must ensure that the three axes being provided indeed represents a proper right-handed coordinate system.
      Parameters:
      xAxis - vector representing the x-axis of the coordinate system.
      yAxis - vector representing the y-axis of the coordinate system.
      zAxis - vector representing the z-axis of the coordinate system.
    • fromRotationMatrix

      public QuaternionDouble fromRotationMatrix(double m00, double m01, double m02, double m10, double m11, double m12, double m20, double m21, double m22)
    • setFromAxes

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

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

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

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

      public QuaternionDouble setFromCross(Vector3d v1, Vector3d v2)
      Set this quaternion to the rotation between two vectors.
      Parameters:
      v1 - The base vector, which should be normalized.
      v2 - The target vector, which should be normalized.
      Returns:
      This quaternion for chaining
    • setFromCross

      public QuaternionDouble setFromCross(double x1, double y1, double z1, double x2, double y2, double z2)
      Set this quaternion to the rotation between two vectors.
      Parameters:
      x1 - The base vectors x value, which should be normalized.
      y1 - The base vectors y value, which should be normalized.
      z1 - The base vectors z value, which should be normalized.
      x2 - The target vector x value, which should be normalized.
      y2 - The target vector y value, which should be normalized.
      z2 - The target vector z value, which should be normalized.
      Returns:
      This quaternion for chaining
    • nlerp

      public void nlerp(QuaternionDouble q2, double blend)
      Normalized linear interpolation between the current instance and q2 using nlerp, and stores the result in the current instance.

      This method is often faster than slerp(QuaternionDouble, double), but less accurate.

      Parameters:
      q2 - the desired value when blend=1 (not null, unaffected).
      blend - the fractional change amount.
    • slerp

      public void slerp(QuaternionDouble end, double alpha)
      Spherical linear interpolation between this quaternion and the end quaternion, based on the alpha value in the range [0,1]. Taken from. Taken from Bones framework for JPCT, see here.
      Parameters:
      end - the end quaternion.
      alpha - alpha in the range [0,1].
    • slerp2

      public void slerp2(QuaternionDouble end, double alpha)
      Second implementation of slerp, slightly different from the default one.
      Parameters:
      end - The end quaternion.
      alpha - The fractional change amount in [0,1].
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

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

      public double dot(QuaternionDouble other)
      Get the dot product between this and the other quaternion (commutative).
      Parameters:
      other - the other quaternion.
      Returns:
      the dot product of this and the other quaternion.
    • dot

      public double dot(double x, double y, double z, double w)
      Get the dot product between this and the other quaternion (commutative).
      Parameters:
      x - the x component of the other quaternion
      y - the y component of the other quaternion
      z - the z component of the other quaternion
      w - the w component of the other quaternion
      Returns:
      the dot product of this and the other quaternion.
    • mul

      public QuaternionDouble mul(double scalar)
      Multiplies the components of this quaternion with the given scalar.
      Parameters:
      scalar - the scalar.
      Returns:
      this quaternion for chaining.
    • mulAdd

      public QuaternionDouble mulAdd(QuaternionDouble q, double s)
      Add quaternion q, scaled by s, to this quaternion (this = this + q * s)
      Returns:
      this quaternion for chaining.
    • getAxisAngle

      public double getAxisAngle(Vector3d axis)
      Get the axis angle representation of the rotation in degrees. The supplied vector will receive the axis (x, y and z values) of the rotation and the value returned is the angle in degrees around that axis. Note that this method will alter the supplied vector, the existing value of the vector is ignored. This will normalize this quaternion if needed. The received axis is a unit vector. However, if this is an identity quaternion (no rotation), then the length of the axis may be zero.
      Parameters:
      axis - vector which will receive the axis
      Returns:
      the angle in degrees
      See Also:
    • getAxisAngleRad

      public double getAxisAngleRad(Vector3d axis)
      Get the axis-angle representation of the rotation in radians. The supplied vector will receive the axis (x, y and z values) of the rotation and the value returned is the angle in radians around that axis. Note that this method will alter the supplied vector, the existing value of the vector is ignored. This will normalize this quaternion if needed. The received axis is a unit vector. However, if this is an identity quaternion (no rotation), then the length of the axis may be zero.
      Parameters:
      axis - vector which will receive the axis
      Returns:
      the angle in radians
      See Also:
    • getAngleRad

      public double getAngleRad()
      Get the angle in radians of the rotation this quaternion represents. Does not normalize the quaternion. Use getAxisAngleRad(Vector3d) to get both the axis and the angle of this rotation. Use getAngleAroundRad(Vector3d) to get the angle around a specific axis.
      Returns:
      the angle in radians of the rotation
    • getAngle

      public double getAngle()
      Get the angle in degrees of the rotation this quaternion represents. Use getAxisAngle(Vector3d) to get both the axis and the angle of this rotation. Use getAngleAround(Vector3d) to get the angle around a specific axis.
      Returns:
      the angle in degrees of the rotation
    • getSwingTwist

      public void getSwingTwist(double axisX, double axisY, double axisZ, QuaternionDouble swing, QuaternionDouble twist)

      Get the swing rotation and twist rotation for the specified axis. The twist rotation represents the rotation around the specified axis. The swing rotation represents the rotation of the specified axis itself, which is the rotation around an axis perpendicular to the specified axis.

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

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

      public void getSwingTwist(Vector3d axis, QuaternionDouble swing, QuaternionDouble twist)

      Get the swing rotation and twist rotation for the specified axis. The twist rotation represents the rotation around the specified axis. The swing rotation represents the rotation of the specified axis itself, which is the rotation around an axis perpendicular to the specified axis.

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

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

      public double getAngleAroundRad(double axisX, double axisY, double axisZ)
      Get the angle in radians of the rotation around the specified axis. The axis must be normalized.
      Parameters:
      axisX - the x component of the normalized axis for which to get the angle
      axisY - the y component of the normalized axis for which to get the angle
      axisZ - the z component of the normalized axis for which to get the angle
      Returns:
      the angle in radians of the rotation around the specified axis
    • getAngleAroundRad

      public double getAngleAroundRad(Vector3d axis)
      Get the angle in radians of the rotation around the specified axis. The axis must be normalized.
      Parameters:
      axis - the normalized axis for which to get the angle
      Returns:
      the angle in radians of the rotation around the specified axis
    • getAngleAround

      public double getAngleAround(double axisX, double axisY, double axisZ)
      Get the angle in degrees of the rotation around the specified axis. The axis must be normalized.
      Parameters:
      axisX - the x component of the normalized axis for which to get the angle
      axisY - the y component of the normalized axis for which to get the angle
      axisZ - the z component of the normalized axis for which to get the angle
      Returns:
      the angle in degrees of the rotation around the specified axis
    • getAngleAround

      public double getAngleAround(Vector3d axis)
      Get the angle in degrees of the rotation around the specified axis. The axis must be normalized.
      Parameters:
      axis - the normalized axis for which to get the angle
      Returns:
      the angle in degrees of the rotation around the specified axis
    • values

      public double[] values()
      Returns the components of this quaternion as an array of [x, y, z, w].
      Returns:
      The components of this quaternion as an array.