Tp2 II B2.c : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m
 
Ligne 1 : Ligne 1 :
 
{{RetourVers/TpII}}
 
{{RetourVers/TpII}}
  
#include <stdio.h>
+
<source lang="c">
#include <stdlib.h>
+
#include <stdio.h>
#include <math.h>
+
#include <stdlib.h>
#include "SVGlib.h"<br>
+
#include <math.h>
#define N 512                  // nombre de points de la courbe
+
#include "SVGlib.h"
#define largeur 640            // taille de l'image
+
 
#define hauteur 480
+
#define N 512                  // nombre de points de la courbe
#define cCadre 0x000000        // les différentes couleurs utilisées.
+
#define largeur 640            // taille de l'image
#define cTour 0x303030
+
#define hauteur 480
#define cFond 0xFFFFFF
+
#define cCadre 0x000000        // les différentes couleurs utilisées.
#define cCourbe 0xFF0000<br>
+
#define cTour 0x303030
typedef struct
+
#define cFond 0xFFFFFF
{
+
#define cCourbe 0xFF0000
  float min;
+
 
  float max;
+
typedef struct
} bornes;<br>
+
{
typedef struct
+
  float min;
{
+
  float max;
  float Y[N];                            // pas besoin d'axe des abscisses
+
} bornes;
  bornes Ybornes;
+
 
} fct;<br>
+
typedef struct
bornes extremes(fct f);
+
{
fct echantillonne(char t);                // en paramètre le type de fonction  
+
  float Y[N];                            // pas besoin d'axe des abscisses
void tracerFenetre(int espace,fct f);    // espace : bordure autour de la courbe
+
  bornes Ybornes;
fct filtremoyenne(fct f);
+
} fct;
fct filtrederivateur(fct f);
+
 
fct bruitage(fct f);<br>
+
bornes extremes(fct f);
int main()
+
fct echantillonne(char t);                // en paramètre le type de fonction  
{
+
void tracerFenetre(int espace,fct f);    // espace : bordure autour de la courbe
  fct f;
+
fct filtremoyenne(fct f);
  char rep;
+
fct filtrederivateur(fct f);
  for(;;)
+
fct bruitage(fct f);
  {
+
 
    printf("                  Filtrage Numérique                                \n");
+
int main()
    printf("            ==========================                            \n");
+
{
    printf("                                                                    \n");
+
  fct f;
    printf("E...Echantillonnage                    B...Bruitage                \n");
+
  char rep;
    printf("M...filtre Moyenneur                  D...filtre Dérivée          \n");
+
  for(;;)
    printf("T...Tracé de la courbe                Q...Quitter                  \n");
+
  {
    printf("                                                                    \n");
+
    printf("                  Filtrage Numérique                                \n");
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
+
    printf("            ==========================                            \n");
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
+
    printf("                                                                    \n");
    switch (rep)
+
    printf("E...Echantillonnage                    B...Bruitage                \n");
    {
+
    printf("M...filtre Moyenneur                  D...filtre Dérivée          \n");
      case 'e':
+
    printf("T...Tracé de la courbe                Q...Quitter                  \n");
      case 'E':
+
    printf("                                                                    \n");
          do
+
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
          {
+
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
+
    switch (rep)
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
+
    {
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
+
      case 'e':
            if (rep=='S') rep='s';
+
      case 'E':
            if (rep=='R') rep='r';
+
          do
          } while ((rep!='s')&&(rep!='r'));
+
          {
          f=echantillonne(rep);
+
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
          break;
+
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
      case 't':
+
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
      case 'T':
+
            if (rep=='S') rep='s';
          tracerFenetre(20,f);
+
            if (rep=='R') rep='r';
          break;
+
          } while ((rep!='s')&&(rep!='r'));
      case 'q':  
+
          f=echantillonne(rep);
      case 'Q':
+
          break;
          return 0;
+
      case 't':
      case 'm':
+
      case 'T':
      case 'M':
+
          tracerFenetre(20,f);
          f=filtremoyenne(f);
+
          break;
          break;
+
      case 'q':  
      case 'd':
+
      case 'Q':
      case 'D':
+
          return 0;
          f=filtrederivateur(f);
+
      case 'm':
          break;
+
      case 'M':
      case 'b':
+
          f=filtremoyenne(f);
      case 'B':
+
          break;
          f=bruitage(f);
+
      case 'd':
          break;
+
      case 'D':
    }
+
          f=filtrederivateur(f);
  }
+
          break;
}<br>
+
      case 'b':
fct filtremoyenne(fct f)
+
      case 'B':
{
+
          f=bruitage(f);
  int i;
+
          break;
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
+
    }
  f.Ybornes=extremes(f);
+
  }
  return f;
+
}
}<br>
+
 
