geomc 1.0
A c++ linear algebra template library
|
A rigid rotation and translation. More...
#include <geomc/linalg/Isometry.h>
Public Types | |
using | elem_t |
The coordinate type of this object. | |
using | point_t |
The type of a point in this object's space. | |
Public Member Functions | |
Isometry (const Rotation< T, N > &rx) | |
Isometry (const Rotation< T, N > &rx, const Vec< T, N > &tx) | |
Isometry (const Vec< T, N > &tx) | |
Vec< T, N > | apply_direction (const Vec< T, N > v) const |
Transform a direction vector. | |
Vec< T, N > | apply_inverse_direction (const Vec< T, N > v) const |
Inverse transform a direction vector. | |
Isometry< T, N > | inverse () const |
Compute the inverse of the isometry. | |
operator AffineTransform< T, N > () const | |
Cast to an affine transform. | |
template<index_t M> requires (M > N) | |
operator Isometry< T, M > () const | |
Extend the dimensionality of this isometry. | |
template<typename U, index_t M> requires (M > N) | |
operator Isometry< U, M > () const | |
Extend the dimensionality of this isometry and change the coordinate type. | |
template<typename U> | |
operator Isometry< U, N > () const | |
Cast the underlying coordinate type. | |
Isometry< T, N > | operator* (const Isometry< T, N > &other) const |
Compose two isometric transforms. | |
Vec< T, N > | operator* (const Vec< T, N > &p) const |
Transform a point. | |
Isometry< T, N > & | operator*= (const Isometry< T, N > &other) |
Compose in-place. | |
Isometry< T, N > | operator+= (const Vec< T, N > &v) |
Apply a translation. | |
Isometry< T, N > | operator/ (const Isometry< T, N > &other) const |
Compose with the inverse of an isometry. | |
Isometry< T, N > & | operator/= (const Isometry< T, N > &other) |
In-place apply inverse. | |
Public Attributes | |
Rotation< T, N > | rx |
Rotation component. | |
Vec< T, N > | tx |
Translation component. | |
Static Public Attributes | |
static constexpr index_t | N |
The dimension of this object. | |
Related Symbols | |
(Note that these are not member symbols.) | |
template<typename T, index_t N> | |
Isometry< T, N > | mix (T s, const Isometry< T, N > &a, const Isometry< T, N > &b) |
Continuously interpolate two isometries. | |
template<typename T, index_t N> | |
Capsule< T, N > | operator* (const Isometry< T, N > &xf, const Capsule< T, N > &c) |
Transform a capsule by an isometry. | |
template<typename T, index_t N> | |
Cylinder< T, N > | operator* (const Isometry< T, N > &xf, const Cylinder< T, N > &c) |
Transform a cylinder by an isometry. | |
template<typename T, index_t N, typename Shape> | |
Dilated< Shape > | operator* (const Isometry< T, N > &xf, const Dilated< Shape > &s) |
Transform a dilated shape by an isometry. | |
template<typename T, index_t N> | |
Simplex< T, N > | operator* (const Isometry< T, N > &xf, const Simplex< T, N > &s) |
Transform a simplex by an isometry. | |
template<typename T, index_t N> | |
Sphere< T, N > | operator* (const Isometry< T, N > &xf, const Sphere< T, N > &s) |
Transform a sphere by an isometry. | |
template<typename T, index_t N> | |
Isometry< T, N > | operator* (const Isometry< T, N > &xf, T s) |
Scale the magnitude of an isometry. | |
template<typename T, index_t N> | |
Isometry< T, N > | operator* (T s, const Isometry< T, N > &xf) |
Scale the magnitude of an isometry. A scale of 0 produces an identity transform. Applying a scale of 1 to an isometry results in no change. | |
template<typename T, index_t N> | |
Isometry< T, N > | operator+ (const Isometry< T, N > &i, const Vec< T, N > &v) |
Apply a translation to an isometry. | |
template<typename T, index_t N> | |
Isometry< T, N > | operator+ (const Vec< T, N > &v, const Isometry< T, N > &i) |
Apply a translation to an isometry. | |
template<typename T, index_t N> | |
Capsule< T, N > | operator/ (const Capsule< T, N > &c, const Isometry< T, N > &xf) |
Inverse-transform a capsule by an isometry. | |
template<typename T, index_t N> | |
Cylinder< T, N > | operator/ (const Cylinder< T, N > &c, const Isometry< T, N > &xf) |
Inverse-transform a cylinder by an isometry. | |
template<typename T, index_t N, typename Shape> | |
Dilated< Shape > | operator/ (const Dilated< Shape > &s, const Isometry< T, N > &xf) |
Inverse-transform a dilated shape by an isometry. | |
template<typename T, index_t N> | |
Simplex< T, N > | operator/ (const Simplex< T, N > &s, const Isometry< T, N > &xf) |
Inverse-transform a simplex by an isometry. | |
template<typename T, index_t N> | |
Sphere< T, N > | operator/ (const Sphere< T, N > &s, const Isometry< T, N > &xf) |
Inverse-transform a sphere by an isometry. | |
template<typename T, index_t N> | |
Vec< T, N > | operator/ (const Vec< T, N > &v, const Isometry< T, N > &i) |
Transform a point. | |
A rigid rotation and translation.
Isometric transfroms do not have any skew or scales; they preserve shapes, angles, and distances.
Isometries meet the Transform concept. For transforms which include a scaling, see Similarity. For nonuniform scaling or skew transforms, see AffineTransform.
Isometries compose like transforms, with multiplication on the left:
Isometry<T,N> i1, i2; Isometry<T,N> i3 = i2 * i1; // isometry which applies i1, then i2 Vec<T,N> v = i3 * i1 * v0; // apply i1 to v0, then i3 to the result Sphere<T,N> s = i1 * sphere; // apply i1 to a sphere
Isometries can be inverted with the /
operator:
Isometry<T,N> i1, i2; Isometry<T,N> i3 = i2 / i1; // isometry which takes i1 to i2 Vec<T,N> v = v0 / i3; // apply the inverse of i3 to v0
Compose with rotations and translations:
Isometry<T,3> i; Rotation<T,3> r; Isoemtry<T,3> i2 = r * i; // i2 is i with r post-applied Isometry<T,3> i3 = i + Vec<T,3>(1,2,3); // i3 is i translated by (1,2,3)
|
inherited |
The type of a point in this object's space.
An N-vector of T if N > 1, otherwise a T.