mirror of https://github.com/CGAL/cgal
removed concept for hyperbolic translaitons; imposed translation type; changed Point_2 to Hyperbolic_point_2; added missing constructor objects
This commit is contained in:
parent
0c5f5c64d1
commit
5b94910e40
|
|
@ -1,145 +0,0 @@
|
||||||
// Copyright (c) 2016-2017 INRIA Nancy - Grand Est (France).
|
|
||||||
// All rights reserved.
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\ingroup PkgPeriodic4HyperbolicTriangulation2Concepts
|
|
||||||
\cgalConcept
|
|
||||||
\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,
|
|
||||||
\f]
|
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
class HyperbolicOctagonTranslation {
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
/// \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.
|
|
||||||
HyperbolicOctagonTranslation();
|
|
||||||
|
|
||||||
/// Creates the translation described by the word `w`.
|
|
||||||
HyperbolicOctagonTranslation(Word w);
|
|
||||||
|
|
||||||
/// Creates the translation described by the one-letter word `l`.
|
|
||||||
HyperbolicOctagonTranslation(Word_letter l);
|
|
||||||
|
|
||||||
/// Creates the translation described by the two-letter word `lm`.
|
|
||||||
HyperbolicOctagonTranslation(Word_letter l, Word_letter m);
|
|
||||||
|
|
||||||
/// Creates the translation described by the three-letter word `lmn`.
|
|
||||||
HyperbolicOctagonTranslation(Word_letter l, Word_letter m, Word_letter n);
|
|
||||||
|
|
||||||
/// Creates the translation described by the four-letter word `lmno`.
|
|
||||||
HyperbolicOctagonTranslation(Word_letter l, Word_letter m, Word_letter n, Word_letter o);
|
|
||||||
|
|
||||||
|
|
||||||
/// \name Operations
|
|
||||||
|
|
||||||
/// Multiplication operator; composes the current translation with `other`.
|
|
||||||
HyperbolicOctagonTranslation operator*(const HyperbolicOctagonTranslation& other) const;
|
|
||||||
|
|
||||||
/// Difference operator; the difference of two translations \f$v\f$ and \f$w\f$ is defined as \f$v * w^{-1}\f$.
|
|
||||||
HyperbolicOctagonTranslation operator-(const HyperbolicOctagonTranslation& other) const;
|
|
||||||
|
|
||||||
/// Assignment operator; modifying the translation after the assignment leaves `other` unaffected.
|
|
||||||
HyperbolicOctagonTranslation& operator=(const HyperbolicOctagonTranslation& other);
|
|
||||||
|
|
||||||
/// Equality operator.
|
|
||||||
bool operator==(const Hyperbolic_octagon_translation<NT>& other) const;
|
|
||||||
|
|
||||||
/// Inequality operator.
|
|
||||||
bool operator!=(const Hyperbolic_octagon_translation<NT>& other) const;
|
|
||||||
|
|
||||||
/// Comparison operator.
|
|
||||||
/// The comparison is done on the ordering of the translations around the original domain.
|
|
||||||
bool operator<(const Hyperbolic_octagon_translation<NT>& other) const;
|
|
||||||
|
|
||||||
/// Returns the inverse of the current translation.
|
|
||||||
HyperbolicOctagonTranslation inverse() const;
|
|
||||||
|
|
||||||
|
|
||||||
/// \name Access Functions
|
|
||||||
|
|
||||||
/// 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.
|
|
||||||
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.
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
@ -7,23 +7,13 @@
|
||||||
|
|
||||||
\cgalRefines Periodic_4HyperbolicTriangulationTraits_2
|
\cgalRefines Periodic_4HyperbolicTriangulationTraits_2
|
||||||
|
|
||||||
The concept `Periodic_4HyperbolicDelaunayTriangulationTraits_2` refines the concept
|
The concept `Periodic_4HyperbolicDelaunayTriangulationTraits_2` adds a requirement
|
||||||
`Periodic_4HyperbolicDelaunayTriangulationTraits_2`. It adds a requirement that needs
|
to `Periodic_4HyperbolicDelaunayTriangulationTraits_2` that needs to be fulfilled
|
||||||
to be fulfilled by any class used to instantiate the first template parameter of the class
|
by any class used to instantiate the first template parameter of the class
|
||||||
`CGAL::Periodic_4_hyperbolic_Delaunay_triangulation_2`. The added requirement is
|
`CGAL::Periodic_4_hyperbolic_Delaunay_triangulation_2`. The added requirement is
|
||||||
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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -36,13 +26,15 @@ public:
|
||||||
/// \name Computation Types
|
/// \name Computation Types
|
||||||
/// @{
|
/// @{
|
||||||
/*!
|
/*!
|
||||||
|
\cgalModifBegin
|
||||||
Type that permits to compute the hyperbolic diameter of a circle.
|
Type that permits to compute the hyperbolic diameter of a circle.
|
||||||
Must provide the function operator
|
Must provide the function operator
|
||||||
|
|
||||||
`double operator()(Circle_2 c),`
|
`double operator()(Hyperbolic_point_2 p1, Hyperbolic_point_2 p2, Hyperbolic_point_2 p3),`
|
||||||
|
|
||||||
which returns a floating-point approximation of the hyperbolic diameter
|
which returns a floating-point approximation of the hyperbolic diameter
|
||||||
of the circle `c`.
|
of the circle defined by the points `p1, p2,` and `p3`.
|
||||||
|
\cgalModifEnd
|
||||||
*/
|
*/
|
||||||
typedef unspecified_type Compute_approximate_hyperbolic_diameter;
|
typedef unspecified_type Compute_approximate_hyperbolic_diameter;
|
||||||
/// @}
|
/// @}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,11 @@ Compare with Section \ref Section_2D_Triangulations_Software_Design of the 2D Tr
|
||||||
package. The vertices and neighbors are indexed counter-clockwise 0, 1, and 2. Neighbor `i` lies
|
package. The vertices and neighbors are indexed counter-clockwise 0, 1, and 2. Neighbor `i` lies
|
||||||
opposite to vertex `i`.
|
opposite to vertex `i`.
|
||||||
|
|
||||||
For periodic hyperbolic triangulations, the face base class needs to store three hyperbolic translations,
|
For periodic hyperbolic triangulations, the face base class needs to store three hyperbolic
|
||||||
one for each vertex. Applying each translation to the point stored in the corresponding vertex produces
|
translations, one for each vertex. Applying each translation to the point stored in the
|
||||||
the canonical representative of the face in the hyperbolic plane.
|
corresponding vertex produces the canonical representative of the face in the hyperbolic plane.
|
||||||
|
Hyperbolic translations are represented by a nested type which is provided by the concept
|
||||||
|
`Periodic_4HyperbolicDelaunayTriangulationTraits_2`.
|
||||||
|
|
||||||
\cgalHasModel CGAL::Periodic_4_hyperbolic_triangulation_face_base_2
|
\cgalHasModel CGAL::Periodic_4_hyperbolic_triangulation_face_base_2
|
||||||
|
|
||||||
|
|
@ -33,11 +35,8 @@ public:
|
||||||
|
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
typedef Periodic_4HyperbolicDelaunayTriangulationTraits_2 Geometric_traits;
|
||||||
/*!
|
typedef Geometric_traits::Hyperbolic_translation Hyperbolic_translation;
|
||||||
This must be a model of the concept HyperbolicOctagonTranslation.
|
|
||||||
*/
|
|
||||||
typedef undefined_type Hyperbolic_translation;
|
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,22 +7,16 @@
|
||||||
|
|
||||||
\cgalRefines HyperbolicDelaunayTriangulationTraits_2
|
\cgalRefines HyperbolicDelaunayTriangulationTraits_2
|
||||||
|
|
||||||
The concept `Periodic_4HyperbolicTriangulationTraits_2` refines the concept
|
The concept `Periodic_4HyperbolicTriangulationTraits_2` describes the set of requirements
|
||||||
`HyperbolicDelaunayTriangulationTraits_2`. It describes the set of requirements to be
|
to be fulfilled by any class used to instantiate the first template parameter of the class
|
||||||
fulfilled by any class used to instantiate the first template parameter of the class
|
`CGAL::Periodic_4_hyperbolic_triangulation_2`. In addition to the geometric types and the
|
||||||
`CGAL::Periodic_4_hyperbolic_triangulation_2`. In addition to the geometric
|
operations defined on them in `HyperbolicDelaunayTriangulationTraits_2`, it defines the
|
||||||
types and the operations defined on them in `HyperbolicDelaunayTriangulationTraits_2`,
|
hyperbolic translations that allow to encode the periodicity of the triangulation.
|
||||||
it defines the hyperbolic translations that allow to encode the periodicity of the
|
|
||||||
triangulation.
|
|
||||||
|
|
||||||
\cgalModifBegin
|
\cgalModifBegin
|
||||||
The concept requires that two nested types are provided:
|
The concept requires that a nested field number type `FT` is provided. The type `FT`
|
||||||
<ul>
|
must support exact computations with algebraic numbers, in particular with nested
|
||||||
<li> A field number type `FT` that must support exact computations with algebraic
|
square roots.
|
||||||
numbers, in particular with nested square roots;
|
|
||||||
<li> A `Hyperbolic_translation` type, which satisfies the requirements described
|
|
||||||
in the concept `HyperbolicOctagonTranslation`.
|
|
||||||
</ul>
|
|
||||||
\cgalModifEnd
|
\cgalModifEnd
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
@ -37,18 +31,10 @@ public:
|
||||||
/// \name Types
|
/// \name Types
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/*!
|
|
||||||
\cgalModifBegin
|
|
||||||
Represents a hyperbolic circle, i.e., a circle contained in the unit disk.
|
|
||||||
\cgalModifEnd
|
|
||||||
*/
|
|
||||||
typedef unspecified_type Circle_2;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Represents a hyperbolic translation.
|
Represents a hyperbolic translation.
|
||||||
Must be a model of the concept `HyperbolicOctagonTranslation`.
|
|
||||||
*/
|
*/
|
||||||
typedef unspecified_type Hyperbolic_translation;
|
typedef CGAL::Hyperbolic_octagon_translation<FT> Hyperbolic_translation;
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -57,7 +43,7 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Predicate type. Must provide the function operator
|
Predicate type. Must provide the function operator
|
||||||
|
|
||||||
`Bounded_side operator()(Point_2 p),`
|
`Bounded_side operator()(Hyperbolic_point_2 p),`
|
||||||
|
|
||||||
which returns the position of point `p` relative to the half-open
|
which returns the position of point `p` relative to the half-open
|
||||||
regular hyperbolic octagon.
|
regular hyperbolic octagon.
|
||||||
|
|
@ -71,12 +57,12 @@ public:
|
||||||
/*!
|
/*!
|
||||||
Construction type. Must provide the function operator
|
Construction type. Must provide the function operator
|
||||||
|
|
||||||
`Point_2 operator() ( const Point_2& pt, const HyperbolicOctagonTranslation& tr ) const,`
|
`Hyperbolic_point_2 operator() ( const Hyperbolic_point_2& pt, const Hyperbolic_translation& tr ) const,`
|
||||||
|
|
||||||
which returns the image of the point `pt` under the action of the
|
which returns the image of the point `pt` under the action of the
|
||||||
hyperbolic translation `tr`.
|
hyperbolic translation `tr`.
|
||||||
*/
|
*/
|
||||||
typedef unspecified_type Construct_point_2;
|
typedef unspecified_type Construct_hyperbolic_point_2;
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -92,8 +78,8 @@ public:
|
||||||
/// \name
|
/// \name
|
||||||
/// The following functions give access to the construction objects:
|
/// The following functions give access to the construction objects:
|
||||||
/// @{
|
/// @{
|
||||||
Construct_point_2
|
Construct_hyperbolic_point_2
|
||||||
construct_point_2_object() const;
|
construct_hyperbolic_point_2_object() const;
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue