org.jmol.util
Class Quaternion
java.lang.Object
org.jmol.util.Quaternion
public class Quaternion
- extends Object
Method Summary |
Quaternion |
add(float x)
|
Quaternion |
div(Quaternion p)
|
static Quaternion[] |
div(Quaternion[] data1,
Quaternion[] data2,
int nMax,
boolean isRelative)
|
Quaternion |
divLeft(Quaternion p)
|
float |
dot(Quaternion q)
|
String |
draw(String prefix,
String id,
Point3f ptCenter,
float scale)
|
private void |
fixQ(Quaternion qNew)
|
Vector3f |
get3dProjection(Vector3f v3d)
|
String |
getInfo()
|
Matrix3f |
getMatrix()
|
Vector3f |
getNormal()
|
Vector3f |
getNormalDirected(Vector3f v0)
|
static Quaternion |
getQuaternionFrame(Point3f center,
Tuple3f x,
Tuple3f xy)
|
static Quaternion |
getQuaternionFrame(Vector3f vA,
Vector3f vB,
Vector3f vC,
boolean yBased)
|
private static Vector3f |
getRawNormal(Quaternion q)
|
float |
getTheta()
|
Point4f |
getThetaDirected(Point4f axisAngle)
|
float |
getThetaDirected(Vector3f vector)
|
float |
getThetaRadians()
|
Vector3f |
getVector(int i)
|
private Vector3f |
getVector(int i,
float scale)
|
Quaternion |
inv()
|
Quaternion |
leftDifference(Quaternion q2)
|
Quaternion |
mul(float x)
|
Quaternion |
mul(Quaternion p)
|
Quaternion |
negate()
|
private static Quaternion |
newMean(Quaternion[] data,
Quaternion mean)
|
Quaternion |
rightDifference(Quaternion q2)
|
void |
set(AxisAngle4f a)
|
void |
set(Matrix3f mat)
|
private void |
set(Point4f pt)
{x y z w} --> {q1 q2 q3 q0} and factored |
void |
set(Quaternion q)
|
void |
set(Tuple3f pt,
float theta)
q = (cos(theta/2), sin(theta/2) * n) |
private void |
setMatrix()
|
void |
setRef(Quaternion qref)
|
private static Quaternion |
simpleAverage(Quaternion[] ndata)
Just a starting point. |
static Quaternion |
sphereMean(Quaternion[] data,
float[] retStddev,
float criterion)
|
private static float |
stdDev(Quaternion[] data,
Quaternion mean)
|
AxisAngle4f |
toAxisAngle4f()
|
Point4f |
toPoint4f()
|
String |
toString()
Java axisAngle / plane / Point4f format
all have the format {x y z w}
so we go with that here as well |
Point3f |
transform(Point3f pt)
|
void |
transform(Point3f pt,
Point3f ptNew)
|
Vector3f |
transform(Vector3f v)
|
q0
public float q0
q1
public float q1
q2
public float q2
q3
public float q3
mat
public Matrix3f mat
qZero
private static final Point4f qZero
qTemp
private static final Quaternion qTemp
Quaternion
public Quaternion()
Quaternion
public Quaternion(Quaternion q)
Quaternion
public Quaternion(Tuple3f pt,
float theta)
Quaternion
public Quaternion(Matrix3f mat)
Quaternion
public Quaternion(AxisAngle4f a)
Quaternion
public Quaternion(Point4f pt)
Quaternion
public Quaternion(float q0,
float q1,
float q2,
float q3)
set
public void set(Quaternion q)
set
private void set(Point4f pt)
- {x y z w} --> {q1 q2 q3 q0} and factored
- Parameters:
pt
-
set
public void set(Tuple3f pt,
float theta)
- q = (cos(theta/2), sin(theta/2) * n)
- Parameters:
pt
- theta
-
set
public void set(AxisAngle4f a)
set
public void set(Matrix3f mat)
setRef
public void setRef(Quaternion qref)
getQuaternionFrame
public static final Quaternion getQuaternionFrame(Point3f center,
Tuple3f x,
Tuple3f xy)
getQuaternionFrame
public static final Quaternion getQuaternionFrame(Vector3f vA,
Vector3f vB,
Vector3f vC,
boolean yBased)
getMatrix
public Matrix3f getMatrix()
setMatrix
private void setMatrix()
add
public Quaternion add(float x)
mul
public Quaternion mul(float x)
mul
public Quaternion mul(Quaternion p)
div
public Quaternion div(Quaternion p)
divLeft
public Quaternion divLeft(Quaternion p)
dot
public float dot(Quaternion q)
inv
public Quaternion inv()
negate
public Quaternion negate()
fixQ
private void fixQ(Quaternion qNew)
getVector
public Vector3f getVector(int i)
getVector
private Vector3f getVector(int i,
float scale)
getNormal
public Vector3f getNormal()
- Returns:
- vector such that 0 <= angle <= 180
getRawNormal
private static Vector3f getRawNormal(Quaternion q)
getTheta
public float getTheta()
- Returns:
- 0 <= angle <= 180 in degrees
getThetaRadians
public float getThetaRadians()
getNormalDirected
public Vector3f getNormalDirected(Vector3f v0)
- Parameters:
v0
-
- Returns:
- vector option closest to v0
get3dProjection
public Vector3f get3dProjection(Vector3f v3d)
getThetaDirected
public Point4f getThetaDirected(Point4f axisAngle)
- Parameters:
axisAngle
-
- Returns:
- fill in theta of axisAngle such that
getThetaDirected
public float getThetaDirected(Vector3f vector)
- Parameters:
vector
- a vector, same as for getNormalDirected
- Returns:
- return theta
toPoint4f
public Point4f toPoint4f()
toAxisAngle4f
public AxisAngle4f toAxisAngle4f()
transform
public Point3f transform(Point3f pt)
transform
public void transform(Point3f pt,
Point3f ptNew)
transform
public Vector3f transform(Vector3f v)
leftDifference
public Quaternion leftDifference(Quaternion q2)
rightDifference
public Quaternion rightDifference(Quaternion q2)
getInfo
public String getInfo()
draw
public String draw(String prefix,
String id,
Point3f ptCenter,
float scale)
toString
public String toString()
- Java axisAngle / plane / Point4f format
all have the format {x y z w}
so we go with that here as well
- Overrides:
toString
in class Object
- Returns:
- "{q1 q2 q3 q0}"
div
public static Quaternion[] div(Quaternion[] data1,
Quaternion[] data2,
int nMax,
boolean isRelative)
- Parameters:
data1
- data2
- nMax
- > 0 --> limit to this numberisRelative
-
- Returns:
- pairwise array of data1 / data2 or data1 \ data2
sphereMean
public static Quaternion sphereMean(Quaternion[] data,
float[] retStddev,
float criterion)
simpleAverage
private static Quaternion simpleAverage(Quaternion[] ndata)
- Just a starting point.
get average normal vector
scale normal by average projection of vectors onto it
create quaternion from this 3D projection
- Parameters:
ndata
-
- Returns:
- approximate average
newMean
private static Quaternion newMean(Quaternion[] data,
Quaternion mean)
stdDev
private static float stdDev(Quaternion[] data,
Quaternion mean)
- Parameters:
data
- mean
-
- Returns:
- standard deviation in units of degrees