Mathc gnuplot/Application : Fonctions récursives
La géométrie de la tortue dans Wikipedia.
Préambule
modifierPrésentation
modifier- F_mR(tree(U,50.));
- Cette méthode est utilisée ici pour montrer la sortie finale des fonctions.
- C'est à dire return(U);
Dessiner
modifierUn arbre
modifierN'oubliez pas les fichiers h de la librairie.
c01.c Un arbre |
---|
/* ------------------------------------ */
/* save as : c01.c */
/* ------------------------------------ */
#include "v_a.h"
#include "y_o.h"
/* ------------------------------------ */
double **tree( double **U,double size);
/* ------------------------------------ */
int main(void)
{
double **U = GINIT(-40.,40.,-0.,80.);
F_mR(tree(U,50.));
printf(" * open the file main.plt with Gnuplot.");
return 0;
}
/* ------------------------------------ */
double **tree(
double **U,
double size
)
{
if(size<5.){GO(U,size);GO(U,-size);return(0);}
GO(U,size/3.);TU(U,-30.);
tree(U,size*2./3.);
TU(U,30.);GO(U,size/6.);TU(U,25.);
tree(U,size/2.);
TU(U,-25.);GO(U,size/3.);TU(U,25.);
tree(U,size/2.);
TU(U,-25.);GO(U,size/6.);GO(U,-size);
return(U);
}
Résultat dans gnuplot |
---|
Petit jeux sur les triangles
modifierN'oubliez pas les fichiers h de la librairie.
c02.c Petit jeux sur les triangles |
---|
/* ------------------------------------ */
/* save as : c02.c */
/* ------------------------------------ */
#include "v_a.h"
#include "y_o.h"
/* ------------------------------------ */
double **sqr(double **U,double size);
/* ------------------------------------ */
int main(void)
{
double **U = GINIT(-150.,400.,-50.,500.);
F_mR(sqr(U,400.));
printf(" * open the file main.plt with Gnuplot.");
return 0;
}
/* ------------------------------------ */
double **sqr(
double **U,
double size
)
{
int i=3;
if(size<10.) return(0);
for(;i--;)
{
TU(U,-60.);
sqr(U,size/4.);
TU(U,60.);GO(U,size);TU(U,120.);
}
return(U);
}
Résultat dans gnuplot |
---|
Petit jeux sur les carrés
modifierN'oubliez pas les fichiers h de la librairie.
c03.c Petit jeux sur les carrés |
---|
/* ------------------------------------ */
/* save as : c03.c */
/* ------------------------------------ */
#include "v_a.h"
#include "y_o.h"
/* ------------------------------------ */
double **sqr(double **U,double size);
/* ------------------------------------ */
int main(void)
{
double **U = GINIT(-200.,600.,-200.,600.);
F_mR(sqr(U,400.));
printf(" * open the file main.plt with Gnuplot.");
return 0;
}
/* ------------------------------------ */
double **sqr(
double **U,
double size
)
{
int i=4;
if(size<10.) return(0);
for(;i--;)
{
TU(U,-90.);
sqr(U,size/4.);
TU(U,90.);GO(U,size);TU(U,90.);
}
return(U);
}
Résultat dans gnuplot |
---|
Courbe de Hilbert
modifierN'oubliez pas les fichiers h de la librairie.
c04.c Courbe de Hilbert |
---|
/* ------------------------------------ */
/* save as : c04.c */
/* ------------------------------------ */
#include "v_a.h"
#include "y_o.h"
/* ------------------------------------ */
double **hilbert(double **U,double size,
double level,double parity);
/* ------------------------------------ */
int main(void)
{
double **U = GINIT(-32., 1.,-1.,32.);
F_mR(hilbert(U,1.,5.,1.));
printf(" * open the file main.plt with Gnuplot.");
return 0;
}
/* ------------------------------------ */
double **hilbert(
double **U,
double size,
double level,
double parity
)
{
if(--level<0.)return(0);
TU(U,parity*(-90));
hilbert(U,size,level,-parity);
GO(U,size);TU(U,parity*90);
hilbert(U,size,level,parity);
GO(U,size);
hilbert(U,size,level,parity);
TU(U,parity*90);GO(U,size);
hilbert(U,size,level,-parity);
TU(U,parity*(-90));
return(U);
}
Résultat dans gnuplot |
---|