fct filtrederivateur(fct f)
+
fct filtremoyenne(fct f)
{
+
{
  int i;
+
  int i;
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
+
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
  f.Ybornes=extremes(f);
+
  f.Ybornes=extremes(f);
  return f;
+
  return f;
}<br>
+
}
fct bruitage(fct f)
+
 
{
+
fct filtrederivateur(fct f)
  int i;
+
{
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
+
  int i;
  f.Ybornes=extremes(f);
+
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
  return f;
+
  f.Ybornes=extremes(f);
}<br>
+
  return f;
bornes extremes(fct f)  //recherche des valeurs extrêmes
+
}
{
+
 
  int i;
+
fct bruitage(fct f)
  bornes M;
+
{
  M.min=f.Y[0];   M.max=f.Y[0];          // initialisation
+
  int i;
  for (i=1;i<N;i++)                      // parcours du tableau
+
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
  {
+
  f.Ybornes=extremes(f);
    if (M.min>f.Y[i]) M.min=f.Y[i];
+
  return f;
    if (M.max<f.Y[i]) M.max=f.Y[i];
+
}
  }
+
 
  return M;
+
bornes extremes(fct f)  //recherche des valeurs extrêmes
}<br>
+
{
fct echantillonne(char t)
+
  int i;
{
+
  bornes M;
  int i;
+
  M.min=f.Y[0];   M.max=f.Y[0];          // initialisation
  fct f;
+
  for (i=1;i<N;i++)                      // parcours du tableau
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
+
  {
          else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
+
    if (M.min>f.Y[i]) M.min=f.Y[i];
  f.Ybornes=extremes(f);
+
    if (M.max<f.Y[i]) M.max=f.Y[i];
  return f;
+
  }
}<br>
+
  return M;
void tracerFenetre(int espace,fct f)
+
}
{
+
 
  SVGopen(largeur,hauteur);                                        //Préparation de l'image
+
fct echantillonne(char t)
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
+
{
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
+
  int i;
  int cX[N],cY[N],i;
+
  fct f;
  for (i=0;i<N;i++)                                                // Coordonnees dans l'image
+
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
  {
+
        else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
    cX[i] = (largeur-2.0*espace) / N * i + espace;
+
  f.Ybornes=extremes(f);
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
+
  return f;
  }
+
}
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
+
 
  SVGClose();
+
void tracerFenetre(int espace,fct f)
}
+
{
 +
  SVGopen(largeur,hauteur);                                        //Préparation de l'image
 +
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
 +
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
 +
  int cX[N],cY[N],i;
 +
  for (i=0;i<N;i++)                                                // Coordonnees dans l'image
 +
  {
 +
    cX[i] = (largeur-2.0*espace) / N * i + espace;
 +
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
 +
  }
 +
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
 +
  SVGClose();
 +
}
 +
</source>
  
 
{{RetourVers/TpII}}
 
{{RetourVers/TpII}}

Version actuelle datée du 15 décembre 2012 à 22:48

retour vers la page des Tps II

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "SVGlib.h"

#define N 512                   // nombre de points de la courbe
#define largeur 640             // taille de l'image
#define hauteur 480
#define cCadre 0x000000         // les différentes couleurs utilisées.
#define cTour 0x303030
#define cFond 0xFFFFFF
#define cCourbe 0xFF0000

typedef struct
{
  float min;
  float max;
} bornes;

