Package toxi.geom

Class Quaternion

java.lang.Object
toxi.geom.Quaternion

public class Quaternion extends Object
Quaternion implementation with SLERP based on http://is.gd/2n9s
  • Field Details

    • DOT_THRESHOLD

      public static final float DOT_THRESHOLD
      See Also:
    • x

      public float x
    • y

      public float y
    • z

      public float z
    • w

      public float w
  • Constructor Details

    • Quaternion

      public Quaternion()
    • Quaternion

      public Quaternion(float w, float x, float y, float z)
    • Quaternion

      public Quaternion(float w, ReadonlyVec3D v)
    • Quaternion

      public Quaternion(Quaternion q)
  • Method Details

    • createFromAxisAngle

      public static Quaternion createFromAxisAngle(ReadonlyVec3D axis, float angle)
      Creates a Quaternion from a axis and a angle.
      Parameters:
      axis - axis vector (will be normalized)
      angle - angle in radians.
      Returns:
      new quaternion
    • createFromEuler

      public static Quaternion createFromEuler(float pitch, float yaw, float roll)
      Creates a Quaternion from Euler angles.
      Parameters:
      pitch - X-angle in radians.
      yaw - Y-angle in radians.
      roll - Z-angle in radians.
      Returns:
      new quaternion
    • createFromMatrix

      public static Quaternion createFromMatrix(Matrix4x4 m)
      Creates a quaternion from a rotation matrix. The algorithm used is from Allan and Mark Watt's "Advanced Animation and Rendering Techniques" (ACM Press 1992).
      Parameters:
      m - rotation matrix
      Returns:
      quaternion
    • getAlignmentQuat

      public static Quaternion getAlignmentQuat(ReadonlyVec3D dir, ReadonlyVec3D forward)
      Constructs a quaternion that rotates the vector given by the "forward" param into the direction given by the "dir" param.
      Parameters:
      dir -
      forward -
      Returns:
      quaternion
    • add

      public Quaternion add(Quaternion q)
    • addSelf

      public Quaternion addSelf(Quaternion q)
    • applyTo

      public Vec3D applyTo(Vec3D v)
    • copy

      public Quaternion copy()
    • dot

      public float dot(Quaternion q)
      Computes the dot product with the given quaternion.
      Parameters:
      q -
      Returns:
      dot product
    • getConjugate

      public Quaternion getConjugate()
      Computes this quaternion's conjugate, defined as the same w around the inverted axis.
      Returns:
      new conjugate quaternion
    • getMatrix

      @Deprecated public Matrix4x4 getMatrix()
      Deprecated.
      use toMatrix4x4() instead
      Returns:
      result matrix
    • getNormalized

      public Quaternion getNormalized()
      Computes normalized version of this quaternion.
      Returns:
      new normalized quaternion
    • identity

      public Quaternion identity()
    • interpolateTo

      public Quaternion interpolateTo(Quaternion target, float t)
      Spherical interpolation to target quaternion (code ported from GamaSutra)
      Parameters:
      target - quaternion
      t - interpolation factor (0..1)
      Returns:
      new interpolated quat
    • interpolateTo

      public Quaternion interpolateTo(Quaternion target, float t, InterpolateStrategy is)
      Parameters:
      target -
      t -
      is -
      Returns:
      interpolated quaternion as new instance
    • interpolateToSelf

      public Quaternion interpolateToSelf(Quaternion target, double t)
      Spherical interpolation to target quaternion (code ported from GamaSutra)
      Parameters:
      target - quaternion
      t - interpolation factor (0..1)
      Returns:
      new interpolated quat
    • interpolateToSelf

      public Quaternion interpolateToSelf(Quaternion target, float t, InterpolateStrategy is)
      Uses spherical interpolation to approach the target quaternion. The interpolation factor is manipulated by the chosen InterpolateStrategy first.
      Parameters:
      target -
      t -
      is -
      Returns:
      itself
    • magnitude

      public float magnitude()
    • multiply

      public Quaternion multiply(Quaternion q2)
    • normalize

      public Quaternion normalize()
    • scale

      public Quaternion scale(float t)
    • scaleSelf

      public Quaternion scaleSelf(float t)
    • set

      public Quaternion set(float w, float x, float y, float z)
    • set

      public Quaternion set(float w, Vec3D v)
    • set

      public Quaternion set(Quaternion q)
    • sub

      public Quaternion sub(Quaternion q)
    • subSelf

      public Quaternion subSelf(Quaternion q)
    • toArray

      public float[] toArray()
    • toAxisAngle

      public float[] toAxisAngle()
      Converts the quaternion into a float array consisting of: rotation angle in radians, rotation axis x,y,z
      Returns:
      4-element float array
    • toMatrix4x4

      public Matrix4x4 toMatrix4x4()
      Converts the quat to a 4x4 rotation matrix (in row-major format). Assumes the quat is currently normalized (if not, you'll need to call normalize() first).
      Returns:
      result matrix
    • toMatrix4x4

      public Matrix4x4 toMatrix4x4(Matrix4x4 result)
    • toString

      public String toString()
      Overrides:
      toString in class Object