diff --git a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/HyperbolicOctagonTranslation.h b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/HyperbolicOctagonTranslation.h index 6952036efdd..00222814a20 100644 --- a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/HyperbolicOctagonTranslation.h +++ b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/HyperbolicOctagonTranslation.h @@ -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; + /// \cgalModifBegin Represents a complex number with coefficients of type `NT`.\cgalModifEnd + typedef std::pair Complex; + + /// \cgalModifBegin Represents the coefficients \f$\alpha\f$ and \f$\beta\f$ of a hyperbolic translation.\cgalModifEnd + typedef std::pair 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 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 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& gens); + }; // end of class HyperbolicOctagonTranslation diff --git a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicDelaunayTriangulationTraits_2.h b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicDelaunayTriangulationTraits_2.h index b13d088159e..38876c0ee49 100644 --- a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicDelaunayTriangulationTraits_2.h +++ b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicDelaunayTriangulationTraits_2.h @@ -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: +
    +
  • A field number type `FT` that must support exact computations with algebraic + numbers, in particular with nested square roots; +
  • A `Hyperbolic_translation` type, which satisfies the requirements described + in the concept `HyperbolicOctagonTranslation`. +
+\cgalModifEnd + \cgalHasModel CGAL::Periodic_4_hyperbolic_Delaunay_triangulation_traits_2 */ diff --git a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicTriangulationTraits_2.h b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicTriangulationTraits_2.h index 94dd52d063d..852d0ccf9a5 100644 --- a/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicTriangulationTraits_2.h +++ b/Periodic_4_hyperbolic_triangulation_2/doc/Periodic_4_hyperbolic_triangulation_2/Concepts/Periodic_4HyperbolicTriangulationTraits_2.h @@ -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: +
    +
  • A field number type `FT` that must support exact computations with algebraic + numbers, in particular with nested square roots; +
  • A `Hyperbolic_translation` type, which satisfies the requirements described + in the concept `HyperbolicOctagonTranslation`. +
+\cgalModifEnd + */