From 7888c06c41a8283ef359a4fe27d51047210c7356 Mon Sep 17 00:00:00 2001 From: "roberto.mc" Date: Wed, 27 Nov 2024 19:08:57 -0600 Subject: [PATCH] aiura con R^n --- src/main.o | Bin 0 -> 12824 bytes src/surface.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/main.o diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..36f5d064e6c5087469b5be291aefffa4c04bd2a0 GIT binary patch literal 12824 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 CvnxUX literal 0 HcmV?d00001 diff --git a/src/surface.c b/src/surface.c index 458c3dd..7e44329 100644 --- a/src/surface.c +++ b/src/surface.c @@ -82,6 +82,38 @@ float *generate_data_surface(int grid_size, unsigned char *m) return d_surface; } +/* pa' rearmar la funcion _calc_normal te entendi que creara las funciones de cglm artesanalmente, entonces ps eso hago xd */ + +void subtract(const float *v1, const float *v2, float *result, unsigned char n) +{ + for (unsigned char i = 0; i < n; i++) { + result[i] = v1[i] - v2[i]; + } +} + +float dot_product(const float *a, const float *b, unsigned char n) +{ + float result = 0.0f; + for (unsigned char i = 0; i < n; i++) { + result += a[i] * b[i]; + } + return result; +} + +void escalar_product(float a, const float *v1, float *result, unsigned char n) +{ + for (unsigned char i = 0; i < n; i++) { + result[i] = a * v1[i]; + } +} + +void norm(const float *v1, float *result, unsigned char n) +{ + float lenght = sqrtf(dot_product(v1, v1, n)); + float inv_lenght = 1.0f / lenght; + escalar_product(inv_lenght, v1, result, n); +} + static void __calculate_normal( float *p1, float *p2, float *p3, float *normal, unsigned char n) { @@ -190,7 +222,7 @@ static void __calculate_normal( return; } } - +/* float *generate_normals_surface(float *d, unsigned char m) { float *n; @@ -209,3 +241,34 @@ float *generate_normals_surface(float *d, unsigned char m) } return n; } +*/ + +// Ando bien perdido u.u + +float *generate_normals_surface(const float *d, unsigned char m) +{ + float *n = malloc((*d + 1) * sizeof(float)); + *n = *d; + float v1[m], v2[m], normal[m]; + for (int i = 0; i < *d; i += 3 * m) + { + const float *A = (d + 1) + i; + const float *B = (d + 1) + i + m; + const float *C = (d + 1) + i + 2 * m; + + subtract(B, A, v1, m); + subtract(C, A, v2, m); + + for (unsigned char j = 0; j < m; j++) { + normal[j] = v1[(j + 1) % m] * v2[(j + 2) % m] - v1[(j + 2) % m] * v2[(j + 1) % m]; + } + norm(normal, normal, m); + for (unsigned char j = 0; j < m; j++) { + (n + 1)[i + j] = normal[j]; + (n + 1)[i + m + j] = normal[j]; + (n + 1)[i + 2 * m + j] = normal[j]; + } + } + + return n; +}