from_quat#
- classmethod Rotation.from_quat(cls, quat, *, scalar_first=False)#
- Initialize from quaternions. - Rotations in 3 dimensions can be represented using unit norm quaternions [1]. - The 4 components of a quaternion are divided into a scalar part - wand a vector part- (x, y, z)and can be expressed from the angle- thetaand the axis- nof a rotation as follows:- w = cos(theta / 2) x = sin(theta / 2) * n_x y = sin(theta / 2) * n_y z = sin(theta / 2) * n_z - There are 2 conventions to order the components in a quaternion: - scalar-first order – - (w, x, y, z)
- scalar-last order – - (x, y, z, w)
 - The choice is controlled by scalar_first argument. By default, it is False and the scalar-last order is assumed. - Advanced users may be interested in the “double cover” of 3D space by the quaternion representation [2]. As of version 1.11.0, the following subset (and only this subset) of operations on a - Rotation- rcorresponding to a quaternion- qare guaranteed to preserve the double cover property:- r = Rotation.from_quat(q),- r.as_quat(canonical=False),- r.inv(), and composition using the- *operator such as- r*r.- Parameters:
- quatarray_like, shape (N, 4) or (4,)
- Each row is a (possibly non-unit norm) quaternion representing an active rotation. Each quaternion will be normalized to unit norm. 
- scalar_firstbool, optional
- Whether the scalar component goes first or last. Default is False, i.e. the scalar-last order is assumed. 
 
- Returns:
- rotationRotationinstance
- Object containing the rotations represented by input quaternions. 
 
- rotation
 - References [2]- Hanson, Andrew J. “Visualizing quaternions.” Morgan Kaufmann Publishers Inc., San Francisco, CA. 2006. - Examples - >>> from scipy.spatial.transform import Rotation as R - A rotation can be initialzied from a quaternion with the scalar-last (default) or scalar-first component order as shown below: - >>> r = R.from_quat([0, 0, 0, 1]) >>> r.as_matrix() array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) >>> r = R.from_quat([1, 0, 0, 0], scalar_first=True) >>> r.as_matrix() array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) - It is possible to initialize multiple rotations in a single object by passing a 2-dimensional array: - >>> r = R.from_quat([ ... [1, 0, 0, 0], ... [0, 0, 0, 1] ... ]) >>> r.as_quat() array([[1., 0., 0., 0.], [0., 0., 0., 1.]]) >>> r.as_quat().shape (2, 4) - It is also possible to have a stack of a single rotation: - >>> r = R.from_quat([[0, 0, 0, 1]]) >>> r.as_quat() array([[0., 0., 0., 1.]]) >>> r.as_quat().shape (1, 4) - Quaternions are normalized before initialization. - >>> r = R.from_quat([0, 0, 1, 1]) >>> r.as_quat() array([0. , 0. , 0.70710678, 0.70710678])