Tp1struct II B2.c : Différence entre versions
m |
m |
||
Ligne 1 : | Ligne 1 : | ||
{{RetourVers/TpII}} | {{RetourVers/TpII}} | ||
− | + | <source lang="c"> | |
− | + | #include <stdio.h> | |
− | + | #include <math.h> | |
− | + | #include "SVGlib.h" | |
− | + | #define N 10 | |
− | + | #define largeur 640 | |
− | typedef struct | + | #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(); | ||
+ | } | ||
+ | </source> | ||
{{RetourVers/TpII}} | {{RetourVers/TpII}} |
Version du 15 décembre 2012 à 19:15
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();
}