CGAL 6.1.1 - dD Geometry Kernel

Loading...
Searching...
No Matches
List of all members
CGAL::Aff_transformation_d< Kernel > Class Template Reference
Reference Manual » Kernel Objects

`#include <CGAL/Kernel_d/Aff_transformation_d.h>`

## Definition

template<typename Kernel>
class CGAL::Aff_transformation_d< Kernel >

An instance of the data type `Aff_transformation_d<Kernel>` is an affine transformation of \( d\)-dimensional space.

It is specified by a square matrix \( M\) of dimension \( d + 1\). All entries in the last row of `M` except the diagonal entry must be zero; the diagonal entry must be non-zero. A point \( p\) with homogeneous coordinates \( (p[0], \ldots, p[d])\) can be transformed into the point `p.transform(A)` = \( Mp\), where `A` is an affine transformation created from `M` by the constructors below.

Implementation

Affine Transformations are implemented by matrices of number type `RT` as a handle type. All operations like creation, initialization, input and output on a transformation \( t\) take time \(O(t.dimension()^2)\). `dimension()` takes constant time. The operations for inversion and composition have the cubic costs of the used matrix operations. The space requirement is \(O(t.dimension()^2)\).

## Types
typedef unspecified_type | LA
| the linear algebra layer.
typedef unspecified_type | Matrix
| the matrix type.

## Creation
| Aff_transformation_d ()
| introduces some transformation.
| Aff_transformation_d (int d, Identity_transformation)
| introduces the identity transformation in \( d\)-dimensional space.
| Aff_transformation_d (Matrix M)
| introduces the transformation of \( d\)-space specified by matrix \( M\).
template<typename Forward_iterator >
| Aff_transformation_d (Scaling, Forward_iterator start, Forward_iterator end)
| introduces the transformation of \( d\)-space specified by a diagonal matrix with entries `set [start,end)` on the diagonal (a scaling of the space).
| Aff_transformation_d (Translation, Vector_d< Kernel > v)
| introduces the translation by vector \( v\).
| Aff_transformation_d (int d, Scaling, RT num, RT den)
| returns a scaling by a scale factor `num/den`.
| Aff_transformation_d (int d, Rotation, RT sin_num, RT cos_num, RT den, int e1=0, int e2=1)
| returns a planar rotation with sine and cosine values `sin_num/den` and `cos_num/den` in the plane spanned by the base vectors \( b_{e1}\) and \( b_{e2}\) in \( d\)-space.
| Aff_transformation_d (int d, Rotation, Direction_d< Kernel > dir, RT num, RT den, int e1=0, int e2=1)
| returns a planar rotation within a two-dimensional linear subspace.

## Operations
int | dimension ()
| the dimension of the underlying space
const Matrix & | matrix ()
| returns the transformation matrix
Aff_transformation_d< Kernel > | inverse ()
| returns the inverse transformation.
Aff_transformation_d< Kernel > | operator* (const Aff_transformation_d< Kernel > &s)
| composition of transformations.

## Constructor & Destructor Documentation

## ◆ Aff_transformation_d() [1/5]

template<typename Kernel >

CGAL::Aff_transformation_d< Kernel >::Aff_transformation_d | ( | Matrix | M | ) |

introduces the transformation of \( d\)-space specified by matrix \( M\).

Precondition
  `M` is a square matrix of dimension \( d + 1\) where entries in the last row of `M` except the diagonal entry must be zero; the diagonal entry must be non-zero.

## ◆ Aff_transformation_d() [2/5]

template<typename Kernel >
template<typename Forward_iterator >

CGAL::Aff_transformation_d< Kernel >::Aff_transformation_d | ( | Scaling | ,
|  | Forward_iterator | start,
|  | Forward_iterator | end
| ) |  |

introduces the transformation of \( d\)-space specified by a diagonal matrix with entries `set [start,end)` on the diagonal (a scaling of the space).

Precondition
  `set [start,end)` is a vector of dimension \( d+1\).

## ◆ Aff_transformation_d() [3/5]

template<typename Kernel >

CGAL::Aff_transformation_d< Kernel >::Aff_transformation_d | ( | int | d,
|  | Scaling | ,
|  | RT | num,
|  | RT | den
| ) |  |

returns a scaling by a scale factor `num/den`.

Precondition
  `den != 0`.

## ◆ Aff_transformation_d() [4/5]

template<typename Kernel >

CGAL::Aff_transformation_d< Kernel >::Aff_transformation_d | ( | int | d,
|  | Rotation | ,
|  | RT | sin_num,
|  | RT | cos_num,
|  | RT | den,
|  | int | e1 = `0`,
|  | int | e2 = `1`
| ) |  |

returns a planar rotation with sine and cosine values `sin_num/den` and `cos_num/den` in the plane spanned by the base vectors \( b_{e1}\) and \( b_{e2}\) in \( d\)-space.

Thus the default use delivers a planar rotation in the \( x\)- \( y\) plane.

Precondition
  \( sin\_num^2 + cos\_num^2 = den^2\) and \( 0 \leq e_1 < e_2 < d\).
  `den != 0`.

## ◆ Aff_transformation_d() [5/5]

template<typename Kernel >

CGAL::Aff_transformation_d< Kernel >::Aff_transformation_d | ( | int | d,
|  | Rotation | ,
|  | Direction_d< Kernel > | dir,
|  | RT | num,
|  | RT | den,
|  | int | e1 = `0`,
|  | int | e2 = `1`
| ) |  |

returns a planar rotation within a two-dimensional linear subspace.

The subspace is spanned by the base vectors \( b_{e1}\) and \( b_{e2}\) in \( d\)-space. The rotation parameters are given by the \( 2\)-dimensional direction `dir`, such that the difference between the sines and cosines of the rotation given by `dir` and the approximated rotation are at most `num/den` each.

Precondition
  `dir.dimension() == 2`, `!dir.is_degenerate()` and `num < den` is positive, `den != 0`, \( 0 \leq e_1 < e_2 < d\).

## Member Function Documentation

## ◆ inverse()

template<typename Kernel >

Aff_transformation_d< Kernel > CGAL::Aff_transformation_d< Kernel >::inverse | ( |  | ) |

returns the inverse transformation.

Precondition
  `t.matrix()` is invertible.

## ◆ matrix()

template<typename Kernel >

const Matrix & CGAL::Aff_transformation_d< Kernel >::matrix | ( |  | ) |

returns the transformation matrix

## ◆ operator*()

template<typename Kernel >

Aff_transformation_d< Kernel > CGAL::Aff_transformation_d< Kernel >::operator* | ( | const Aff_transformation_d< Kernel > & | s | ) |

composition of transformations.

Note that transformations are not necessarily commutative. `t*s` is the transformation which transforms first by `t` and then by `s`.