package framework.model3D; import java3d.AxisAngle4d; import java3d.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; } public void applyTo(Object3D o) { o.setQuaternion(this); } @Override public Quaternion3D clone() { 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; } }