public class Quaternion extends Object
Modifier and Type | Field and Description |
---|---|
private javajs.util.M3 |
mat |
float |
q0 |
float |
q1 |
float |
q2 |
float |
q3 |
private static javajs.util.P4 |
qZero |
private static double |
RAD_PER_DEG |
Constructor and Description |
---|
Quaternion() |
Modifier and Type | Method and Description |
---|---|
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,
javajs.util.P3 ptCenter,
float scale) |
javajs.util.V3 |
get3dProjection(javajs.util.V3 v3d) |
float[] |
getEulerZXZ() |
float[] |
getEulerZYZ() |
private float |
getFixFactor()
ensures
1) q0 > 0
or
2) q0 = 0 and q1 > 0
or
3) q0 = 0 and q1 = 0 and q2 > 0
or
4) q0 = 0 and q1 = 0 and q2 = 0 and q3 > 0
|
String |
getInfo() |
javajs.util.M3 |
getMatrix() |
javajs.util.V3 |
getNormal() |
javajs.util.V3 |
getNormalDirected(javajs.util.V3 v0) |
static Quaternion |
getQuaternionFrame(javajs.util.P3 center,
javajs.util.T3 x,
javajs.util.T3 xy)
returns a quaternion frame based on three points (center, x, and any point in xy plane)
or two vectors (vA, vB).
|
static Quaternion |
getQuaternionFrameV(javajs.util.V3 vA,
javajs.util.V3 vB,
javajs.util.V3 vC,
boolean yBased) |
private static javajs.util.V3 |
getRawNormal(Quaternion q) |
float |
getTheta() |
javajs.util.P4 |
getThetaDirected(javajs.util.P4 axisAngle) |
float |
getThetaDirectedV(javajs.util.V3 vector) |
float |
getThetaRadians() |
javajs.util.V3 |
getVector(int i) |
private javajs.util.V3 |
getVectorS(int i,
float scale) |
Quaternion |
inv() |
Quaternion |
leftDifference(Quaternion q2) |
Quaternion |
mul(float x) |
Quaternion |
mulQ(Quaternion p) |
Quaternion |
negate() |
static Quaternion |
new4(float q0,
float q1,
float q2,
float q3) |
static Quaternion |
newAA(javajs.util.A4 a) |
static Quaternion |
newM(javajs.util.M3 mat) |
private static Quaternion |
newMean(Quaternion[] data,
Quaternion mean) |
static Quaternion |
newP4(javajs.util.P4 pt) |
static Quaternion |
newQ(Quaternion q) |
static Quaternion |
newVA(javajs.util.T3 pt,
float theta) |
Quaternion |
rightDifference(Quaternion q2) |
void |
set(Quaternion q) |
void |
setAA(javajs.util.A4 a) |
void |
setM(javajs.util.M3 mat) |
private void |
setMatrix() |
private void |
setP4(javajs.util.P4 pt)
{x y z w} --> {q1 q2 q3 q0} and factored
|
void |
setRef(Quaternion qref) |
void |
setTA(javajs.util.T3 pt,
float theta)
q = (cos(theta/2), sin(theta/2) * n)
|
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) |
javajs.util.A4 |
toAxisAngle4f() |
javajs.util.P4 |
toPoint4f() |
String |
toString()
Java axisAngle / plane / Point4f format
all have the format {x y z w}
so we go with that here as well
|
javajs.util.V3 |
transform(javajs.util.V3 v) |
javajs.util.T3 |
transformP2(javajs.util.T3 pt,
javajs.util.T3 ptNew) |
javajs.util.P3 |
transformPt(javajs.util.P3 pt) |
public float q0
public float q1
public float q2
public float q3
private javajs.util.M3 mat
private static final javajs.util.P4 qZero
private static final double RAD_PER_DEG
public static Quaternion newQ(Quaternion q)
public static Quaternion newVA(javajs.util.T3 pt, float theta)
public static Quaternion newM(javajs.util.M3 mat)
public static Quaternion newAA(javajs.util.A4 a)
public static Quaternion newP4(javajs.util.P4 pt)
public static Quaternion new4(float q0, float q1, float q2, float q3)
public void set(Quaternion q)
private void setP4(javajs.util.P4 pt)
pt
- public void setTA(javajs.util.T3 pt, float theta)
pt
- theta
- public void setAA(javajs.util.A4 a)
public void setM(javajs.util.M3 mat)
public void setRef(Quaternion qref)
public static final Quaternion getQuaternionFrame(javajs.util.P3 center, javajs.util.T3 x, javajs.util.T3 xy)
center
- (null for vA/vB option)x
- xy
- public static final Quaternion getQuaternionFrameV(javajs.util.V3 vA, javajs.util.V3 vB, javajs.util.V3 vC, boolean yBased)
public javajs.util.M3 getMatrix()
private void setMatrix()
public Quaternion add(float x)
public Quaternion mul(float x)
public Quaternion mulQ(Quaternion p)
public Quaternion div(Quaternion p)
public Quaternion divLeft(Quaternion p)
public float dot(Quaternion q)
public Quaternion inv()
public Quaternion negate()
private float getFixFactor()
public javajs.util.V3 getVector(int i)
private javajs.util.V3 getVectorS(int i, float scale)
public javajs.util.V3 getNormal()
private static javajs.util.V3 getRawNormal(Quaternion q)
public float getTheta()
public float getThetaRadians()
public javajs.util.V3 getNormalDirected(javajs.util.V3 v0)
v0
- public javajs.util.V3 get3dProjection(javajs.util.V3 v3d)
public javajs.util.P4 getThetaDirected(javajs.util.P4 axisAngle)
axisAngle
- public float getThetaDirectedV(javajs.util.V3 vector)
vector
- a vector, same as for getNormalDirectedpublic javajs.util.P4 toPoint4f()
public javajs.util.A4 toAxisAngle4f()
public javajs.util.P3 transformPt(javajs.util.P3 pt)
public javajs.util.T3 transformP2(javajs.util.T3 pt, javajs.util.T3 ptNew)
public javajs.util.V3 transform(javajs.util.V3 v)
public Quaternion leftDifference(Quaternion q2)
public Quaternion rightDifference(Quaternion q2)
public String getInfo()
public String toString()
public static Quaternion[] div(Quaternion[] data1, Quaternion[] data2, int nMax, boolean isRelative)
data1
- data2
- nMax
- > 0 --> limit to this numberisRelative
- public static Quaternion sphereMean(Quaternion[] data, float[] retStddev, float criterion)
private static Quaternion simpleAverage(Quaternion[] ndata)
ndata
- private static Quaternion newMean(Quaternion[] data, Quaternion mean)
private static float stdDev(Quaternion[] data, Quaternion mean)
data
- mean
- public float[] getEulerZYZ()
public float[] getEulerZXZ()