🔥 TP Terminé 🔥

This commit is contained in:
Theo 2024-09-09 13:02:06 +02:00
parent 3fb8528c1f
commit 3b19bde79e

96
main.c
View File

@ -15,6 +15,7 @@ void ligne(int, float, float, float, float);
float map(float, float, float, float, float); float map(float, float, float, float, float);
void reshapeCallback(int, int); void reshapeCallback(int, int);
void axes(float, float, float, float); void axes(float, float, float, float);
void histo(int, float, float, float, float);
// Variables donneés // Variables donneés
#define MAXC 20 #define MAXC 20
@ -30,9 +31,14 @@ int nc = 0;
#define VERTICAL 1 #define VERTICAL 1
#define SUPERPOSER 2 #define SUPERPOSER 2
#define LIGNE 0
#define LIGNE_AXES 1
#define HISTOGRAMME 2 // pas un vrai histogramme
// Variables globales // Variables globales
int vx1 = 0, vx2 = 400, vy1 = 0, vy2 = 400; int vx1 = 0, vx2 = 400, vy1 = 0, vy2 = 400;
int mode_affichage = HORIZONTAL; int mode_affichage = HORIZONTAL;
int type_dessin = LIGNE;
float map(float smin, float smax, float val, float omin, float omax) float map(float smin, float smax, float val, float omin, float omax)
{ {
@ -92,20 +98,65 @@ void ligne(int index, float hgx, float hgy, float bdx, float bdy)
glEnd(); glEnd();
for(unsigned int i = 1; i < size+1; i++) if(type_dessin == LIGNE_AXES)
{ {
float pos_x = map(0, size-1, i-1, hgx, bdx); for(unsigned int i = 1; i < size+1; i++)
float pos_y = map(valmin[index], valmax[index], courbe[index][i], bdy, hgy);
if(mode_affichage == VERTICAL)
{ {
axes(bdy, pos_y, hgx, pos_x); float pos_x = map(0, size-1, i-1, hgx, bdx);
}else{ float pos_y = map(valmin[index], valmax[index], courbe[index][i], bdy, hgy);
axes(hgx, pos_x, bdy, pos_y); if(mode_affichage == VERTICAL)
{
axes(bdy, pos_y, hgx, pos_x);
}else{
axes(hgx, pos_x, bdy, pos_y);
}
} }
} }
} }
void histo(int index, float hgx, float hgy, float bdx, float bdy)
{
if(index >= nc)
{
printf("Courbe non-existante.");
return;
}
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
glColor3f(1.0,1.0,1.0);
//glBegin(GL_POLYGON);
unsigned int size = (unsigned int)courbe[index][0];
for(unsigned int i = 1; i < size+1; i++)
{
float gauche = map(0, size, i-1, hgx, bdx);
float droite = map(0, size, i, hgx, bdx);
float haut = map(valmin[index], valmax[index], courbe[index][i], bdy, hgy);
float bas = bdy;
if(mode_affichage == VERTICAL)
{
float temp = bas;
bas = gauche;
gauche = haut;
haut = droite;
droite = temp;
}
glRectf(gauche, haut, droite, bas);
//printf("%d : {g%f, h%f, b%f, d%f}\n", i, gauche, haut, droite, bas);
}
fflush(stdout);
//glEnd();
}
void afficher(void) void afficher(void)
{ {
glClearColor(0.0,0.0,0.0,0.0); glClearColor(0.0,0.0,0.0,0.0);
@ -117,7 +168,13 @@ void afficher(void)
{ {
float haut = map(0, nc, i-1, 1.0, -1.0); float haut = map(0, nc, i-1, 1.0, -1.0);
float bas = map(0, nc, i, 1.0, -1.0); float bas = map(0, nc, i, 1.0, -1.0);
ligne(i-1, -1.0, haut, 1.0, bas); if(type_dessin == LIGNE || type_dessin == LIGNE_AXES)
{
ligne(i-1, -1.0, haut, 1.0, bas);
}else{
// type_dessin == HISTO
histo(i-1, -1.0, haut, 1.0, bas);
}
} }
} }
@ -127,7 +184,13 @@ void afficher(void)
{ {
float gauche = map(0, nc, i-1, -1.0, 1.0); float gauche = map(0, nc, i-1, -1.0, 1.0);
float droite = map(0, nc, i, -1.0, 1.0); float droite = map(0, nc, i, -1.0, 1.0);
ligne(i-1, -1.0, gauche, 1.0, droite); if(type_dessin == LIGNE || type_dessin == LIGNE_AXES)
{
ligne(i-1, -1.0, gauche, 1.0, droite);
}else{
// type_dessin == HISTO
histo(i-1, -1.0, gauche, 1.0, droite);
}
} }
} }
@ -135,7 +198,13 @@ void afficher(void)
{ {
for(unsigned int i = 1; i < nc+1; i++) for(unsigned int i = 1; i < nc+1; i++)
{ {
ligne(i-1, -1.0, 1.0, 1.0, -1.0); if(type_dessin == LIGNE || type_dessin == LIGNE_AXES)
{
ligne(i-1, -1.0, 1.0, 1.0, -1.0);
}else{
// type_dessin == HISTO
histo(i-1, -1.0, 1.0, 1.0, -1.0);
}
} }
} }
@ -150,7 +219,7 @@ void reshapeCallback(int largeur, int hauteur)
glViewport(0, 0, largeur, hauteur); glViewport(0, 0, largeur, hauteur);
//glutPostRedisplay(); //glutPostRedisplay();
printf("Reshape : [%d, %d]\n", vx2, vy2); //printf("Reshape : [%d, %d]\n", vx2, vy2);
} }
int initWindow(int argc, char* argv[], void(*display)(void)) int initWindow(int argc, char* argv[], void(*display)(void))
@ -185,7 +254,7 @@ long getFileSize(FILE* file)
void parseFile(char* file, long size) void parseFile(char* file, long size)
{ {
nc = atoi(file); nc = atoi(file);
printf("nc=%d\n", nc); //printf("nc=%d\n", nc);
//printf("====\n%s\n====\n", file); //printf("====\n%s\n====\n", file);
@ -283,7 +352,8 @@ int main(int argc, char* argv[])
printCourbeTerminal(); printCourbeTerminal();
mode_affichage = SUPERPOSER; type_dessin = LIGNE_AXES;
mode_affichage = VERTICAL;
int window = initWindow(argc, argv, afficher); int window = initWindow(argc, argv, afficher);
glutMainLoop(); glutMainLoop();