Prepare for Rn -> Rm surfaces
This commit is contained in:
@@ -9,31 +9,45 @@
|
|||||||
#define M_PI 3.14159265358979323846
|
#define M_PI 3.14159265358979323846
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void mobius(float *d_surface, int i, int j, int grid_size)
|
void mobius(float *d_surface, int * coord, int grid_size)
|
||||||
{
|
{
|
||||||
const float width = 0.5;
|
const float width = 0.5;
|
||||||
float u = (2 * M_PI) * ((float)i / grid_size);
|
float u = (2 * M_PI) * ((float)coord[0] / grid_size);
|
||||||
float v = (2 * width) * ((float)j / grid_size) - width;
|
float v = (2 * width) * ((float)coord[1] / grid_size) - width;
|
||||||
|
|
||||||
d_surface[0] = cos(u) + v * cos(u / 2) * cos(u);
|
d_surface[0] = cos(u) + v * cos(u / 2) * cos(u);
|
||||||
d_surface[1] = sin(u) + v * cos(u / 2) * sin(u);
|
d_surface[1] = sin(u) + v * cos(u / 2) * sin(u);
|
||||||
d_surface[2] = v * sin(u / 2);
|
d_surface[2] = v * sin(u / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void torus(float *d_surface, int i, int j, int grid_size)
|
void torus(float *d_surface, int * coord, int grid_size)
|
||||||
{
|
{
|
||||||
float u = (2 * M_PI) * ((float)i / grid_size);
|
float u = (2 * M_PI) * ((float)coord[0] / grid_size);
|
||||||
float v = (2 * M_PI) * ((float)j / grid_size);
|
float v = (2 * M_PI) * ((float)coord[1] / grid_size);
|
||||||
|
|
||||||
d_surface[0] = (1 + 0.5 * cos(v)) * cos(u);
|
d_surface[0] = (1 + 0.5 * cos(v)) * cos(u);
|
||||||
d_surface[1] = (1 + 0.5 * cos(v)) * sin(u);
|
d_surface[1] = (1 + 0.5 * cos(v)) * sin(u);
|
||||||
d_surface[2] = 0.5 * sin(v);
|
d_surface[2] = 0.5 * sin(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void klein(float *d_surface, int i, int j, int grid_size)
|
void torus_5d(float *d_surface, int * coord, int grid_size)
|
||||||
{
|
{
|
||||||
float u = (2 * M_PI) * ((float)i / grid_size);
|
float u = (2 * M_PI) * ((float)coord[0] / grid_size);
|
||||||
float v = (2 * M_PI) * ((float)j / 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);
|
||||||
|
float v = (2 * M_PI) * ((float)coord[1]/ grid_size);
|
||||||
|
|
||||||
d_surface[0] = (0.5 * cos(v) + 0.5) * cos(u);
|
d_surface[0] = (0.5 * cos(v) + 0.5) * cos(u);
|
||||||
d_surface[1] = (0.5 * cos(v) + 0.5) * sin(u);
|
d_surface[1] = (0.5 * cos(v) + 0.5) * sin(u);
|
||||||
@@ -41,7 +55,7 @@ void klein(float *d_surface, int i, int j, int grid_size)
|
|||||||
d_surface[3] = sin(v) * sin(u / 2);
|
d_surface[3] = sin(v) * sin(u / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (*function_t)(float *, int, int, int);
|
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)
|
||||||
{
|
{
|
||||||
@@ -52,6 +66,7 @@ float *generate_data_surface(int grid_size, unsigned char *m)
|
|||||||
|
|
||||||
f = klein;
|
f = klein;
|
||||||
*m = 4;
|
*m = 4;
|
||||||
|
|
||||||
size = grid_size * grid_size * 6 * (*m);
|
size = grid_size * grid_size * 6 * (*m);
|
||||||
d_surface = malloc((size + 1) * sizeof(float));
|
d_surface = malloc((size + 1) * sizeof(float));
|
||||||
d_surface[0] = size;
|
d_surface[0] = size;
|
||||||
@@ -61,19 +76,19 @@ float *generate_data_surface(int grid_size, unsigned char *m)
|
|||||||
for (j = 0; j < grid_size; j++)
|
for (j = 0; j < grid_size; j++)
|
||||||
{
|
{
|
||||||
// triangle 1, Front
|
// triangle 1, Front
|
||||||
f(&d_surface[k + 1], i, j, grid_size);
|
f(&d_surface[k + 1], (int[2]){i, j}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
f(&d_surface[k + 1], i + 1, j, grid_size);
|
f(&d_surface[k + 1], (int[2]){i + 1, j}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
f(&d_surface[k + 1], i + 1, j + 1, grid_size);
|
f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
|
|
||||||
// triangle 2, Back
|
// triangle 2, Back
|
||||||
f(&d_surface[k + 1], i, j, grid_size);
|
f(&d_surface[k + 1], (int[2]){i, j}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
f(&d_surface[k + 1], i, j + 1, grid_size);
|
f(&d_surface[k + 1], (int[2]){i, j + 1}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
f(&d_surface[k + 1], i + 1, j + 1, grid_size);
|
f(&d_surface[k + 1], (int[2]){i + 1, j + 1}, grid_size);
|
||||||
k += *m;
|
k += *m;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user