Helios++
Helios software for LiDAR simulations
|
Interface that must be implemented by any class which represents a specific rigid motions. More...
#include <RigidMotion.h>
Public Types | |
enum | SuperType { R2_BASE , R2_REFLECTION , R2_ROTATION , R3_BASE , R3_REFLECTION , R3_ROTATION , R3_ROTATIONAL_SYMMETRY } |
Rigid motions supertypes. It is, the classification of a rigid motion attending to its fixed origin transformation matrix \(A\) only. More... | |
enum | Type { IDENTITY_R2 , TRANSLATION_R2 , REFLECTION_R2 , GLIDE_REFLECTION_R2 , ROTATION_R2 , IDENTITY_R3 , TRANSLATION_R3 , REFLECTION_R3 , GLIDE_REFLECTION_R3 , ROTATION_R3 , HELICAL_R3 , ROTATIONAL_SYMMETRY_R3 } |
Rigid motions types. It is, the classification of a rigid motion attending to its associated isometry and fixed points. More... | |
Public Member Functions | |
RigidMotion ()=default | |
RigidMotion default constructor. Notice rigid motions should be instantiated through corresponding factories. More... | |
RigidMotion (colvec const &C, arma::mat const &A) | |
Build a rigid motion with given translation vector and fixed origin transformation matrix. More... | |
virtual RigidMotion | compose (RigidMotion const rm) const |
Compose this rigid motion \(f\) with given rigid motion \(g\) so \(f \circ g = f(g(x))\) is obtained. More... | |
virtual void | composeInPlace (RigidMotion const rm) |
Like compose method but updating this rigid motion instead of returning a new one. More... | |
virtual SuperType | findSuperType () const |
Obtain the supertype of the rigid motion. More... | |
virtual bool | hasFixedPoints () const |
Check if rigid motion has fixed points. More... | |
virtual Type | findType () const |
Obtain the type of the rigid motion. More... | |
virtual size_t | findInvariantDimensionality () const |
Obtain the dimensionality of the associated invariant which can be either the set of fixed points or the associated invariant variety if there are no fixed points. More... | |
colvec | getC () const |
Get the translation column vector. More... | |
void | setC (colvec const C) |
Set the translation column vector. More... | |
arma::mat | getA () const |
Get the fixed origin transformation matrix. More... | |
void | setA (arma::mat const A) |
Set the fixed origin transformation matrix. More... | |
size_t | getDimensionality () const |
Get the dimensionality of the rigid motion. More... | |
Protected Attributes | |
colvec | C |
The column vector representing the translation. | |
arma::mat | A |
The matrix representing the fixed origin transformation. | |
Private Member Functions | |
template<typename Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Serialize a rigid motion to a stream of bytes. More... | |
Friends | |
class | boost::serialization::access |
Interface that must be implemented by any class which represents a specific rigid motions.
A rigid motion is an affine application which preserves the distance between points. It is both, an endomorphism and an isometry. Any rigid motion in an affine euclidean space can be expressed as a composition of a transformation which preserves the origin with a translation. Thus \(f\) is a rigid motion if it satisfies:
\[ \left\{\begin{array}{lll} f & : &\mathcal{A} \rightarrow \mathcal{A} \\ \left\Vert{\overrightarrow{AB}}\right\Vert & = & \left\Vert{\overrightarrow{f(A)f(B)}}\right\Vert \end{array}\right. \]
Any rigid motion can be expressed as an affine application \(Y = C + AX\) and also in block matrix notation as follows:
\[ \left[\begin{array}{c|c} 1 & 0 \\ \hline C & A \end{array}\right] = \left[\begin{array}{c|c} 1 & 0 \\ \hline C & I \end{array}\right] \left[\begin{array}{c|c} 1 & 0 \\ \hline 0 & A \end{array}\right] \]
Rigid motions supertypes. It is, the classification of a rigid motion attending to its fixed origin transformation matrix \(A\) only.
For instance, a reflection and a glide reflection would be different types which share the same supertype (reflection).
The supertype is determined attending to \(\mathrm{rank}\left(I-A\right)\)
NOTICE both identity and translation transformations are considered as base supertype, since both of them have \(\mathrm{rank}\left(I-A\right) = 0\)
Rigid motions types. It is, the classification of a rigid motion attending to its associated isometry and fixed points.
The type is fully determined attending to:
\[ \left\{\begin{array}{l} \mathrm{rank}\left(I-A\right) \\ \mathrm{rank}\left(I-A | C\right) \end{array}\right. \]
|
default |
RigidMotion default constructor. Notice rigid motions should be instantiated through corresponding factories.
|
inline |
Build a rigid motion with given translation vector and fixed origin transformation matrix.
C | Translation vector |
A | Fixed origin transformation matrix |
|
virtual |
Compose this rigid motion \(f\) with given rigid motion \(g\) so \(f \circ g = f(g(x))\) is obtained.
rm | Rigid motion to compose with, it is also notated as \(g\) |
|
virtual |
Like compose method but updating this rigid motion instead of returning a new one.
|
virtual |
Obtain the dimensionality of the associated invariant which can be either the set of fixed points or the associated invariant variety if there are no fixed points.
The dimensionality \(d\) of the associated invariant can be obtained computing as follows, where \(n\) is the dimensionality of the space for which the rigid motion is defined:
\[ d = n - \mathrm{rank}\left(I-A\right) \]
A dimension of \(0\) means the associated invariant is a point, a dimension of \(1\) means it is a line, a dimension of \(2\) means it is a plane and for the general case a dimension of \(d\) means the associated invariant is a \(d\)-dimensional hyperplane
|
virtual |
Obtain the supertype of the rigid motion.
|
virtual |
Obtain the type of the rigid motion.
|
inline |
Get the fixed origin transformation matrix.
|
inline |
Get the translation column vector.
|
inline |
Get the dimensionality of the rigid motion.
|
virtual |
Check if rigid motion has fixed points.
A rigid motion is said to have fixed points by applying Rouché-Frobenius theorem to check if the system \((I-A | C)\) can be solved or not. Thus, if \(\mathrm{rank}(I-A) = \mathrm{rank}(I-A|C)\) the system has solution and hence fixed points. Otherwise, the system cannot be solved so there are no fixed points.
|
inlineprivate |
Serialize a rigid motion to a stream of bytes.
Archive | Type of rendering |
ar | Specific rendering for the stream of bytes |
version | Version number for the rigid motion |
|
inline |
Set the fixed origin transformation matrix.
A | New fixed origin transformation matrix for the rigid motion |
|
inline |
Set the translation column vector.
C | New translation column vector for the rigid motion |