From f33b8f67b592cf0f2e519314928d61c521ce8536 Mon Sep 17 00:00:00 2001 From: alan Date: Sun, 1 Dec 2024 14:49:02 -0600 Subject: [PATCH] esfera y espacios lente agregados --- src/surface.c | 53 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/src/surface.c b/src/surface.c index 12a99ab..73b63f0 100644 --- a/src/surface.c +++ b/src/surface.c @@ -66,6 +66,41 @@ void cube(float *d_surface, int *coord, int grid) d_surface[i] = ((float)coord[i] / grid) - 0.5; } +void sphere(float *d_surface, int *coord, int grid) +{ + for (int i = 0; i < parm.m; i++) + d_surface[i] = ((float)coord[i] / grid) - 0.5; + + float norm = 0; + for(int i = 0; i < parm.m; i++) + norm += d_surface[i] * d_surface[i]; + + for (int i = 0; i < parm.m; i++) + d_surface[i] = d_surface[i] / sqrt(norm); +} + +void lens(float *d_surface, int *coord, int grid) +{ + int p = 7; + int q = 1; + + float sphere[4]; + for (int i = 0; i < 4; i++) + sphere[i] = ((float)coord[i] / grid) - 0.5; + + float norm = 0; + for(int i = 0; i < 4; i++) + norm += sphere[i] * sphere[i]; + + for (int i = 0; i < 4; i++) + sphere[i] = sphere[i] / sqrt(norm); + + d_surface[0] = (sphere[0] * cos(2 * M_PI / p)) - (sphere[1] * sin(2 * M_PI / p)); + d_surface[1] = (sphere[0] * sin(2 * M_PI / p)) + (sphere[1] * cos(2 * M_PI / p)); + d_surface[2] = (sphere[2] * cos(2 * M_PI * q / p)) - (sphere[3] * sin(2 * M_PI * q / p)); + d_surface[3] = (sphere[2] * sin(2 * M_PI * q / p)) + (sphere[3] * cos(2 * M_PI * q / p)); +} + void mobius(float *d_surface, int *coord, int grid) { const float width = 0.5; @@ -106,10 +141,10 @@ float *generate_data_surface(unsigned char *s) int *cara; - parm.f = cube; - parm.m = 6; - parm.n = parm.m; - parm.grid = 1; + parm.f = lens; + parm.m = 4; + parm.n = 4; + parm.grid = 5; #ifdef TEST assert(numero_caras(2) == 1); @@ -118,7 +153,7 @@ float *generate_data_surface(unsigned char *s) #endif cara = malloc(parm.m * sizeof(int)); - *s = parm.m; + *s = parm.n; size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m); d_surface = malloc((size + 1) * sizeof(float)); @@ -149,11 +184,11 @@ float *generate_data_surface(unsigned char *s) q += parm.n; cara[o] = i + 1; - // cara[p] = j; + cara[p] = j; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - // cara[o] = i + 1; + cara[o] = i + 1; cara[p] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; @@ -163,13 +198,13 @@ float *generate_data_surface(unsigned char *s) parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - // cara[o] = i; + cara[o] = i; cara[p] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; cara[o] = i + 1; - // cara [p] = j + 1; + cara [p] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; }