From 5f392792c50ea265b93d81540be5b5a23829216d Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Fri, 18 Oct 2024 10:35:42 -0600 Subject: [PATCH] Fix: trous, the good one --- src/surface.c | 77 +++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/src/surface.c b/src/surface.c index 12da109..8b44cb0 100644 --- a/src/surface.c +++ b/src/surface.c @@ -6,61 +6,60 @@ #define M_PI 3.14159265358979323846 #endif -#define WIDTH 0.5 - typedef void(*function_t)(float*,int, int, int); void mobius(float *d_surface, int i, int j, int grid_size) { - float u = (2*M_PI) * ((float)i/(grid_size) ); - float v = (2*WIDTH) * ((float)j/(grid_size) ) - WIDTH; + const float width = 0.5; + float u = (2*M_PI) * ((float)i/grid_size ); + float v = (2*width) * ((float)j/grid_size ) - width; - d_surface[0] = cos(u) + v * cos(u / 2) * cos(u); - d_surface[1] = sin(u) + v * cos(u / 2) * sin(u); - d_surface[2] = v * sin(u / 2); + d_surface[0] = cos(u) + v * cos(u / 2) * cos(u); + d_surface[1] = sin(u) + v * cos(u / 2) * sin(u); + d_surface[2] = v * sin(u / 2); } void toro(float *d_surface, int i, int j, int grid_size) { - float u = (2*M_PI) * ((float)i/(grid_size) ); - float v = (1*WIDTH) * ((float)j ); + float u = (2.0*M_PI) * ((float)i/grid_size ); + float v = (2.0*M_PI) * ((float)j/grid_size ); - d_surface[0] = (1 + 0.5*cos(v))*cos(u); - d_surface[1] = (1 + 0.5*cos(v)) * sin(u); - d_surface[2] = 0.5*sin(v); + d_surface[0] = (1 + 0.5*cos(v))*cos(u); + d_surface[1] = (1 + 0.5*cos(v))*sin(u); + d_surface[2] = 0.5*sin(v); } float * generate_surface(int grid_size) { - long size = grid_size*grid_size*2*3*3; - function_t f = toro; - float * d_surface; - int k=0; + long size = grid_size*grid_size*2*3*3; + function_t f = toro; + float * d_surface; + int k=0; - d_surface = malloc((size+1)*sizeof(float)); - d_surface[0] = size; + d_surface = malloc((size+1)*sizeof(float)); + d_surface[0] = size; - for (int i = 0; i < grid_size; i++) - { - for (int j = 0; j < grid_size; j++) - { - // Triángulo 1 - f(&d_surface[k + 1], i, j, grid_size); - k+=3; - f(&d_surface[k + 1], i + 1, j, grid_size); - k+=3; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=3; + for (int i = 0; i < grid_size; i++) + { + for (int j = 0; j < grid_size; j++) + { + // Triángulo 1 + f(&d_surface[k + 1], i, j, grid_size); + k+=3; + f(&d_surface[k + 1], i + 1, j, grid_size); + k+=3; + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=3; - // Triángulo 2 - f(&d_surface[k + 1], i, j, grid_size); - k+=3; - f(&d_surface[k + 1], i, j + 1, grid_size); - k+=3; - f(&d_surface[k + 1], i + 1, j + 1, grid_size); - k+=3; - } - } + // Triángulo 2 + f(&d_surface[k + 1], i, j, grid_size); + k+=3; + f(&d_surface[k + 1], i, j + 1, grid_size); + k+=3; + f(&d_surface[k + 1], i + 1, j + 1, grid_size); + k+=3; + } + } - return d_surface; + return d_surface; }