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 \ingroup PkgPeriodic4HyperbolicTriangulation2Concepts
\cgalConcept \cgalConcept
\cgalModifBegin
The concept `HyperbolicOctagonTranslation` describes the requirements for the class of The concept `HyperbolicOctagonTranslation` describes the requirements for an object that represents
hyperbolic translations specific to the Bolza surface. 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 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$: on the hyperbolic plane, and is specified by two complex numbers \f$\alpha\f$ and \f$\beta\f$:
\f[ \f[
g(z) = \frac{\alpha \cdot z + \beta}{\overline{\beta} \cdot z + \overline{\alpha}}, 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] \f]
A hyperbolic translation is also a word on the generators of the fundamental group where \f$\overline{a}\f$ and \f$\overline{b}\f$ denote the complex conjugates of \f$a\f$
of a hyperbolic surface. 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 Specifically for the group \f$\mathcal G\f$, let \f$[g_0, g_1, \ldots, g_7]\f$ be the set of its
application, we only need to deal with a finite set of hyperbolic translations from the generators, ordered counter-clockwise around the origin, with \f$g_k\f$ translating the origin
fundamental group of the Bolza surface. A notable property of these translations is that \f$O\f$ along the real axis in the positive direction. The coefficients \f$\alpha_k\f$ and \f$\beta_k\f$
their word length is at most four; the composition of two translation always gives a of each generator of this ordered set are given as
translation that can be simplified so that its length is at most four. For more details, \f[
see \cgalCite{cgal:btv-dtosl-16} and \cgalCite{cgal:it-idtbs-17}. \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 \cgalHasModel CGAL::Hyperbolic_octagon_translation
*/ */
@ -36,14 +44,22 @@ public:
/// \name Types /// \name Types
/// Number type of the coefficients of \f$\alpha\f$ and \f$\beta\f$. /// 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; typedef unspecified_type NT;
/// Represents a single letter of the word corresponding to the translation. /// \cgalModifBegin Represents a single letter of the word corresponding to the translation. \cgalModifEnd
typedef unspecified_type Word_letter; typedef unsigned short int Word_letter;
/// Word representation of the translation, a sequence of elements of type `Word_letter`. /// Word representation of the translation, a sequence of elements of type `Word_letter`.
typedef std::vector<Word_letter> Word; 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 /// \name Creation
/// Default constructor. Creates the identity translation. /// 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` /// 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. /// 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` /// 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. /// 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. /// Returns `true` if the current translation represents the identity element of the group.
bool is_identity(); 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 }; // 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 essential for the removal of existing vertices in a Delaunay triangulation of the
Bolza surface. 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 \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 it defines the hyperbolic translations that allow to encode the periodicity of the
triangulation. 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
*/ */