Newer
Older
RxSprout / app / src / main / java / framework / model3D / Quaternion3D.java
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;
	}
}