/*
 * Copyright (C) 2011-2015, Peter Abeles. All Rights Reserved.
 *
 * This file is part of Geometric Regression Library (GeoRegression).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package georegression.struct.so;


import java.io.Serializable;

/**
 * 

* Specifies a 3D rotation using a quaternion. q = w + x*i + y*j + z*k, where (w,x,y,z) are the parameters of * the quaternion and (i,j,k) are unit vectors representing the Cartesian axis. *

* *

* If the quaternion is a unit quaternion then the following is true:
* q = cos(theta/2) + (x*i + y*j + z*k)*sin(theta/2)
* where 'theta' is the angle of rotation, (x,y,z) is the unit axis of rotation. *

* * @author Peter Abeles */ public class Quaternion_F64 implements Serializable { /** * Describes the angle of rotation. See above for how it is encoded. */ public double w; /** * Axis of rotation */ public double x,y,z; public Quaternion_F64() { w = 1; } public Quaternion_F64(double w, double x, double y, double z) { set(w, x, y, z); } public void set( Quaternion_F64 quaternion ) { this.w = quaternion.w; this.x = quaternion.x; this.y = quaternion.y; this.z = quaternion.z; } public void set( double w, double x, double y, double z ) { this.w = w; this.x = x; this.y = y; this.z = z; } /** * Converts the quaternion into a unit quaternion. */ public void normalize() { double n = Math.sqrt( w * w + x * x + y * y + z * z); w /= n; x /= n; y /= n; z /= n; } @Override public String toString() { return getClass().getSimpleName()+"{ w = "+ w +" axis( "+ x +" "+ y +" "+ z +") }"; } }

Ads help maintain this website.