package framework.model3D;
import javax.vecmath.AxisAngle4d;
import javax.vecmath.Quat4d;
public class Quaternion3D extends Property3D{
private Quat4d quaternion;
//コンストラクタ=============================
public Quaternion3D(){
AxisAngle4d aa = new AxisAngle4d(0.0, 0.0, 1.0, 0.0);
quaternion = new Quat4d();
quaternion.set(aa);
}
public Quaternion3D(AxisAngle4d aa){
quaternion = new Quat4d();
quaternion.set(aa);
}
public Quaternion3D(double x,double y,double z,double w){
AxisAngle4d aa = new AxisAngle4d(x, y, z, w);
quaternion = new Quat4d();
quaternion.set(aa);
}
public Quaternion3D(Quaternion3D q){
this.quaternion = (Quat4d)q.getQuat().clone();
}
public Quat4d getQuat(){
return quaternion;
}
//ゲッタ=================================
public double getX(){
return quaternion.x;
}
public double getY(){
return quaternion.y;
}
public double getZ(){
return quaternion.z;
}
public double getW(){
return quaternion.w;
}
public Quaternion3D getInterpolate(Quaternion3D q,double alpha){
quaternion.interpolate(q.getQuat(), alpha);
return this;
}
public AxisAngle4d getAxisAngle() {
AxisAngle4d axisAngle = new AxisAngle4d();
axisAngle.set(quaternion);
return axisAngle;
}
//セッタ=================================
public Quaternion3D setQuaternion(double x,double y,double z,double w){
quaternion = new Quat4d(x, y, z, w);
return this;
}
public Quaternion3D setAxisAngle(double x,double y,double z,double w){
AxisAngle4d aa = new AxisAngle4d(x, y, z, w);
quaternion = new Quat4d();
quaternion.set(aa);
return this;
}
public Quaternion3D add(AxisAngle4d aa){
Quat4d q = new Quat4d();
q.set(aa);
q.mul(quaternion);
quaternion = q;
return this;
}
public Quaternion3D mul(Quaternion3D q){
quaternion.mul(q.getQuat());
return this;
}
@Override
public void applyTo(Object3D o) {
// TODO Auto-generated method stub
o.setQuaternion(this);
}
@Override
public Property3D clone() {
// TODO Auto-generated method stub
return new Quaternion3D(this);
}
public double norm() {
return quaternion.w * quaternion.w + quaternion.x * quaternion.x + quaternion.y * quaternion.y + quaternion.z * quaternion.z;
}
public Quaternion3D normalize() {
quaternion.normalize();
return this;
}
}