From 805ff18e21c787bbcd176031ce64f98bd95957bc Mon Sep 17 00:00:00 2001 From: alan Date: Tue, 26 Nov 2024 22:21:56 -0600 Subject: [PATCH 1/3] expandiendo a Rn avance --- src/surface.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/src/surface.c b/src/surface.c index 2acc0e8..b568302 100644 --- a/src/surface.c +++ b/src/surface.c @@ -77,7 +77,7 @@ void klein(float *d_surface, int * coord, int grid_size) typedef void (*function_t)(float *, int *, int); -float *generate_data_surface(int grid_size, unsigned char *m) +/* float *generate_data_surface(int grid_size, unsigned char *m) { unsigned int i, j, k = 0; long size; @@ -96,26 +96,110 @@ float *generate_data_surface(int grid_size, unsigned char *m) for (j = 0; j < grid_size; j++) { // triangle 1, Front - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); + f(&d_surface[k + 1], &cara, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size); + f(&d_surface[k + 1], &cara, j}, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); + f(&d_surface[k + 1], &cara, j + 1}, grid_size); k += *m; // triangle 2, Back - f(&d_surface[k + 1], (int[2]){i, j}, grid_size); + f(&d_surface[k + 1], &cara, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size); + f(&d_surface[k + 1], &cara+ 1}, grid_size); k += *m; - f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size); + f(&d_surface[k + 1], &cara, j + 1}, grid_size); k += *m; } } + return d_surface; +} */ + +float *generate_data_surface(int grid_size, unsigned char *s) +{ + unsigned int i, j, k, o, p, l, n, m, q = 0; + long size; + function_t f; + float *d_surface; + int dim = 2; + + f = klein; + *s = 4; + + int cara[2]; + + size = grid_size * grid_size * 2 * dim * (*s); + d_surface = malloc((size + 1) * sizeof(float)); + d_surface[0] = size; + + for(o = 0; o < dim; o ++) + { + for (p = o + 1; p < dim; p++) + { + for (k = 0; k < (1 << o); k++) + { + for(l = 0; l < (1 << p); l += (1 << (o + 1))) + { + for(m = 0; m < (1 << dim); m += (1 << (p + 1))) + { + for(n = 0; n < dim; n++) + { + if(((k + l + m) & (1 << n)) == 0) + { + if(n != o && n != p) + cara[n] = 0; + } + else + { + if(n != o && n != p) + cara[n] = 1; + } + + for(i = 0; i < grid_size; i++) + { + cara[o] = i; + for (j = 0; j < grid_size; j++) + { + cara[p] = j; + + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + + cara[o] = i; + cara [p] = j; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + cara[o] = i + 1; + cara [p] = j + 1; + f(&d_surface[q + 1], cara, grid_size); + q += *s; + } + } + + + } + } + } + } + } + } + return d_surface; } + + static void __calculate_normal( float *p1, float *p2, float *p3, float *normal, unsigned char n) { From 8d1f54604ebda500d6524cfad222f01b1faa7b62 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 27 Nov 2024 00:20:51 -0600 Subject: [PATCH 2/3] Optimize and work with dim=2 --- src/surface.c | 97 +++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 53 deletions(-) diff --git a/src/surface.c b/src/surface.c index b568302..bc14bc7 100644 --- a/src/surface.c +++ b/src/surface.c @@ -90,6 +90,7 @@ typedef void (*function_t)(float *, int *, int); size = grid_size * grid_size * 6 * (*m); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; + ++d_surface; for (i = 0; i < grid_size; i++) { @@ -122,76 +123,66 @@ float *generate_data_surface(int grid_size, unsigned char *s) long size; function_t f; float *d_surface; - int dim = 2; + const int dim =2; + int cara[dim]; f = klein; *s = 4; - int cara[2]; - - size = grid_size * grid_size * 2 * dim * (*s); + size = grid_size * grid_size * 6 * (*s); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; - + for(o = 0; o < dim; o ++) - { - for (p = o + 1; p < dim; p++) + { + for (p = 0; p < o; p++) { - for (k = 0; k < (1 << o); k++) + for (k = 0; k < (1 << (dim-2)); k++) { - for(l = 0; l < (1 << p); l += (1 << (o + 1))) + for(n = 0; n < dim; n ++) { - for(m = 0; m < (1 << dim); m += (1 << (p + 1))) + if( n==o || n== p ) + continue; + + cara[n] = (k & (1< Date: Wed, 27 Nov 2024 17:21:59 -0600 Subject: [PATCH 3/3] Fix: encoding for n-cube faces --- src/surface.c | 82 +++++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 62 deletions(-) diff --git a/src/surface.c b/src/surface.c index bc14bc7..79f75af 100644 --- a/src/surface.c +++ b/src/surface.c @@ -29,6 +29,14 @@ void riemman(float *d_surface, int * coords, int grid_size) } +void cube( float *d_surface, int * coord, int grid_size ) +{ + unsigned char i; + + for(int i=0; i<4; i++ ) + d_surface[i]=(float)coord[i]/grid_size; +} + void mobius(float *d_surface, int * coord, int grid_size) { const float width = 0.5; @@ -50,20 +58,6 @@ void torus(float *d_surface, int * coord, int grid_size) d_surface[2] = 0.5 * sin(v); } -void torus_5d(float *d_surface, int * coord, int grid_size) -{ - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * M_PI) * ((float)coord[1] / grid_size); - float r1 = (float)coord[2] / grid_size; - float r2 = (float)coord[3] / grid_size; - - d_surface[0] = (r1 + r2 * cos(v)) * cos(u); - d_surface[1] = (r1 + r2 * cos(v)) * sin(u); - d_surface[2] = r2 * sin(v); - d_surface[3] = r1; - d_surface[4] = r2; -} - void klein(float *d_surface, int * coord, int grid_size) { float u = (2 * M_PI) * ((float)coord[0] / grid_size); @@ -77,59 +71,22 @@ void klein(float *d_surface, int * coord, int grid_size) typedef void (*function_t)(float *, int *, int); -/* float *generate_data_surface(int grid_size, unsigned char *m) -{ - unsigned int i, j, k = 0; - long size; - function_t f; - float *d_surface; - - f = klein; - *m = 4; - - size = grid_size * grid_size * 6 * (*m); - d_surface = malloc((size + 1) * sizeof(float)); - d_surface[0] = size; - ++d_surface; - - for (i = 0; i < grid_size; i++) - { - for (j = 0; j < grid_size; j++) - { - // triangle 1, Front - f(&d_surface[k + 1], &cara, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j}, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j + 1}, grid_size); - k += *m; - - // triangle 2, Back - f(&d_surface[k + 1], &cara, grid_size); - k += *m; - f(&d_surface[k + 1], &cara+ 1}, grid_size); - k += *m; - f(&d_surface[k + 1], &cara, j + 1}, grid_size); - k += *m; - } - } - - return d_surface; -} */ - float *generate_data_surface(int grid_size, unsigned char *s) { - unsigned int i, j, k, o, p, l, n, m, q = 0; - long size; + unsigned int i, j, k, o, p, l, n, m; + long size, q=0; function_t f; float *d_surface; const int dim =2; int cara[dim]; - f = klein; + char bits[dim+1]; + bits[dim]=0; + + f =klein ; *s = 4; - size = grid_size * grid_size * 6 * (*s); + size = grid_size * grid_size * 6 * (*s) * 24; d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; @@ -139,12 +96,13 @@ float *generate_data_surface(int grid_size, unsigned char *s) { for (k = 0; k < (1 << (dim-2)); k++) { - for(n = 0; n < dim; n ++) + unsigned char skip=0; + for(n = 0; n < dim-2; n++) { - if( n==o || n== p ) - continue; + if( n==(o-1) || n==p ) + skip++; - cara[n] = (k & (1<