Newer
Older
RxSprout / app / src / main / java / java3d / AxisAngle4d.java
package java3d;

public class AxisAngle4d {
	public double angle;
	public double x;
	public double y;
	public double z;
	static final double EPS = 1.0e-12;
	
	// コンストラクタ
	public AxisAngle4d() {
		x = 0.0;
		y = 0.0;
		z = 0.0;		
	}

	// コンストラクタ
	public AxisAngle4d(double px, double py, double pz, double pa) {
		x = px;
		y = py;
		z = pz;
		angle = pa;
	}
	
	public AxisAngle4d(AxisAngle4d a) {
		x = a.x;
		y = a.y;
		z = a.z;
		angle = a.angle;
	}

	public AxisAngle4d(Vector3d axis, double angle) {
		x = axis.x;
		y = axis.y;
		z = axis.z;
		this.angle = angle;
	}
	
	public final void set(Quat4d q1) {
        double mag = q1.x*q1.x + q1.y*q1.y + q1.z*q1.z;

        if( mag > EPS ) {
        	mag = Math.sqrt(mag);
        	double invMag = 1.0/mag;
	
        	x = q1.x*invMag;
        	y = q1.y*invMag;
        	z = q1.z*invMag;
        	angle = 2.0*Math.atan2(mag, q1.w);
		} else {
			x = 0.0d;
			y = 1.0d;
			z = 0.0d;
			angle = 0.0d;
        }
    }
	
	public AxisAngle4d clone() {
		return new AxisAngle4d(x, y, z, angle);
	}
	
}