aiura con R^n
This commit is contained in:
BIN
src/main.o
Normal file
BIN
src/main.o
Normal file
Binary file not shown.
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user