de.jreality.math
Class Quaternion

java.lang.Object
  extended by de.jreality.math.Quaternion
All Implemented Interfaces:
Serializable, Cloneable

public final class Quaternion
extends Object
implements Cloneable, Serializable

A simple quaternion class for support for FactoredMatrix and isometry generation in P3. Although the bulk of the methods are static, there are also some instance methods.

The generic calling convention is public static Quaternion method(Quaternion result, Quaternion q1, Quaternion q2) where if result is null, a new instance is created and the result is returned in it.

Consult also Rn for a description of conventions used in method design.

Author:
Charles Gunn
See Also:
Serialized Form

Field Summary
 double re
           
 double x
           
 double y
           
 double z
           
 
Constructor Summary
Quaternion()
          The default quaternion is 1.
Quaternion(double r, double dx, double dy, double dz)
           
Quaternion(Quaternion nq)
          A copy constructor.
 
Method Summary
static Quaternion add(Quaternion dst, Quaternion a, Quaternion b)
           
 double[] asDouble()
           
 double[] asDouble(double[] val)
           
 double[] asDouble(double[] val, int[] channels)
           
static double[] asDouble(double[] dst, Quaternion q)
           
static Quaternion conjugate(Quaternion dst, Quaternion src)
           
static Quaternion copy(Quaternion dst, Quaternion src)
           
static Quaternion divide(Quaternion dst, Quaternion a, Quaternion b)
           
static boolean equals(Quaternion a, Quaternion b, double tol)
          Check for numerical equality.
static boolean equalsRotation(Quaternion a, Quaternion b, double tol)
          Check if the rotations represented by the two quaternions are equal
static Quaternion exp(Quaternion dst, double t, Quaternion src)
           
static double[] IJK(double[] dst, Quaternion q)
          return imaginary part as a double array.
static double innerProduct(Quaternion a, Quaternion b)
           
static Quaternion invert(Quaternion dst, Quaternion src)
           
static double length(Quaternion q)
           
static double lengthSquared(Quaternion q)
           
static Quaternion linearInterpolation(Quaternion dst, Quaternion rot1, Quaternion rot2, double s)
           
static Quaternion makeRotationQuaternionAngle(Quaternion q, double angle, double[] axis)
           
static Quaternion makeRotationQuaternionCos(Quaternion q, double cos, double[] axis)
           
static Quaternion negate(Quaternion dst, Quaternion src)
           
static Quaternion normalize(Quaternion dst, Quaternion src)
           
static double[] quaternionToRotationMatrix(double[] rot, Quaternion qt)
           
static double[] quaternionToRotationMatrixOld(double[] rot, Quaternion qt)
          Convert the quaternion qt into a 3x3 rotation matrix.
static Quaternion rotationMatrixToQuaternion(Quaternion q, double[] mat)
          Convert the 3x3 rotation matrix mat into a quaternion.
 void setValue(double r, double dx, double dy, double dz)
           
static Quaternion star(Quaternion dst, Quaternion src)
          The conjugate of the inverse, or do I mean the inverse of the conjugate???
static Quaternion subtract(Quaternion dst, Quaternion a, Quaternion b)
           
static Quaternion times(Quaternion dst, double s, Quaternion src)
           
static Quaternion times(Quaternion dst, Quaternion a, Quaternion b)
           
 String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

re

public double re

x

public double x

y

public double y

z

public double z
Constructor Detail

Quaternion

public Quaternion()
The default quaternion is 1.


Quaternion

public Quaternion(Quaternion nq)
A copy constructor.

Parameters:
nq -

Quaternion

public Quaternion(double r,
                  double dx,
                  double dy,
                  double dz)
Method Detail

toString

public String toString()
Overrides:
toString in class Object

asDouble

public static double[] asDouble(double[] dst,
                                Quaternion q)

setValue

public void setValue(double r,
                     double dx,
                     double dy,
                     double dz)

copy

public static Quaternion copy(Quaternion dst,
                              Quaternion src)

IJK

public static double[] IJK(double[] dst,
                           Quaternion q)
return imaginary part as a double array.

Parameters:
dst -
q -
Returns:

equals

public static boolean equals(Quaternion a,
                             Quaternion b,
                             double tol)
Check for numerical equality.

Parameters:
a -
b -
tol -
Returns:

equalsRotation

public static boolean equalsRotation(Quaternion a,
                                     Quaternion b,
                                     double tol)
Check if the rotations represented by the two quaternions are equal

Parameters:
a -
b -
tol -
Returns:

exp

public static Quaternion exp(Quaternion dst,
                             double t,
                             Quaternion src)

add

public static Quaternion add(Quaternion dst,
                             Quaternion a,
                             Quaternion b)

negate

public static Quaternion negate(Quaternion dst,
                                Quaternion src)

conjugate

public static Quaternion conjugate(Quaternion dst,
                                   Quaternion src)

subtract

public static Quaternion subtract(Quaternion dst,
                                  Quaternion a,
                                  Quaternion b)

times

public static Quaternion times(Quaternion dst,
                               double s,
                               Quaternion src)

times

public static Quaternion times(Quaternion dst,
                               Quaternion a,
                               Quaternion b)

innerProduct

public static double innerProduct(Quaternion a,
                                  Quaternion b)

lengthSquared

public static double lengthSquared(Quaternion q)

length

public static double length(Quaternion q)

invert

public static Quaternion invert(Quaternion dst,
                                Quaternion src)

divide

public static Quaternion divide(Quaternion dst,
                                Quaternion a,
                                Quaternion b)

star

public static Quaternion star(Quaternion dst,
                              Quaternion src)
The conjugate of the inverse, or do I mean the inverse of the conjugate???

Parameters:
dst -
src -
Returns:

normalize

public static Quaternion normalize(Quaternion dst,
                                   Quaternion src)

makeRotationQuaternionAngle

public static Quaternion makeRotationQuaternionAngle(Quaternion q,
                                                     double angle,
                                                     double[] axis)

makeRotationQuaternionCos

public static Quaternion makeRotationQuaternionCos(Quaternion q,
                                                   double cos,
                                                   double[] axis)

rotationMatrixToQuaternion

public static Quaternion rotationMatrixToQuaternion(Quaternion q,
                                                    double[] mat)
Convert the 3x3 rotation matrix mat into a quaternion.

Parameters:
q -
mat -
Returns:

quaternionToRotationMatrixOld

public static double[] quaternionToRotationMatrixOld(double[] rot,
                                                     Quaternion qt)
Convert the quaternion qt into a 3x3 rotation matrix.

Parameters:
rot -
qt -
Returns:

quaternionToRotationMatrix

public static double[] quaternionToRotationMatrix(double[] rot,
                                                  Quaternion qt)

linearInterpolation

public static Quaternion linearInterpolation(Quaternion dst,
                                             Quaternion rot1,
                                             Quaternion rot2,
                                             double s)
Parameters:
object -
rot1 -
rot2 -
s -
Returns:

asDouble

public double[] asDouble()

asDouble

public double[] asDouble(double[] val)

asDouble

public double[] asDouble(double[] val,
                         int[] channels)