Transformations
Transformations is a Python library for calculating 4x4 matrices for translating, rotating, reflecting, scaling, shearing, projecting, orthogonalizing, and superimposing arrays of 3D homogeneous coordinates, as well as for converting between rotation matrices, Euler angles, and quaternions. It is no longer actively developed and is largely superseded by other libraries.
Warnings
- deprecated The 'transformations' library is no longer actively developed and is largely superseded by other, more actively maintained modules like Pytransform3d, Scipy.spatial.transform, Transforms3d, or Numpy-quaternion. Consider using these alternatives for new projects.
- breaking The API is explicitly stated as 'not stable yet and is expected to change between revisions.' This means minor version updates might introduce breaking changes.
- gotcha Quaternions in this library are represented as `[w, x, y, z]`. This differs from some other common libraries (e.g., older ROS `tf.transformations` used `[x, y, z, w]`), which can lead to incorrect calculations if not handled carefully.
- gotcha The Python implementation of transformations is not optimized for speed. For performance-critical applications, consider using the `transformations.c` module (if available in your distribution) or alternative libraries that offer optimized (e.g., C/Cython backed) implementations.
- gotcha Transformation matrices generated by this library might require transposing when interfacing with some other graphics systems, such as OpenGL's `glMultMatrixd()`, due to differing column-major/row-major conventions.
Install
-
pip install -U transformations
Imports
- transformations
import transformations as tf
Quickstart
import numpy as np
import transformations as tf
# Create a rotation matrix around the Z-axis by 90 degrees (pi/2 radians)
angle = np.pi / 2
rotation_matrix = tf.rotation_matrix(angle, [0, 0, 1])
# Define a point in homogeneous coordinates (x, y, z, w=1)
point = np.array([1.0, 0.0, 0.0, 1.0])
# Apply the transformation
transformed_point = np.dot(rotation_matrix, point)
print(f"Original point: {point[:3]}")
print(f"Rotation matrix:\n{rotation_matrix}")
print(f"Transformed point: {transformed_point[:3]}")
# Create a translation matrix
translation_matrix = tf.translation_matrix([5.0, 2.0, 0.0])
# Concatenate transformations (apply rotation then translation)
combined_matrix = np.dot(translation_matrix, rotation_matrix)
combined_transformed_point = np.dot(combined_matrix, point)
print(f"\nCombined transformation matrix:\n{combined_matrix}")
print(f"Combined transformed point: {combined_transformed_point[:3]}")