From 386387569bc31fffc31daada7f76e0ad7603f527 Mon Sep 17 00:00:00 2001 From: Florian Stecker Date: Fri, 19 Jan 2018 12:25:01 +0100 Subject: [PATCH] calculate inverses --- Makefile | 4 ++-- main.c | 2 +- triangle.c | 12 +++++++++++- triangle.h | 11 ++++++----- triangle_group.plt | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 7e0e4b5..4967d90 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ HEADERS=triangle.h linalg.h queue.h -#SPECIAL_OPTIONS=-O0 -g -D_DEBUG +SPECIAL_OPTIONS=-O0 -g -D_DEBUG #SPECIAL_OPTIONS=-O3 -pg -funroll-loops -fno-inline -SPECIAL_OPTIONS=-O3 -flto -funroll-loops -Winline +#SPECIAL_OPTIONS=-O3 -flto -funroll-loops -Winline #SPECIAL_OPTIONS= OPTIONS=-m64 -march=native -mtune=native -std=gnu99 -D_GNU_SOURCE $(SPECIAL_OPTIONS) diff --git a/main.c b/main.c index 3278513..1ec0af4 100644 --- a/main.c +++ b/main.c @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) // the real action generate_triangle_group(group, MAX_ELEMENTS, 5, 9, 7); // initialize_triangle_generators(gen, 1.0/5, 1.0/5, 1.0/5, 1.0); // Fuchsian - initialize_triangle_generators(gen, 3.0/5.0, 5.0/9.0, 3.0/7.0, atof(argv[1])); + initialize_triangle_generators(gen, 3.0/5.0, 3.0/5.0, 3.0/5.0, atof(argv[1])); gsl_matrix_set_identity(matrices[0]); for(int i = 1; i < MAX_ELEMENTS; i++) diff --git a/triangle.c b/triangle.c index 011d778..5b23d10 100644 --- a/triangle.c +++ b/triangle.c @@ -23,7 +23,7 @@ int generate_triangle_group(groupelement_t *group, int size, int k1, int k2, int { queue_t q; int id, n; - groupelement_t *cur; + groupelement_t *cur, *inv; int k[3] = {k1, k2, k3}; @@ -57,5 +57,15 @@ int generate_triangle_group(groupelement_t *group, int size, int k1, int k2, int } } + for(int i = 0; i < size; i++) { + cur = &group[i]; + inv = &group[0]; + while(cur->parent && inv) { + inv = inv->adj[cur->letter]; + cur = cur->parent; + } + group[i].inverse = inv; + } + return n; } diff --git a/triangle.h b/triangle.h index d78241f..076f6d4 100644 --- a/triangle.h +++ b/triangle.h @@ -8,11 +8,12 @@ #include "queue.h" typedef struct _groupelement { - int id; - int length; - struct _groupelement *adj[3]; - struct _groupelement *parent; - int letter; + int id; + int length; + struct _groupelement *adj[3]; + struct _groupelement *parent; + struct _groupelement *inverse; + int letter; } groupelement_t; int generate_triangle_group(groupelement_t *group, int size, int k1, int k2, int k3); diff --git a/triangle_group.plt b/triangle_group.plt index 0f90f46..b5573eb 100644 --- a/triangle_group.plt +++ b/triangle_group.plt @@ -11,7 +11,7 @@ set yrange [0:20] set grid set parametric -plot file using 1:2 w p pt 7 ps 1 lc 1 t "" +plot file using 2:3 w p pt 7 ps 1 lc 1 t "" pause mouse keypress if(MOUSE_KEY == 60) param=param-0.02