Skip to main content

Homogeneous Transformation Matrices and Quaternions

Project description

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. Also includes an Arcball control object and functions to decompose transformation matrices.

Author:

Christoph Gohlke

Organization:

Laboratory for Fluorescence Dynamics. University of California, Irvine

License:

3-clause BSD

Version:

2019.2.20

Requirements

Revisions

2019.1.1

Update copyright year.

Notes

Transformations.py is no longer actively developed and has a few known issues and numerical instabilities. The module is mostly superseded by other modules for 3D transformations and quaternions:

The API is not stable yet and is expected to change between revisions.

Python 2.7 and 3.4 are deprecated.

This Python code is not optimized for speed. Refer to the transformations.c module for a faster implementation of some functions.

Documentation in HTML format can be generated with epydoc.

Matrices (M) can be inverted using numpy.linalg.inv(M), be concatenated using numpy.dot(M0, M1), or transform homogeneous coordinate arrays (v) using numpy.dot(M, v) for shape (4, *) column vectors, respectively numpy.dot(v, M.T) for shape (*, 4) row vectors (“array of points”).

This module follows the “column vectors on the right” and “row major storage” (C contiguous) conventions. The translation components are in the right column of the transformation matrix, i.e. M[:3, 3]. The transpose of the transformation matrices may have to be used to interface with other graphics systems, e.g. OpenGL’s glMultMatrixd(). See also [16].

Calculations are carried out with numpy.float64 precision.

Vector, point, quaternion, and matrix function arguments are expected to be “array like”, i.e. tuple, list, or numpy arrays.

Return types are numpy arrays unless specified otherwise.

Angles are in radians unless specified otherwise.

Quaternions w+ix+jy+kz are represented as [w, x, y, z].

A triple of Euler angles can be applied/interpreted in 24 ways, which can be specified using a 4 character string or encoded 4-tuple:

Axes 4-string: e.g. ‘sxyz’ or ‘ryxy’

  • first character : rotations are applied to ‘s’tatic or ‘r’otating frame

  • remaining characters : successive rotation axis ‘x’, ‘y’, or ‘z’

Axes 4-tuple: e.g. (0, 0, 0, 0) or (1, 1, 1, 1)

  • inner axis: code of axis (‘x’:0, ‘y’:1, ‘z’:2) of rightmost matrix.

  • parity : even (0) if inner axis ‘x’ is followed by ‘y’, ‘y’ is followed by ‘z’, or ‘z’ is followed by ‘x’. Otherwise odd (1).

  • repetition : first and last axis are same (1) or different (0).

  • frame : rotations are applied to static (0) or rotating (1) frame.

References

  1. Matrices and transformations. Ronald Goldman. In “Graphics Gems I”, pp 472-475. Morgan Kaufmann, 1990.

  2. More matrices and transformations: shear and pseudo-perspective. Ronald Goldman. In “Graphics Gems II”, pp 320-323. Morgan Kaufmann, 1991.

  3. Decomposing a matrix into simple transformations. Spencer Thomas. In “Graphics Gems II”, pp 320-323. Morgan Kaufmann, 1991.

  4. Recovering the data from the transformation matrix. Ronald Goldman. In “Graphics Gems II”, pp 324-331. Morgan Kaufmann, 1991.

  5. Euler angle conversion. Ken Shoemake. In “Graphics Gems IV”, pp 222-229. Morgan Kaufmann, 1994.

  6. Arcball rotation control. Ken Shoemake. In “Graphics Gems IV”, pp 175-192. Morgan Kaufmann, 1994.

  7. Representing attitude: Euler angles, unit quaternions, and rotation vectors. James Diebel. 2006.

  8. A discussion of the solution for the best rotation to relate two sets of vectors. W Kabsch. Acta Cryst. 1978. A34, 827-828.

  9. Closed-form solution of absolute orientation using unit quaternions. BKP Horn. J Opt Soc Am A. 1987. 4(4):629-642.

  10. Quaternions. Ken Shoemake. http://www.sfu.ca/~jwa3/cmpt461/files/quatut.pdf

  11. From quaternion to matrix and back. JMP van Waveren. 2005. http://www.intel.com/cd/ids/developer/asmo-na/eng/293748.htm

  12. Uniform random rotations. Ken Shoemake. In “Graphics Gems III”, pp 124-132. Morgan Kaufmann, 1992.

  13. Quaternion in molecular modeling. CFF Karney. J Mol Graph Mod, 25(5):595-604

  14. New method for extracting the quaternion from a rotation matrix. Itzhack Y Bar-Itzhack, J Guid Contr Dynam. 2000. 23(6): 1085-1087.

  15. Multiple View Geometry in Computer Vision. Hartley and Zissermann. Cambridge University Press; 2nd Ed. 2004. Chapter 4, Algorithm 4.7, p 130.

  16. Column Vectors vs. Row Vectors. http://steve.hollasch.net/cgindex/math/matrix/column-vec.html

