modified concepts according to Monique's comments

This commit is contained in:
Iordan Iordanov 2018-09-07 11:26:38 +02:00
parent 23096bd0d7
commit f0897ef42a
3 changed files with 73 additions and 16 deletions

View File

@ -4,25 +4,33 @@
/*!
\ingroup PkgPeriodic4HyperbolicTriangulation2Concepts
\cgalConcept
The concept `HyperbolicOctagonTranslation` describes the requirements for the class of
hyperbolic translations specific to the Bolza surface.
\cgalModifBegin
The concept `HyperbolicOctagonTranslation` describes the requirements for an object that represents
a hyperbolic translation in the fundamental group \f$\mathcal G\f$ of the the Bolza surface.
Generally, a hyperbolic translation \f$g\f$ is an orientation-preserving isometry acting
on the hyperbolic plane, and is specified by two complex numbers \f$\alpha\f$ and \f$\beta\f$:
\f[
g(z) = \frac{\alpha \cdot z + \beta}{\overline{\beta} \cdot z + \overline{\alpha}},
\qquad |\alpha|^2 - |\beta|^2 = 1.
\qquad |\alpha|^2 - |\beta|^2 = 1,
\f]
A hyperbolic translation is also a word on the generators of the fundamental group
of a hyperbolic surface.
where \f$\overline{a}\f$ and \f$\overline{b}\f$ denote the complex conjugates of \f$a\f$
and \f$b\f$ respectively. A hyperbolic translation is also a word on the generators of the
fundamental group of a hyperbolic surface.
In our particular case, we consider an application specific to the Bolza surface. For our
application, we only need to deal with a finite set of hyperbolic translations from the
fundamental group of the Bolza surface. A notable property of these translations is that
their word length is at most four; the composition of two translation always gives a
translation that can be simplified so that its length is at most four. For more details,
see \cgalCite{cgal:btv-dtosl-16} and \cgalCite{cgal:it-idtbs-17}.
Specifically for the group \f$\mathcal G\f$, let \f$[g_0, g_1, \ldots, g_7]\f$ be the set of its
generators, ordered counter-clockwise around the origin, with \f$g_k\f$ translating the origin
\f$O\f$ along the real axis in the positive direction. The coefficients \f$\alpha_k\f$ and \f$\beta_k\f$
of each generator of this ordered set are given as
\f[
\alpha_k = 1 + \sqrt{2}, \qquad \beta_k = \exp\left(\tfrac{ik\pi}{4}\right)\sqrt{2}\sqrt{1+\sqrt{2}}.
\f]
Note that with the notation given in Section \ref P4HT2_thespace of the User manual, the ordered
set of generators can be written also as
\f[
[g_k, k = 0, \ldots, 7] = [ a, \overline{b}, c, \overline{d}, \overline{a}, b, \overline{c}, d ].
\f]
\cgalModifEnd
\cgalHasModel CGAL::Hyperbolic_octagon_translation
*/
@ -36,14 +44,22 @@ public:
/// \name Types
/// Number type of the coefficients of \f$\alpha\f$ and \f$\beta\f$.
/// This number type must be compatible with the field type `FT` of the concept
/// `Periodic_4HyperbolicDelaunayTriangulationTraits_2`.
typedef unspecified_type NT;
/// Represents a single letter of the word corresponding to the translation.
typedef unspecified_type Word_letter;
/// \cgalModifBegin Represents a single letter of the word corresponding to the translation. \cgalModifEnd
typedef unsigned short int Word_letter;
/// Word representation of the translation, a sequence of elements of type `Word_letter`.
typedef std::vector<Word_letter> Word;
/// \cgalModifBegin Represents a complex number with coefficients of type `NT`.\cgalModifEnd
typedef std::pair<NT,NT> Complex;
/// \cgalModifBegin Represents the coefficients \f$\alpha\f$ and \f$\beta\f$ of a hyperbolic translation.\cgalModifEnd
typedef std::pair<Complex,Complex> Coefficients;
/// \name Creation
/// Default constructor. Creates the identity translation.
@ -94,15 +110,36 @@ public:
/// Returns the coefficient \f$\alpha\f$ of the translation's matrix. The first element of the returned `pair`
/// contains the real part of \f$\alpha\f$. The second element contains its imaginary part.
std::pair<NT,NT> alpha() const;
Complex alpha() const;
/// Returns the coefficient \f$\beta\f$ of the translation's matrix. The first element of the returned `pair`
/// contains the real part of \f$\beta\f$. The second element contains its imaginary part.
std::pair<NT,NT> beta() const;
Complex beta() const;
/// Returns `true` if the current translation represents the identity element of the group.
bool is_identity();
/// \name Static Access Functions
/*!
\cgalModifBegin
Returns a vector containing the coefficients of the generators of \f$\mathcal G\f$ and of their inverses.
The translations must be given in the order:
\f[ [g_0, g_1, \ldots, g_7]. \f]
\cgalModifEnd
*/
static void get_generator_coefficients(std::vector< Coefficients >& gens);
/*!
\cgalModifBegin
Returns a vector containing the generators of \f$\mathcal G\f$ and their inverses.
The translations must be given in the order:
\f[ [g_0, g_1, \ldots, g_7]. \f]
\cgalModifEnd
*/
static void get_generators(std::vector<HyperbolicOctagonTranslation>& gens);
}; // end of class HyperbolicOctagonTranslation

View File

@ -14,6 +14,16 @@ to be fulfilled by any class used to instantiate the first template parameter of
essential for the removal of existing vertices in a Delaunay triangulation of the
Bolza surface.
\cgalModifBegin
The concept requires that two nested types are provided:
<ul>
<li> A field number type `FT` that must support exact computations with algebraic
numbers, in particular with nested square roots;
<li> A `Hyperbolic_translation` type, which satisfies the requirements described
in the concept `HyperbolicOctagonTranslation`.
</ul>
\cgalModifEnd
\cgalHasModel CGAL::Periodic_4_hyperbolic_Delaunay_triangulation_traits_2
*/

View File

@ -15,6 +15,16 @@ types and the operations defined on them in `HyperbolicDelaunayTriangulationTrai
it defines the hyperbolic translations that allow to encode the periodicity of the
triangulation.
\cgalModifBegin
The concept requires that two nested types are provided:
<ul>
<li> A field number type `FT` that must support exact computations with algebraic
numbers, in particular with nested square roots;
<li> A `Hyperbolic_translation` type, which satisfies the requirements described
in the concept `HyperbolicOctagonTranslation`.
</ul>
\cgalModifEnd
*/