typedef struct
{
  float Y[N];                             // pas besoin d'axe des abscisses
  bornes Ybornes;
} fct;

bornes extremes(fct f);
fct echantillonne(char t);                // en paramètre le type de fonction 
void tracerFenetre(int espace,fct f);     // espace : bordure autour de la courbe
fct filtremoyenne(fct f);
fct filtrederivateur(fct f);
fct bruitage(fct f);

int main()
{
  fct f;
  char rep;
  for(;;)
  {
    printf("                  Filtrage Numérique                                \n");
    printf("             ==========================                             \n");
    printf("                                                                    \n");
    printf("E...Echantillonnage                    B...Bruitage                 \n");
    printf("M...filtre Moyenneur                   D...filtre Dérivée           \n");
    printf("T...Tracé de la courbe                 Q...Quitter                  \n");
    printf("                                                                    \n");
    scanf("%c",&rep);            // la fonction scanf possède certaines limitations
    if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 10)
    switch (rep)
    {
      case 'e':
      case 'E':
          do
          {
            printf("Choix de la courbe : 's' pour sin, 'r' pour rectangulaire.\n");
            scanf("%c",&rep);            // la fonction scanf possède certaines limitations
            if (rep!=10) getchar();      // comme ne pas supprimer la touche entrée ('\n' ou 0x10)
            if (rep=='S') rep='s';
            if (rep=='R') rep='r';
          } while ((rep!='s')&&(rep!='r'));
          f=echantillonne(rep);
          break;
      case 't':
      case 'T':
          tracerFenetre(20,f);
          break;
      case 'q': 
      case 'Q':
          return 0;
      case 'm':
      case 'M':
          f=filtremoyenne(f);
          break;
      case 'd':
      case 'D':
          f=filtrederivateur(f);
          break;
      case 'b':
      case 'B':
          f=bruitage(f);
          break;
    }
  }
}

fct filtremoyenne(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]=(f.Y[i-1]+f.Y[i+1])/2;
  f.Ybornes=extremes(f);
  return f;
}

fct filtrederivateur(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]=f.Y[i+1]-f.Y[i-1];
  f.Ybornes=extremes(f);
  return f;
}

fct bruitage(fct f)
{
  int i;
  for (i=1;i<N-1;i++) f.Y[i]+=1.0*rand()/RAND_MAX+0.5;
  f.Ybornes=extremes(f);
  return f;
}

bornes extremes(fct f)  //recherche des valeurs extrêmes
{
  int i;
  bornes M;
  M.min=f.Y[0];	  M.max=f.Y[0];          // initialisation
  for (i=1;i<N;i++)                      // parcours du tableau
  {
    if (M.min>f.Y[i]) M.min=f.Y[i];
    if (M.max<f.Y[i]) M.max=f.Y[i];
  }
  return M;
}

fct echantillonne(char t)
{
  int i;
  fct f;
  if (t=='s') for (i=0;i<N;i++) f.Y[i]=sin(2*M_PI*i/256);  // fonction sinus
         else for (i=0;i<N;i++) f.Y[i]=((i/128)%2)*2-1;    // fonction rectangulaire
  f.Ybornes=extremes(f);
  return f;
}

void tracerFenetre(int espace,fct f)
{
  SVGopen(largeur,hauteur);                                         //Préparation de l'image
  SVGrectanglePlein(0, 0, largeur, hauteur,cTour,cTour);
  SVGrectanglePlein(espace, espace, largeur-2*espace, hauteur-2*espace,cCadre,cFond);
  int cX[N],cY[N],i;
  for (i=0;i<N;i++)                                                 // Coordonnees dans l'image
  {
    cX[i] = (largeur-2.0*espace) / N * i + espace;
    cY[i] = (hauteur-2.0*espace)*(1.0 - (f.Y[i]-f.Ybornes.min)/(f.Ybornes.max-f.Ybornes.min)) + espace;
  }
  for (i=1;i<N;i++)  SVGline(cX[i-1],cY[i-1],cX[i],cY[i],cCourbe);  //tracé de la fonction
  SVGClose();
}

retour vers la page des Tps II