Mathc gnuplot/Application : Fonctions récursives

Un livre de Wikilivres.
Mathc gnuplot
Mathc gnuplot
Mathc gnuplot
Sommaire

I - Dessiner

Fichiers h partagés :

Application :

II - Animer

Application :

III - Géométrie de la tortue standard

Application :

IV - Géométrie de la tortue vectorielle

Application :

Annexe

Livre d'or



Préambule[modifier | modifier le wikicode]

La géométrie de la tortue dans Wikipedia.

Présentation[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Un arbre[modifier | modifier le wikicode]

N'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
Turtles05


Petit jeux sur les triangles[modifier | modifier le wikicode]

N'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
Turtles06


Petit jeux sur les carrés[modifier | modifier le wikicode]

N'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
Turtles07


Courbe de Hilbert[modifier | modifier le wikicode]

N'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
Turtles08