Tp1struct II B2.c
Révision datée du 15 décembre 2012 à 19:15 par Bjacquot (discussion | contributions)
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<br>
typedef struct
{
float min;
float max;
} bornes;<br>
typedef struct
{
float X[N];
float Y[N];
bornes Xbornes;
bornes Ybornes;
} fct;<br>
bornes extremes(fct f);
fct echantillonne(float Xmin,float Xmax);
void tracerFenetre(int espace,fct f);<br>
int main()
{
fct f;
f=echantillonne(0,4);
tracerFenetre(20,f);
return 0;
}<br>
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;
}<br>
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;
}<br>
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();
}