axangles
¶
Functions for working with axis, angle rotations
See quaternions
for conversions between axis, angle pairs and
quaternions.
Terms used in function names:
mat : array shape (3, 3) (3D non-homogenous coordinates)
aff : affine array shape (4, 4) (3D homogenous coordinates)
axangle : rotations encoded by axis vector and angle scalar
|
Return axis, angle and point from affine |
|
Return affine encoding rotation by angle about axis. |
|
Rotation matrix for rotation angle angle around axis |
|
Return axis, angle and point from (3, 3) matrix mat |
aff2axangle¶
-
transforms3d.axangles.
aff2axangle
(aff)¶ Return axis, angle and point from affine
- Parameters
- affarray-like shape (4,4)
- Returns
- axisarray shape (3,)
vector giving axis of rotation
- anglescalar
angle of rotation in radians.
- pointarray shape (3,)
point around which rotation is performed
Notes
http://en.wikipedia.org/wiki/Rotation_matrix#Axis_of_a_rotation
Examples
>>> direc = np.random.random(3) - 0.5 >>> angle = (np.random.random() - 0.5) * (2*math.pi) >>> point = np.random.random(3) - 0.5 >>> R0 = axangle2aff(direc, angle, point) >>> direc, angle, point = aff2axangle(R0) >>> R1 = axangle2aff(direc, angle, point) >>> np.allclose(R0, R1) True
axangle2aff¶
-
transforms3d.axangles.
axangle2aff
(axis, angle, point=None)¶ Return affine encoding rotation by angle about axis.
- Parameters
- axisarray shape (3,)
vector giving axis of rotation
- anglescalar
angle of rotation, in radians.
- Returns
- Aarray shape (4, 4)
Affine array to be multiplied on left of coordinate column vector to apply given rotation.
Notes
Applying a rotation around a point is the same as applying a translation of
-point
to movepoint
to the origin, rotating, then applying a translation ofpoint
. IfR
is the rotation matrix, than the affine for the rotation about point P is:[R00, R01, R02, P0 - P0*R00 - P1*R01 - P2*R02] [R10, R11, R12, P1 - P0*R10 - P1*R11 - P2*R12] [R20, R21, R22, P2 - P0*R20 - P1*R21 - P2*R22] [ 0, 0, 0, 1]
(see derivations)
Examples
>>> angle = (np.random.random() - 0.5) * (2*math.pi) >>> direc = np.random.random(3) - 0.5 >>> point = np.random.random(3) - 0.5 >>> R0 = axangle2aff(direc, angle, point) >>> R1 = axangle2aff(direc, angle-2*math.pi, point) >>> np.allclose(R0, R1) True >>> R0 = axangle2aff(direc, angle, point) >>> R1 = axangle2aff(-direc, -angle, point) >>> np.allclose(R0, R1) True >>> I = np.identity(4, np.float64) >>> np.allclose(I, axangle2aff(direc, math.pi*2)) True >>> np.allclose(2., np.trace(axangle2aff(direc, ... math.pi/2, ... point))) True
axangle2mat¶
-
transforms3d.axangles.
axangle2mat
(axis, angle, is_normalized=False)¶ Rotation matrix for rotation angle angle around axis
- Parameters
- axis3 element sequence
vector specifying axis for rotation.
- anglescalar
angle of rotation in radians.
- is_normalizedbool, optional
True if axis is already normalized (has norm of 1). Default False.
- Returns
- matarray shape (3,3)
rotation matrix for specified rotation
Notes
From: http://en.wikipedia.org/wiki/Rotation_matrix#Axis_and_angle
mat2axangle¶
-
transforms3d.axangles.
mat2axangle
(mat, unit_thresh=1e-05)¶ Return axis, angle and point from (3, 3) matrix mat
- Parameters
- matarray-like shape (3, 3)
Rotation matrix
- unit_threshfloat, optional
Tolerable difference from 1 when testing for unit eigenvalues to confirm mat is a rotation matrix.
- Returns
- axisarray shape (3,)
vector giving axis of rotation
- anglescalar
angle of rotation in radians.
Notes
http://en.wikipedia.org/wiki/Rotation_matrix#Axis_of_a_rotation
Examples
>>> direc = np.random.random(3) - 0.5 >>> angle = (np.random.random() - 0.5) * (2*math.pi) >>> R0 = axangle2mat(direc, angle) >>> direc, angle = mat2axangle(R0) >>> R1 = axangle2mat(direc, angle) >>> np.allclose(R0, R1) True