From 00d1ddcdfedab1c2e1c71cee78e8bf93acb62704 Mon Sep 17 00:00:00 2001 From: Iordan Iordanov Date: Mon, 10 Sep 2018 10:37:27 +0200 Subject: [PATCH] modified hyperbolic translaiton class to remove unnecessary function for matrix access; created new function to recover individual generator --- .../internal/Qt/TriangulationGraphicsItem.h | 2 +- .../internal/hyperbolic_billiards_animation.h | 2 +- .../CGAL/Hyperbolic_octagon_translation.h | 88 ++++++++----------- 3 files changed, 38 insertions(+), 54 deletions(-) diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/Qt/TriangulationGraphicsItem.h b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/Qt/TriangulationGraphicsItem.h index 607a5f10c6e..976824d192f 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/Qt/TriangulationGraphicsItem.h +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/Qt/TriangulationGraphicsItem.h @@ -146,7 +146,7 @@ public: void initializeTranslations() { std::vector gens; - T::Hyperbolic_translation::get_generators(gens); + T::Hyperbolic_translation::generators(gens); std::vector tmp; for (int j = 0; j < gens.size(); j++) { tmp.push_back(gens[j]); diff --git a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/hyperbolic_billiards_animation.h b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/hyperbolic_billiards_animation.h index 19f3a57dee1..32e3c782292 100644 --- a/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/hyperbolic_billiards_animation.h +++ b/Periodic_4_hyperbolic_triangulation_2/demo/Periodic_4_hyperbolic_triangulation_2/include/internal/hyperbolic_billiards_animation.h @@ -187,7 +187,7 @@ MainWindow::animate() { // in this set with high probability. //std::cout << " ..checking generators "; std::cout.flush(); std::vector gens; - Hyperbolic_translation::get_generators(gens); + Hyperbolic_translation::generators(gens); for (int i = 0; i < gens.size(); i++) { o = gens[i]; if (check(dt.construct_point(p,o)) == CGAL::ON_BOUNDED_SIDE) { diff --git a/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Hyperbolic_octagon_translation.h b/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Hyperbolic_octagon_translation.h index cb1d34c826d..85deae40cba 100644 --- a/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Hyperbolic_octagon_translation.h +++ b/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Hyperbolic_octagon_translation.h @@ -36,15 +36,15 @@ class Hyperbolic_octagon_translation { public: typedef unsigned short int Word_letter; - enum Generator { - A = 0, - B_BAR, - C, - D_BAR, - A_BAR, - B, - C_BAR, - D + enum Generator: Word_letter { + A = 0, + B_BAR = 1, + C = 2, + D_BAR = 3, + A_BAR = 4, + B = 5, + C_BAR = 6, + D = 7 }; private: @@ -58,24 +58,33 @@ private: static std::map gmap; static std::map init_gmap() { - typedef typename std::pair Complex; - typedef typename std::pair Coefficient; - std::vector mcf; - get_generator_coefficients(mcf); + // Create matrix coefficients + FT sq2 = CGAL::sqrt(FT(2)); + FT xi = FT(1) + sq2; + FT rxi = CGAL::sqrt(xi); + // All matrices have the same _alpha + ECplx alpha(xi,FT(0)); - std::map m; - vector g; - for (int i = 0; i < mcf.size(); i++) { - Complex a = mcf[i].first; - Complex b = mcf[i].second; - ECplx alpha(a.first, a.second); - ECplx beta(b.first, b.second); - g.push_back( Matrix(alpha, beta) ); + // This vector holds the different _betas + std::vector< ECplx > beta; + + beta.push_back( ECplx( sq2 * rxi, 0 ) ); + beta.push_back( ECplx( rxi, rxi ) ); + beta.push_back( ECplx( 0, sq2 * rxi ) ); + beta.push_back( ECplx( -rxi, rxi ) ); + beta.push_back( ECplx( -sq2 * rxi, 0 ) ); + beta.push_back( ECplx( -rxi, -rxi ) ); + beta.push_back( ECplx( 0, -sq2 * rxi ) ); + beta.push_back( ECplx( rxi, -rxi ) ); + + std::vector g; + for (int i = 0; i < 8; i++) { + g.push_back(Matrix(alpha, beta[i])); } - - + + std::map m; m["_"] = Matrix(); m["0527"] = g[A]*g[B]*g[C]*g[D]; @@ -215,8 +224,11 @@ public: return _wrd.to_string(); } + static Self generator(const Word_letter wl) { + return Self(wl); + } - static void get_generators(std::vector& gens) { + static void generators(std::vector& gens) { gens.push_back(Self(A)); gens.push_back(Self(B_BAR)); gens.push_back(Self(C)); @@ -227,34 +239,6 @@ public: gens.push_back(Self(D)); } - static void get_generator_coefficients(std::vector< std::pair< std::pair, - std::pair > >& gens) { - typedef typename std::pair Complex; - typedef typename std::pair Matrix; - - FT sq2 = CGAL::sqrt(FT(2)); - FT xi = FT(1) + sq2; - FT rxi = CGAL::sqrt(xi); - - Complex alpha(xi,FT(0)); // all matrices have the same _alpha - - // This vector holds the different _betas - std::vector< Complex > beta; - - beta.push_back( Complex( sq2 * rxi, 0 ) ); - beta.push_back( Complex( rxi, rxi ) ); - beta.push_back( Complex( 0, sq2 * rxi ) ); - beta.push_back( Complex( -rxi, rxi ) ); - beta.push_back( Complex( -sq2 * rxi, 0 ) ); - beta.push_back( Complex( -rxi, -rxi ) ); - beta.push_back( Complex( 0, -sq2 * rxi ) ); - beta.push_back( Complex( rxi, -rxi ) ); - - for (int i = 0; i < 8; i++) { - gens.push_back(Matrix(alpha, beta[i])); - } - } - };