Examples

>>> alpha, beta, gamma = 0.123, -1.234, 2.345
>>> origin, xaxis, yaxis, zaxis = [0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]
>>> I = identity_matrix()
>>> Rx = rotation_matrix(alpha, xaxis)
>>> Ry = rotation_matrix(beta, yaxis)
>>> Rz = rotation_matrix(gamma, zaxis)
>>> R = concatenate_matrices(Rx, Ry, Rz)
>>> euler = euler_from_matrix(R, 'rxyz')
>>> numpy.allclose([alpha, beta, gamma], euler)
True
>>> Re = euler_matrix(alpha, beta, gamma, 'rxyz')
>>> is_same_transform(R, Re)
True
>>> al, be, ga = euler_from_matrix(Re, 'rxyz')
>>> is_same_transform(Re, euler_matrix(al, be, ga, 'rxyz'))
True
>>> qx = quaternion_about_axis(alpha, xaxis)
>>> qy = quaternion_about_axis(beta, yaxis)
>>> qz = quaternion_about_axis(gamma, zaxis)
>>> q = quaternion_multiply(qx, qy)
>>> q = quaternion_multiply(q, qz)
>>> Rq = quaternion_matrix(q)
>>> is_same_transform(R, Rq)
True
>>> S = scale_matrix(1.23, origin)
>>> T = translation_matrix([1, 2, 3])
>>> Z = shear_matrix(beta, xaxis, origin, zaxis)
>>> R = random_rotation_matrix(numpy.random.rand(3))
>>> M = concatenate_matrices(T, R, Z, S)
>>> scale, shear, angles, trans, persp = decompose_matrix(M)
>>> numpy.allclose(scale, 1.23)
True
>>> numpy.allclose(trans, [1, 2, 3])
True
>>> numpy.allclose(shear, [0, math.tan(beta), 0])
True
>>> is_same_transform(R, euler_matrix(axes='sxyz', *angles))
True
>>> M1 = compose_matrix(scale, shear, angles, trans, persp)
>>> is_same_transform(M, M1)
True
>>> v0, v1 = random_vector(3), random_vector(3)
>>> M = rotation_matrix(angle_between_vectors(v0, v1), vector_product(v0, v1))
>>> v2 = numpy.dot(v0, M[:3,:3].T)
>>> numpy.allclose(unit_vector(v1), unit_vector(v2))
True

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

