Tp1struct II B2.c

De troyesGEII
Aller à : navigation, rechercher

retour vers la page des Tps II

#include <stdio.h>
#include <math.h>
#include "SVGlib.h"
#define N 10
#define largeur 640
#define hauteur 480

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

typedef struct
{
 float X[N];
 float Y[N];
 bornes Xbornes;
 bornes Ybornes;
} fct;

bornes extremes(fct f);
fct echantillonne(float Xmin,float Xmax);
void tracerFenetre(int espace,fct f);

int main()
{
 fct f;
 f=echantillonne(0,4);
 tracerFenetre(20,f);
 return 0;
}

bornes extremes(fct f)
{
 int i;
 bornes M;
 //recherche des extremes
 M.min=f.Y[0];	  M.max=f.Y[0];
 for (i=1;i<N;i++)
 {
   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(float Xmin,float Xmax)
{
 int i;
 fct f;
 f.Xbornes.min=Xmin;
 f.Xbornes.max=Xmax;
 // Tableau de valeurs
 for (i=0;i<N;i++)
 {
   f.X[i]=Xmin + i*(Xmax-Xmin)/(N-1);
   f.Y[i]=sin(f.X[i]);
 }
 f.Ybornes=extremes(f);
 return f;
}

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

retour vers la page des Tps II