transformations-2019.2.20.tar.gz (44.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

transformations-2019.2.20-cp37-cp37m-win_amd64.whl (56.5 kB view details)

Uploaded CPython 3.7mWindows x86-64

transformations-2019.2.20-cp37-cp37m-win32.whl (50.9 kB view details)

Uploaded CPython 3.7mWindows x86

transformations-2019.2.20-cp36-cp36m-win_amd64.whl (55.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

transformations-2019.2.20-cp36-cp36m-win32.whl (50.2 kB view details)

Uploaded CPython 3.6mWindows x86

transformations-2019.2.20-cp35-cp35m-win_amd64.whl (55.9 kB view details)

Uploaded CPython 3.5mWindows x86-64

transformations-2019.2.20-cp35-cp35m-win32.whl (50.2 kB view details)

Uploaded CPython 3.5mWindows x86

transformations-2019.2.20-cp27-cp27m-win_amd64.whl (54.0 kB view details)

Uploaded CPython 2.7mWindows x86-64

transformations-2019.2.20-cp27-cp27m-win32.whl (48.1 kB view details)

Uploaded CPython 2.7mWindows x86

File details

Details for the file transformations-2019.2.20.tar.gz.

File metadata

  • Download URL: transformations-2019.2.20.tar.gz
  • Upload date:
  • Size: 44.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20.tar.gz
Algorithm Hash digest
SHA256 d0ca7b3376e784523501bf42f4c3d17ffefc1c2c59e9a8150c8c01f660a66340
MD5 65fae9d139c89cf4b1f384e20cff7155
BLAKE2b-256 7386f998df981331894f7a8613faa9a18acafab9caf2e1d6c377c7a3d94cad6b

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 56.5 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 cf0d7704aaba9379380ca2c2c38fcce5d8467206e994c6c5de4c7c5b3bdf3e12
MD5 07f2bf0ed506b5bf047f0fea9774a0af
BLAKE2b-256 a68f8a64e1b6859c7a22fc8eb177dabaccfa6a2ea44324edbbe9af42cbd8b232

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp37-cp37m-win32.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 50.9 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 fad262b1470f3600b217673fd72439cf7e67a5fd9bd1f035f359504204b17df8
MD5 11927096c9efb5a425a9e0e84c9feb8b
BLAKE2b-256 cc23c75a6e0653d4d196d455a96506ef44b316e7ceee5f8fc95c1a62458fd38f

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 55.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 492f546403444b571ca95c97d8a324d5411b0602d87ae51bbdadfb48b8f0eb49
MD5 91193442c44ad7f38d64e3eaea045136
BLAKE2b-256 b9df26bf51c8fb6ee59142e74fb318884477062dcbe6694340017e2c9c172e6f

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp36-cp36m-win32.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 50.2 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 427a14140b5dd6b09e9294dcd4c7e45ef9cad276a6e40b53440376e74ea94482
MD5 4234da438b808a6fd78d617d93456b5d
BLAKE2b-256 a2a6a3b0fcb6eb8723389fe59e6a32dd0bf217e264201af9a9491df30166628d

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 55.9 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 29b257907b6c96c5858ccff17b861937c97d1ac5422b232b3a4ba9f1b2865bba
MD5 bad223bd3b7ed11c325edd0e8b4cea66
BLAKE2b-256 b71005ab04cbdcf4502c1e62c4d1778f31f6c1e0183d18f8f78592994ed304a0

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp35-cp35m-win32.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 50.2 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 b2783216e4e23315a1d53cae93a6b8a87e4e1c4e71b23fb5a21b0956bd5e6047
MD5 24800b905becde7cc91849bb212284ba
BLAKE2b-256 d57713ccf5c2471596d177ebca4ed2744ed2beaf839913331a9e84f782d2db7d

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 0f1e9dd3ce4d80fad4e1fec45368a5321fd1585e54feb2d30b652d9e3d375982
MD5 74303149dd275c3ed5b2c2b09173b27d
BLAKE2b-256 4ff3c37f786d8e2b85b95b0a44053fd1b54b6e2736121a9fc625fb240603eca6

See more details on using hashes here.

File details

Details for the file transformations-2019.2.20-cp27-cp27m-win32.whl.

File metadata

  • Download URL: transformations-2019.2.20-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 48.1 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for transformations-2019.2.20-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 9988f078c75e8fd7a1721ff0d8308d60db56dbfebe16162513b797e3a9d7698d
MD5 fdbe98e41ed4de181ed1214e98f129ab
BLAKE2b-256 5243b0ee81c66a9953214fd1f0a4b5f41ade742678eb88349b65525a7b7512ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page