/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   O B J E T   R E C U R S I F   D E   T Y P E   " C H O U - F L E U R "  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                                ...:..::..:.                                                                       */
/*                                            .:+-#:#:+# +#o                                                                         */
/*                                          .+o.#:::++...-o##*o:.                                                                    */
/*                                         ..*oo#o#***+*o++:o.#-o+.                                                                  */
/*                                        -#+o*o:::#:*-*::+:+*.++-:.                                                                 */
/*                                        *##*#*:::+:o:--:+*++:.o*.*o-.                                                              */
/*                          ..-#          o++o-:**o*ooo#+#+o::-+*-+#o:*+.                                                            */
/*                    .o    .*+:.---o++#-o.:::-o+**o*+#+o-*+:+o.::+*-+*o::.                                                          */
/*                     .+**oo:#:o:++:+---:+*#-#o +#+o*+#:o*o-+--: -++:**:.-#:                                                        */
/*                       -+o.#:.+o*-+##o**#+:o-**--*+:-.o+-+oo#-:-: -oo:*-o*.-:                                                      */
/*                       ..o#:#::o#--*:+-*+:#o*+#o:-o-++.+++-+**---:-..*.*:*o-:.                                                     */
/*                      .*::+-+o-#o:*-*-o:#-oo---+o-**++--.#+--#+#-+-o.:-.+#:*#:o:.                                                  */
/*                          :#.#:.*:#:#:*+.   .-+-++-oo+++*--:o+o**o.-- .*:#+.*+-:.                                                  */
/*                                           :o.++o-*- -*  *+oo-o*#.-   :...#:o-o+-.                                                 */
/*                                         -+o--o++o:-* ::-.*::+-+o*o #:. +:+-*:-#+.                                                 */
/*                                       .*o:+::+*#*- -. o-oo-*+.#-+     .*....+*:..                                                 */
/*                                      :.:+-++++#  *.      #-:+--o#-.  o..  .o.+o.                                                  */
/*                                     ..-+o*+*+:+#      #-+*-*#.+o*.      :*-. . +.                                                 */
/*                                   .--#o+*.-#o  *+        *:.+-o**+     -.     .o.                                                 */
/*                              . :.o*-..:oo#. +*        o:+o:*#.+-#..           ..                                                  */
/*                           o...-#+..:oo#o.:o  .           +:.+*#*-.                                                                */
/*                       .o##*#**:.:*-+-.o* .#          .--+:.*-*--:*:                                                               */
/*                             -#.--o:#. .-                -:..o*o:-                                                                 */
/*                           -++:+:+  ++                -.:::#-++.:o.                                                                */
/*                        :#o:.   :*  .                   :-:::.--o .                                                                */
/*                                ..                   -.++.-o+.-*                                                                   */
/*                                                       -.#. o-+:+:                                                                 */
/*                                                       #o.  :*.                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrf/recursif.11$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   B A S E   E T   U N I V E R S E L L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.11.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*                                                                                    3                                              */
/*        D E F I N I T I O N   D E   L ' E S P A C E   P H Y S I Q U E   D A N S   R     ( D E B U T )  :                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Nota :                                                                                                                     */
/*                                                                                                                                   */
/*                    Les extrema des coordonnees {x,y,z}                                                                            */
/*                  sont fixees un peu arbitrairement et sans                                                                        */
/*                  parametrees.                                                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   hXmin_ESPACE                                                                                                                  \
                    PARE(-2.00)
#define   hYmin_ESPACE                                                                                                                  \
                    PARE(-2.00)
#define   hZmin_ESPACE                                                                                                                  \
                    PARE(-3.00)
                                        /* Definition du "coin" inferieur-gauche-arriere de l'espace physique.                       */

#define   hXmax_ESPACE                                                                                                                  \
                    PARE(2.00)
#define   hYmax_ESPACE                                                                                                                  \
                    PARE(2.00)
#define   hZmax_ESPACE                                                                                                                  \
                    PARE(3.00)
                                        /* Definition du "coin" superieur-droite-avant de l'espace physique. La valeur particuliere  */
                                        /* de 'hZmax_ESPACE' est mise en place pour translater la source lumineuse d'eclairage de    */
                                        /* la scene via 'Z_DE_LA_SOURCE_LUMINEUSE'...                                                */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*                                                                                    3                                              */
/*        D E F I N I T I O N   D E   L ' E S P A C E   P H Y S I Q U E   D A N S   R     ( D E B U T )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.12.I"

#define   dXmin_ESPACE                                                                                                                  \
                    PARE(-1.35)
#define   dYmin_ESPACE                                                                                                                  \
                    PARE(-1.35)
#define   dZmin_ESPACE                                                                                                                  \
                    PARE(0.0)
                                        /* Definition des minima des differentielles {dx,dy,dz}.                                     */
#define   dXmax_ESPACE                                                                                                                  \
                    PARE(1.35)
#define   dYmax_ESPACE                                                                                                                  \
                    PARE(1.35)
#define   dZmax_ESPACE                                                                                                                  \
                    PARE(5.05)
                                        /* Definition des maxima des differentielles {dx,dy,dz}.                                     */

#include  xrk/attractor.1D.I"
                                        /* Formules de renormalisation des differentielles dans [0,1] ; elles sont utilisees lorsque */
                                        /* la production d'images en couleurs est demandee (voir 'visualiser_en_RVB').               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   D I F F E R E N T S   E S P A C E S   E T   D E   L ' E F F E T   D E   B R U M E  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.13.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   I M A G E S  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RENORMALISER_LES_NIVEAUX                                                                                                      \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(renormaliser_les_niveaux,RENORMALISER_LES_NIVEAUX)));
                                        /* Indique si l'on doit renormaliser les niveaux des trois couleurs au moment de la          */
                                        /* generation de l'image ('VRAI') ou pas ('FAUX'). On notera que cette renormalisation       */
                                        /* est fonction non pas uniquement de l'image courante, mais en fait aussi de toutes celles  */
                                        /* qui ont deja ete generees (voir comment sont calcules les extrema des derivees...).       */

#define   NOMBRE_D_ITERATIONS                                                                                                           \
                    SOIXANTE                                                                                                            \
                                        /* La procedure recursive qui va suivre contraint a un petit nombre apparent d'iterations,   */ \
                                        /* puisqu'en effet, ce nombre va etre eleve a une puissance egale a la profondeur des appels */ \
                                        /* recursifs de la fonction 'definition_recursive(...)'.                                     */

#include  xrv/champs_5.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   G E N E R A L E S   R E L A T I V E S   A   L A   V I S U A L I S A T I O N  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/particule.41.I"

#include  xrk/attractor.14.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   D E   M E M O R I S A T I O N   D U   P O I N T   C O U R A N T   ( D E B U T )  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.16.I"

#define   RAYON_DE_VISUALISATION                                                                                                        \
                    FRA4(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation,RAYON_DE_VISUALISATION)));
                                        /* Rayon du disque materialisant une iteration.                                              */

/*===================================================================================================================================*/
/*        :Debut_listMN_STRUCTURES_VIVANTES_RECURSIVES_11:                                                                           */
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D ' U N   O B J E T   R E C U R S I F   D E   T Y P E   " C H O U - F L E U R "  :                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Il est defini par le systeme d'equations                                                                       */
/*                  suivant pour 'theta' variant incrementalement                                                                    */
/*                  'N' fois sur une certain segment :                                                                               */
/*                                                                                                                                   */
/*                                      F (h,theta) = K .R(h).cos(T .theta)                                                          */
/*                                       x             x           x                                                                 */
/*                                                                                                                                   */
/*                                      F (h,theta) = K .R(h).sin(T .theta)                                                          */
/*                                       y             y           y                                                                 */
/*                                                                                                                                   */
/*                                      F (h,theta) = K .h.theta                                                                     */
/*                                       z             z                                                                             */
/*                                                                                                                                   */
/*                                                           fmR - 1                                                                 */
/*                                      R(h)        = h.R .(----------.theta + 1)                                                    */
/*                                                       0   N.dtheta                                                                */
/*                                                                                                                                   */
/*                  (ou 'N' designe le nombre d'iterations 'nombre_d_iterations')                                                    */
/*                                                                                                                                   */
/*                  avec en general :                                                                                                */
/*                                                                                                                                   */
/*                                      h < 1                                                                                        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    En chaque point de coordonnees [F (h,theta),F (h,theta),F (h,theta)]                                           */
/*                                                     x           y           z                                                     */
/*                  si 'h' est inferieur a un certain seuil ou si on l'on "plonge"                                                   */
/*                  suffisamment profond dans la recursivite, une sphere est                                                         */
/*                  visualisee, sinon, 'h' est reduit recursivement suivant :                                                        */
/*                                                                                                                                   */
/*                                      h <-- h.ffh                                                                                  */
/*                                                                                                                                   */
/*                  avec :                                                                                                           */
/*                                                                                                                                   */
/*                                      ffh < 1                                                                                      */
/*                                                                                                                                   */
/*                  et le procede d'iterations sur 'theta' est repris en ce point courant                                            */
/*                  considere comme nouvelle origine...                                                                              */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
/*        :Fin_listMN_STRUCTURES_VIVANTES_RECURSIVES_11:                                                                             */

#include  xrk/attractor.17.I"

dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS)
                                        /* Definition du fichier des nombres d'iterations.                                           */
#define   sNOMBRE_D_ITERATIONS(numero_de_la_periode)                                                                                    \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS))
                                        /* Formule generale definissant les variations du nombre d'iterations.                       */

#define   KX                                                                                                                            \
                    FU
#define   TX                                                                                                                            \
                    FU
DEFV(Local,DEFV(Float,INIT(kx,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_kx,d_FCONSTANTES)));
DEFV(Local,DEFV(Float,INIT(tx,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_tx,d_FCONSTANTES)));
                                        /* Definition des coefficients de la coordonnee 'X'.                                         */
#define   KY                                                                                                                            \
                    FU
#define   TY                                                                                                                            \
                    FU
DEFV(Local,DEFV(Float,INIT(ky,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_ky,d_FCONSTANTES)));
DEFV(Local,DEFV(Float,INIT(ty,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_ty,d_FCONSTANTES)));
                                        /* Definition des coefficients de la coordonnee 'Y'.                                         */
#define   KZ                                                                                                                            \
                    FRA4(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(kz,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_kz,d_FCONSTANTES)));
                                        /* Definition des coefficients de la coordonnee 'Z'.                                         */

#define   CX0                                                                                                                           \
                    FZERO
#define   CY0                                                                                                                           \
                    FZERO
#define   CZ0                                                                                                                           \
                    FZERO
                                        /* Definition des valeurs initiales des trois coordonnees.                                   */
DEFV(Local,DEFV(Float,INIT(cx,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(dcx,FLOT__UNDEF)));
                                        /* Definition de 'x' et de sa derivee,                                                       */
DEFV(Local,DEFV(Float,INIT(cy,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(dcy,FLOT__UNDEF)));
                                        /* Definition de 'y' et de sa derivee,                                                       */
DEFV(Local,DEFV(Float,INIT(cz,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(dcz,FLOT__UNDEF)));
                                        /* Definition de 'z' et de sa derivee.                                                       */

#define   RECURSIVITE_MAXIMALE                                                                                                          \
                    DEUX
DEFV(Local,DEFV(Int,INIT(recursivite_maximale,RECURSIVITE_MAXIMALE)));
                                        /* Definition de la recursivite maximale.                                                    */
DEFV(Local,DEFV(Int,INIT(recursivite_courante,ZERO)));
                                        /* Definition de la recursivite courante. Cette valeur est incrementee d'une unite a chaque  */
                                        /* entree dans la fonction 'definition_recursive(...)' et decrementee d'une unite a la       */
                                        /* sortie...                                                                                 */

#define   FFH                                                                                                                           \
                    FRA1(FRA4(FU))
DEFV(Local,DEFV(Float,INIT(ffh,FLOT__UNDEF)));
                                        /* Definition du facteur du facteur d'homothetie 'ffh'.                                      */
#define   FH_MINIMAL                                                                                                                    \
                    FZERO
DEFV(Local,DEFV(Float,INIT(fh_minimal,FLOT__UNDEF)));
                                        /* Definition du minimum du facteur d'homothetie 'fh'.                                       */
DEFV(Local,DEFV(Float,INIT(fh,FU)));
DEFV(Local,DEFV(Float,INIT(d_fh,d_FVARIABLES_DE_DERIVATION)));
                                        /* Definition du facteur d'homothetie initial. Cette valeur n'est jamais modifiee, c'est     */
                                        /* un argument d'appel de la fonction 'definition_recursive(...)' qui prend en compte sa     */
                                        /* modification via 'CHANGEMENT_DU_FACTEUR_D_HOMOTHETIE(...)'.                               */

#define   FACTEUR_MINIMAL_RAYON                                                                                                         \
                    GRO1(FRA10(COORDONNEE_BARYCENTRIQUE_MAXIMALE))
#define   d_FACTEUR_MAXIMAL_RAYON                                                                                                       \
                    FZERO
#define   FACTEUR_MAXIMAL_RAYON                                                                                                         \
                    GRO1(FRA1(COORDONNEE_BARYCENTRIQUE_MAXIMALE))
DEFV(Local,DEFV(Float,INIT(facteur_minimal_rayon,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_facteur_minimal_rayon,d_FCONSTANTES)));
#define   R0                                                                                                                            \
                    GRO13(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(r0,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_r0,d_FCONSTANTES)));
                                        /* Definition du rayon 'R0' ainsi que du maximun et du minimum du facteur multiplicatif      */
                                        /* determine a partir de lui dans la fonction 'RAYON(...)'...                                */

#define   THETA0                                                                                                                        \
                    FZERO
#define   dTHETA                                                                                                                        \
                    SCAL(CERCLE_TRIGONOMETRIQUE,MILLE,CENT_VINGT_HUIT)
DEFV(Local,DEFV(Float,INIT(theta0,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(theta,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_theta,d_FVARIABLES_DE_DERIVATION)));
DEFV(Local,DEFV(Float,INIT(dtheta,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(d_dtheta,d_FCONSTANTES)));
                                        /* Definition du 'theta' initial, du 'theta' courant ainsi que de son increment...           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A I D E   A U   C A D R A G E   D E S   I M A G E S  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.1C.I"

DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES
                                        /* Definition des extrema des coordonnees et des derivees. On notera bien l'absence de       */
                                        /* point-virgule apres 'DONNEES_DE_RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES'.   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   D E   M E M O R I S A T I O N   D U   P O I N T   C O U R A N T   ( D E B U T )  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Local,DEFV(FonctionI,memorisation_1_point_07(AXf,AYf,AZf,AdXf,AdYf,AdZf,numero_de_l_iteration_courante)))
DEFV(Argument,DEFV(Float,AXf));
DEFV(Argument,DEFV(Float,AYf));
DEFV(Argument,DEFV(Float,AZf));
                                        /* Definition de la position {x,y,z} de l'iteration courante.                                */
DEFV(Argument,DEFV(Float,AdXf));
DEFV(Argument,DEFV(Float,AdYf));
DEFV(Argument,DEFV(Float,AdZf));
                                        /* Definition des differentielles {dx,dy,dz} de la position de l'iteration courante.         */
DEFV(Argument,DEFV(Int,numero_de_l_iteration_courante));
                                        /* Numero de l'iteration courante afin d'attenuer eventuellement la luminance des points     */
                                        /* materialisant chaque iteration en fonction de leur numero (les premieres iterations etant */
                                        /* plus sombres, et les dernieres etant plus lumineuses).                                    */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrk/attractor.15.I"

     INIT_ERROR;
     /*..............................................................................................................................*/
     MEMORISATION_DU_POINT_COURANT(X_DERIVEE_DANS_01(AdXf)
                                  ,Y_DERIVEE_DANS_01(AdYf)
                                  ,Z_DERIVEE_DANS_01(AdZf)
                                   );
                                        /* Memorisation du point courant en Noir et Blanc ou en Couleurs, mais uniquement s'il est   */
                                        /* visible en fonction des conditions de visualisation...                                    */
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   V I S U A L I S A T I O N   E T   D ' I N T E R P O L A T I O N  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/particule.31.I"

dfTRANSFORMAT_31(liste_COEFFICIENT_Kx,fichier_COEFFICIENT_Kx,COEFFICIENT_Kx_IMPLICITE,KX)
dfTRANSFORMAT_31(liste_COEFFICIENT_Ky,fichier_COEFFICIENT_Ky,COEFFICIENT_Ky_IMPLICITE,KY)
dfTRANSFORMAT_31(liste_COEFFICIENT_Kz,fichier_COEFFICIENT_Kz,COEFFICIENT_Kz_IMPLICITE,KZ)
                                        /* Definition des fichiers des facteurs d'echelle des trois coordonnees.                     */
#define   sCOEFFICIENT_Kx(numero_de_la_periode)                                                                                         \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Kx))
#define   sCOEFFICIENT_Ky(numero_de_la_periode)                                                                                         \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Ky))
#define   sCOEFFICIENT_Kz(numero_de_la_periode)                                                                                         \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Kz))
                                        /* Formule generale definissant les variations des facteurs d'echelle des trois coordonnees. */

dfTRANSFORMAT_31(liste_COEFFICIENT_Tx,fichier_COEFFICIENT_Tx,COEFFICIENT_Tx_IMPLICITE,TX)
dfTRANSFORMAT_31(liste_COEFFICIENT_Ty,fichier_COEFFICIENT_Ty,COEFFICIENT_Ty_IMPLICITE,TY)
                                        /* Definition des listes des facteurs d'echelle de l'angle 'theta'.                          */
#define   sCOEFFICIENT_Tx(numero_de_la_periode)                                                                                         \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Tx))
#define   sCOEFFICIENT_Ty(numero_de_la_periode)                                                                                         \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_COEFFICIENT_Ty))
                                        /* Formule generale definissant les variations des facteurs d'echelle de l'angle 'theta'.    */

dfTRANSFORMAT_31(liste_VARIABLE_cx0,fichier_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE,CX0)
dfTRANSFORMAT_31(liste_VARIABLE_cy0,fichier_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE,CY0)
dfTRANSFORMAT_31(liste_VARIABLE_cz0,fichier_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE,CZ0)
                                        /* Definition des fichiers des valeurs initiales des trois coordonnees (cx,cy,cz).           */
#define   sVARIABLE_cx0(numero_de_la_periode)                                                                                           \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cx0))
#define   sVARIABLE_cy0(numero_de_la_periode)                                                                                           \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cy0))
#define   sVARIABLE_cz0(numero_de_la_periode)                                                                                           \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_VARIABLE_cz0))
                                        /* Formule generale definissant les variations des valeurs initiales des trois variables.    */

dfTRANSFORMAT_31(liste_RECURSIVITE_MAXIMALE,fichier_RECURSIVITE_MAXIMALE,RECURSIVITE_MAXIMALE_IMPLICITE,RECURSIVITE_MAXIMALE)
                                        /* Definition des fichiers de la valeur initiale de la recursivite maximale.                 */
#define   sRECURSIVITE_MAXIMALE(numero_de_la_periode)                                                                                   \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_RECURSIVITE_MAXIMALE))                                              \
                                        /* Formule generale definissant les variations de la recursivite maximale.                   */

dfTRANSFORMAT_31(liste_PARAMETRE_FFH,fichier_PARAMETRE_FFH,PARAMETRE_FFH_IMPLICITE,FFH)
                                        /* Definition des fichiers de la valeur initiale du facteur du facteur d'homothetie.         */
dfTRANSFORMAT_31(liste_PARAMETRE_FH_MINIMAL,fichier_PARAMETRE_FH_MINIMAL,PARAMETRE_FH_MINIMAL_IMPLICITE,FH_MINIMAL)
                                        /* Definition des fichiers de la valeur initiale du minimum du facteur d'homothetie.         */
#define   sPARAMETRE_FFH(numero_de_la_periode)                                                                                          \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_FFH))                                                     \
                                        /* Formule generale definissant les variations du facteur du facteur d'homothetie.           */
#define   sPARAMETRE_FH_MINIMAL(numero_de_la_periode)                                                                                   \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_FH_MINIMAL))                                              \
                                        /* Formule generale definissant les variations du minimum du facteur d'homothetie.           */

dfTRANSFORMAT_31(liste_FACTEUR_MINIMAL_RAYON,fichier_FACTEUR_MINIMAL_RAYON,FACTEUR_MINIMAL_RAYON_IMPLICITE,FACTEUR_MINIMAL_RAYON)
dfTRANSFORMAT_31(liste_PARAMETRE_R0,fichier_PARAMETRE_R0,PARAMETRE_R0_IMPLICITE,R0)
                                        /* Definition des fichiers de la valeur initiale du rayon et de l'exposant de 'theta'.       */
#define   sFACTEUR_MINIMAL_RAYON(numero_de_la_periode)                                                                                  \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_FACTEUR_MINIMAL_RAYON))
#define   sPARAMETRE_R0(numero_de_la_periode)                                                                                           \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_R0))
                                        /* Formule generale definissant les variations du rayon et de l'exposant de 'theta'.         */

dfTRANSFORMAT_31(liste_PARAMETRE_THETA0,fichier_PARAMETRE_THETA0,PARAMETRE_THETA0_IMPLICITE,THETA0)
dfTRANSFORMAT_31(liste_PARAMETRE_dTHETA,fichier_PARAMETRE_dTHETA,PARAMETRE_dTHETA_IMPLICITE,dTHETA)
                                        /* Definition des fichiers de la valeur initiale du 'theta' et de son increment.             */
#define   sPARAMETRE_THETA0(numero_de_la_periode)                                                                                       \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_THETA0))
#define   sPARAMETRE_dTHETA(numero_de_la_periode)                                                                                       \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_PARAMETRE_dTHETA))
                                        /* Formule generale definissant les variations du 'theta' et de son increment.               */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   T R O I S   F O N C T I O N S   ' F '  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrf/recursif.11.I"
                                        /* ATTENTION, il est imperatif que les fonctions derivables formellement soient definies     */
                                        /* dans un fichier a part afin qu'elles ne soient pas l'objet d'une double definition. En    */
                                        /* effet, on trouve dans 'v $xcc/cpp$Z' :                                                    */
                                        /*                                                                                           */
                                        /*                  $CA  $module$w                                                           */
                                        /*                                 | $xcp/cpp$X          ... -c$PASSE_D -e$PASSE_5           */
                                        /*                                                                              > $fichierR  */
                                        /*                                                                                           */
                                        /* Ainsi, si par exemple la definition de 'RAYON(h,theta)' etait faite localement dans le    */
                                        /* fichier '$xrf/recursif.11$K', cette definition apparaitrait deux fois dans le fichier     */
                                        /* '$module$w' : une premiere fois en tete, provenant de '$PASSE_D' ou l'on ne trouve que    */
                                        /* les definitions du type '-define ...', puis une deuxieme fois a la suite, la ou se trouve */
                                        /* concatene au fichier '$module$W' des '-define ...' le fichier '$fichierA' a compiler...   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L A   C O N S T R U C T I O N   R E C U R S I V E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   VISUALISER_LE_POINT_DE_DEPART                                                                                                 \
                    FAUX
#define   VISUALISER_UNE_SEULE_FOIS_LE_POINT_DE_DEPART                                                                                  \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(visualiser_le_point_de_depart,VISUALISER_LE_POINT_DE_DEPART)));
DEFV(Local,DEFV(Logical,INIT(visualiser_une_seule_fois_le_point_de_depart,VISUALISER_UNE_SEULE_FOIS_LE_POINT_DE_DEPART)));
                                        /* Introduit le 20110106174945 afin de pouvoir visualiser le point de depart de chaque       */
                                        /* iteration (pour 'v $xiirf/RECU.D5'). La possibilite de la visualiser plusieurs fois       */
                                        /* (pour chacun de ses "fils") a ete introduit le 20110107094539 ; ceci permettra donc       */
                                        /* de visualiser les "filiations" via 'v $xrv/particule.10$K' ('v $xiirf/RECU.E5').          */

#define   INTRODUIRE_DE_L_ALEATOIRE                                                                                                     \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(introduire_de_l_aleatoire,INTRODUIRE_DE_L_ALEATOIRE)));
                                        /* Indique si l'objet est deterministe ('FAUX') ou non deterministe ('VRAI').                */
#define   PROBABILITE_DE_GENERATION                                                                                                     \
                    FDU
DEFV(Local,DEFV(Float,INIT(probabilite_de_generation,PROBABILITE_DE_GENERATION)));
                                        /* Donne si 'IL_FAUT(introduire_de_l_aleatoire)' la probabilite de generation.               */

#define   CHANGER_LE_NOMBRE_D_ITERATIONS                                                                                                \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(changer_le_nombre_d_iterations,CHANGER_LE_NOMBRE_D_ITERATIONS)));
                                        /* Afin de pouvoir bloquer 'CHANGEMENT_DU_NOMBRE_D_ITERATIONS(...)'. Ceci fut introduit      */
                                        /* le 20110106173109 (pour 'v $xiirf/RECU.D5')...                                            */
#define   CHANGEMENT_DU_NOMBRE_D_ITERATIONS(n)                                                                                          \
                    COND(IL_FAUT(changer_le_nombre_d_iterations)                                                                        \
                        ,MAX2(UN,INTE(MUL2(RACX(RACX(ffh)),n)))                                                                         \
                        ,n                                                                                                              \
                         )                                                                                                              \
                                        /* Fonction de changement du nombre d'iterations ; ce nombre doit etre reduit puisque        */ \
                                        /* progressivement la taille des spirales est reduite : on prend 'RACX(RACX(...))' de        */ \
                                        /* facon arbitraire et non parametree... On notera enfin que l'on fait toujours au moins     */ \
                                        /* une iteration...                                                                          */
#define   CHANGEMENT_DU_FACTEUR_D_HOMOTHETIE(h)                                                                                         \
                    MUL2(ffh,h)                                                                                                         \
                                        /* Fonction de changement du facteur d'homothetie...                                         */
#define   CHANGEMENT_DE_L_ANGLE_THETA(t)                                                                                                \
                    NEUT(t)                                                                                                             \
                                        /* Fonction de changement de l'angle 'theta' initial, actuellement neutre...                 */
#define   CHANGEMENT_DE_L_INCREMENT_DE_L_ANGLE_THETA(dt)                                                                                \
                    NEUT(dt)                                                                                                            \
                                        /* Fonction de changement de l'increment de l'angle 'theta' initial, actuellement neutre...  */

BFonctionI

#define   VISUALISATION_D_UN_POINT(Xf,Yf,Zf,numero_de_l_iteration)                                                                      \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(visualiser_en_RVB))                                                                                    \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(d_nombre_d_iterations,d_FCONSTANTES));                                                         \
                                        /* Derivee du nombre d'iterations...                                                         */ \
                         EGAL(dcx,d#Fx(fh,theta_courant));                                                                              \
                         EGAL(dcy,d#Fy(fh,theta_courant));                                                                              \
                         EGAL(dcz,d#Fz(fh,theta_courant));                                                                              \
                                        /* Calcul des derivees dans le cas ou une visualisation RVB est demandee...                  */ \
                                                                                                                                        \
                         RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;                                                         \
                                        /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les    */ \
                                        /* extrema pourraient etre utilises pour la visualisation...                                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                                                                                                                        \
                    CALS(memorisation_1_point_07(SOUS(Xf,Xcentre_ESPACE)                                                                \
                                                ,SOUS(Yf,Ycentre_ESPACE)                                                                \
                                                ,SOUS(Zf,Zcentre_ESPACE)                                                                \
                                                ,dcx                                                                                    \
                                                ,dcy                                                                                    \
                                                ,dcz                                                                                    \
                                                ,numero_de_l_iteration                                                                  \
                                                 )                                                                                      \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Visualisation d'un point (introduit le 20110106174945).                                   */

DEFV(Local,DEFV(FonctionI,definition_recursive(nombre_d_iterations,cx,cy,cz,fh,theta,dtheta)))
DEFV(Argument,DEFV(Int,nombre_d_iterations));
                                        /* Nombre d'iterations a effectuer.                                                          */
DEFV(Argument,DEFV(Float,cx));
DEFV(Argument,DEFV(Float,cy));
DEFV(Argument,DEFV(Float,cz));
                                        /* Definition des coordonnees de depart (point "central" de la spirale).                     */
DEFV(Argument,DEFV(Float,fh));
                                        /* Definition du facteur d'homothetie courant.                                               */
DEFV(Argument,DEFV(Float,theta));
DEFV(Argument,DEFV(Float,dtheta));
                                        /* Definition de l'angle 'theta' de depart et de son increment...                            */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(theta0_courant,theta));
     DEFV(Float,INIT(d_theta0_courant,d_FCONSTANTES));
                                        /* Memorisation du 'theta' initial a cause de la fonction 'RAYON(h,theta)' qui fait un       */
                                        /* 'NORM(...)' en utilisant le 'theta' de depart et d'arrivee pour cette occurence de la     */
                                        /* fonction 'definition_recursive(...)' ; on ne peut pas utiliser 'theta0' car en effet,     */
                                        /* 'theta0_courant' et 'theta0' sont differents puisque 'theta_courant' devient le nouveau   */
                                        /* 'theta0_courant' lors d'un appel recursif de 'definition_recursive(...)'...               */
     DEFV(Float,INIT(theta_courant,theta));
     DEFV(Float,INIT(d_theta_courant,d_FVARIABLES_DE_DERIVATION));
                                        /* Definition du 'theta' courant. On notera que cette definition locale est due uniquement a */
                                        /* l'instruction :                                                                           */
                                        /*                                                                                           */
                                        /*                  INCR(theta_courant,dtheta);                                              */
                                        /*                                                                                           */
                                        /* qui suit...                                                                               */

     INIT_ERROR;
     /*..............................................................................................................................*/
     INCR(recursivite_courante,I);
                                        /* Gestion de la profondeur de la recursivite...                                             */

     Test(IFET(IL_FAUT(visualiser_le_point_de_depart)
              ,IL_FAUT(visualiser_une_seule_fois_le_point_de_depart)
               )
          )
          Bblock
          VISUALISATION_D_UN_POINT(cx,cy,cz,PRED(PREMIERE_ITERATION_D_UN_Komp));
                                        /* Memorisation du point de depart (introduit le 20110106174945).                            */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Komp(numero_de_l_iteration_courante,nombre_d_iterations)
          Bblock
          DEFV(Float,INIT(cx_recursif,ADD2(cx,Fx(fh,theta_courant))));
          DEFV(Float,INIT(cy_recursif,ADD2(cy,Fy(fh,theta_courant))));
          DEFV(Float,INIT(cz_recursif,ADD2(cz,Fz(fh,theta_courant))));
                                        /* Translation du point courant...                                                           */
          DEFV(Logical,INIT(l_iteration_courante_est_deja_visualisee,FAUX));
                                        /* Afin de savoir si l'iteration courante a deja ete visualisee...                           */

          Test(IFET(IL_FAUT(visualiser_le_point_de_depart)
                   ,IL_NE_FAUT_PAS(visualiser_une_seule_fois_le_point_de_depart)
                    )
               )
               Bblock
               VISUALISATION_D_UN_POINT(cx,cy,cz,PRED(PREMIERE_ITERATION_D_UN_Komp));
                                        /* Memorisation du point de depart (introduit sous cette forme le 20110107094539).           */
               VISUALISATION_D_UN_POINT(cx_recursif,cy_recursif,cz_recursif,numero_de_l_iteration_courante);
                                        /* Memorisation de l'iteration courante...                                                   */
               EGAL(l_iteration_courante_est_deja_visualisee,VRAI);
                                        /* L'iteration courante a donc deja ete visualisee...                                        */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IFOU(IFGE(recursivite_courante,recursivite_maximale)
                   ,IFLE(fh,fh_minimal)
                    )
               )
               Bblock
                                        /* Cas ou l'on a atteint la profondeur maximale de la recursivite, ou bien le facteur        */
                                        /* d'homothetie 'fh' est devenu trop petit ; la recursivite est stoppee, est une sphere      */
                                        /* est visualisee, ou encore s'il faut visualiser le point de depart de chaque iteration.    */
               Test(IFOU(IL_FAUT(visualiser_le_fantome)
                        ,IFGE(numero_de_l_iteration_courante,PREMIERE_ITERATION_VISUALISEE)
                         )
                    )
                    Bblock
                    Test(EST_FAUX(l_iteration_courante_est_deja_visualisee))
                         Bblock
                         VISUALISATION_D_UN_POINT(cx_recursif,cy_recursif,cz_recursif,numero_de_l_iteration_courante);
                                        /* Memorisation de l'iteration courante...                                                   */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
                                        /* Cas ou l'on n'a pas encore atteint la profondeur maximale de la recursivite, et ou le     */
                                        /* facteur d'homothetie 'fh' est encore trop grand, on doit donc construire une nouvelle     */
                                        /* spirale, mais d'echelle inferieure...                                                     */
               DEFV(Logical,INIT(il_faut_generer,VRAI));
                                        /* A priori, on va generer en faisant un appel recursif...                                   */

               Test(IL_FAUT(introduire_de_l_aleatoire))
                    Bblock
                    DEFV(Float,INIT(probabilite,FLOT__UNDEF));
                    GENERATION_D_UNE_PROBABILITE_01(probabilite);
                                        /* Generation de l'evenement...                                                              */

                    Test(IFGT(probabilite,probabilite_de_generation))
                         Bblock
                         EGAL(il_faut_generer,FAUX);
                                        /* Cas ou il faut "aborter" la generation...                                                 */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(il_faut_generer))
                    Bblock
                    CALS(definition_recursive(CHANGEMENT_DU_NOMBRE_D_ITERATIONS(nombre_d_iterations)
                                             ,cx_recursif,cy_recursif,cz_recursif
                                             ,CHANGEMENT_DU_FACTEUR_D_HOMOTHETIE(fh)
                                             ,CHANGEMENT_DE_L_ANGLE_THETA(theta_courant)
                                             ,CHANGEMENT_DE_L_INCREMENT_DE_L_ANGLE_THETA(dtheta)
                                              )
                         );
                                        /* Generation recursive de l'objet...                                                        */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ETes

          INCR(theta_courant,dtheta);
                                        /* Progression du 'theta' courant.                                                           */
          Eblock
     EKom

     DECR(recursivite_courante,I);
                                        /* Gestion de la profondeur de la recursivite...                                             */
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   I N I T I A L I S A T I O N S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.18.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N   O B J E T   R E C U R S I F   D E   T Y P E   " C H O U - F L E U R "  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     INITIALISATIONS_GENERALES;
                                        /* Initialisations generales faites au tout debut...                                         */

     iTRANSFORMAT_31(liste_COEFFICIENT_Kx,COEFFICIENT_Kx_IMPLICITE);
     iTRANSFORMAT_31(liste_COEFFICIENT_Ky,COEFFICIENT_Ky_IMPLICITE);
     iTRANSFORMAT_31(liste_COEFFICIENT_Kz,COEFFICIENT_Kz_IMPLICITE);
                                        /* Initialisation des facteurs d'echelle des trois coordonnees.                              */
     iTRANSFORMAT_31(liste_COEFFICIENT_Tx,COEFFICIENT_Tx_IMPLICITE);
     iTRANSFORMAT_31(liste_COEFFICIENT_Ty,COEFFICIENT_Ty_IMPLICITE);
                                        /* Initialisation des valeurs initiales des facteurs d'echelle de l'angle 'theta'.           */
     iTRANSFORMAT_31(liste_VARIABLE_cx0,VARIABLE_cx0_IMPLICITE);
     iTRANSFORMAT_31(liste_VARIABLE_cy0,VARIABLE_cy0_IMPLICITE);
     iTRANSFORMAT_31(liste_VARIABLE_cz0,VARIABLE_cz0_IMPLICITE);
                                        /* Initialisation des valeurs initiales des trois coordonnees (cx,cy,cz).                    */
     iTRANSFORMAT_31(liste_RECURSIVITE_MAXIMALE,RECURSIVITE_MAXIMALE_IMPLICITE);
                                        /* Initialisation de la valeur initiale de la recursivite maximale.                          */
     iTRANSFORMAT_31(liste_PARAMETRE_FFH,PARAMETRE_FFH_IMPLICITE);
                                        /* Initialisation de la valeur initiale du facteur du facteur d'homothetie.                  */
     iTRANSFORMAT_31(liste_PARAMETRE_FH_MINIMAL,PARAMETRE_FH_MINIMAL_IMPLICITE);
                                        /* Initialisation de la valeur initiale du minimum du facteur d'homothetie.                  */
     iTRANSFORMAT_31(liste_FACTEUR_MINIMAL_RAYON,FACTEUR_MINIMAL_RAYON_IMPLICITE);
     iTRANSFORMAT_31(liste_PARAMETRE_R0,PARAMETRE_R0_IMPLICITE);
                                        /* Initialisation de la valeur initiale du rayon et de l'exposant de 'theta'.                */
     iTRANSFORMAT_31(liste_PARAMETRE_THETA0,PARAMETRE_THETA0_IMPLICITE);
     iTRANSFORMAT_31(liste_PARAMETRE_dTHETA,PARAMETRE_dTHETA_IMPLICITE);
                                        /* Initialisation de la valeur initiale du 'theta' et de son increment.                      */
     iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE);
                                        /* Initialisation du nombre d'iterations.                                                    */

#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Kx="
                                                 ,fichier_COEFFICIENT_Kx
                                                 ,liste_COEFFICIENT_Kx
                                                 ,COEFFICIENT_Kx_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Ky="
                                                 ,fichier_COEFFICIENT_Ky
                                                 ,liste_COEFFICIENT_Ky
                                                 ,COEFFICIENT_Ky_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Kz="
                                                 ,fichier_COEFFICIENT_Kz
                                                 ,liste_COEFFICIENT_Kz
                                                 ,COEFFICIENT_Kz_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Tx="
                                                 ,fichier_COEFFICIENT_Tx
                                                 ,liste_COEFFICIENT_Tx
                                                 ,COEFFICIENT_Tx_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("COEFFICIENT_Ty="
                                                 ,fichier_COEFFICIENT_Ty
                                                 ,liste_COEFFICIENT_Ty
                                                 ,COEFFICIENT_Ty_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("VARIABLE_cx0="
                                                 ,fichier_VARIABLE_cx0
                                                 ,liste_VARIABLE_cx0
                                                 ,VARIABLE_cx0_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("VARIABLE_cy0="
                                                 ,fichier_VARIABLE_cy0
                                                 ,liste_VARIABLE_cy0
                                                 ,VARIABLE_cy0_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("VARIABLE_cz0="
                                                 ,fichier_VARIABLE_cz0
                                                 ,liste_VARIABLE_cz0
                                                 ,VARIABLE_cz0_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("RECURSIVITE_MAXIMALE="
                                                 ,fichier_RECURSIVITE_MAXIMALE
                                                 ,liste_RECURSIVITE_MAXIMALE
                                                 ,RECURSIVITE_MAXIMALE_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_FFH="
                                                 ,fichier_PARAMETRE_FFH
                                                 ,liste_PARAMETRE_FFH
                                                 ,PARAMETRE_FFH_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_FH_MINIMAL="
                                                 ,fichier_PARAMETRE_FH_MINIMAL
                                                 ,liste_PARAMETRE_FH_MINIMAL
                                                 ,PARAMETRE_FH_MINIMAL_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("FACTEUR_MINIMAL_RAYON="
                                                 ,fichier_FACTEUR_MINIMAL_RAYON
                                                 ,liste_FACTEUR_MINIMAL_RAYON
                                                 ,FACTEUR_MINIMAL_RAYON_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_R0="
                                                 ,fichier_PARAMETRE_R0
                                                 ,liste_PARAMETRE_R0
                                                 ,PARAMETRE_R0_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_THETA0="
                                                 ,fichier_PARAMETRE_THETA0
                                                 ,liste_PARAMETRE_THETA0
                                                 ,PARAMETRE_THETA0_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("PARAMETRE_dTHETA="
                                                 ,fichier_PARAMETRE_dTHETA
                                                 ,liste_PARAMETRE_dTHETA
                                                 ,PARAMETRE_dTHETA_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         GET_ARGUMENT_L("changer_nombre_iterations=""changer=""cni=",changer_le_nombre_d_iterations);
                                        /* Introduit le 20110106173109 (pour 'v $xiirf/RECU.D5')...                                  */
                         PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS="
                                                 ,fichier_NOMBRE_D_ITERATIONS
                                                 ,liste_NOMBRE_D_ITERATIONS
                                                 ,NOMBRE_D_ITERATIONS_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENTS_DE_VISUALISATION;

                         PROCESS_ARGUMENTS_DE_VISUALISATION_DES_AXES_DE_COORDONNEES;

                         GET_ARGUMENT_L("renormaliser=",renormaliser_les_niveaux);

                         GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);

                         GET_ARGUMENT_L("visualiser_point_depart=""vpd=",visualiser_le_point_de_depart);
                         GET_ARGUMENT_L("visualiser_point_depart_une_fois=""vpd1=",visualiser_une_seule_fois_le_point_de_depart);
                         GET_ARGUMENT_N("visualiser_point_depart_N_fois=""vpdN=",visualiser_une_seule_fois_le_point_de_depart);
                                        /* Argument introduit le 20110106174945 (pour 'v $xiirf/RECU.D5') et complete le             */
                                        /* 20110107094539 avec la possibilite de visualiser 'N' fois ('v $xiirf/RECU.E5').           */

                         GET_ARGUMENT_I("recursivite=",recursivite_maximale);

                         GET_ARGUMENT_L("aleatoire=",introduire_de_l_aleatoire);
                         GET_ARGUMENT_F("probabilite=",probabilite_de_generation);
                         )
                    );

#include  xrv/champs_5.19.I"
                                        /* Pour eviter le message :                                                                  */
                                        /*                                                                                           */
                                        /*                  Static function is not referenced.                                       */
                                        /*                                                                                           */
                                        /* sur 'SYSTEME_ES9000_AIX_CC'...                                                            */

#include  xrk/attractor.19.I"
                                        /* Validations et definition de l'espace physique.                                           */

     Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
          Bblock
          INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante);
                                        /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image.    */

          EGAL(kx,sCOEFFICIENT_Kx(numero_de_la_periode_courante));
          EGAL(ky,sCOEFFICIENT_Ky(numero_de_la_periode_courante));
          EGAL(kz,sCOEFFICIENT_Kz(numero_de_la_periode_courante));
                                        /* Calcul des facteurs d'echelle des trois coordonnees.                                      */
          EGAL(tx,sCOEFFICIENT_Tx(numero_de_la_periode_courante));
          EGAL(ty,sCOEFFICIENT_Ty(numero_de_la_periode_courante));
                                        /* Calcul des valeurs initiales des facteurs d'echelle de l'angle 'theta'.                   */
          EGAL(cx,sVARIABLE_cx0(numero_de_la_periode_courante));
          EGAL(cy,sVARIABLE_cy0(numero_de_la_periode_courante));
          EGAL(cz,sVARIABLE_cz0(numero_de_la_periode_courante));
                                        /* Calcul des valeurs initiales des trois coordonnees (cx,cy,cz).                            */
          EGAL(ffh,sPARAMETRE_FFH(numero_de_la_periode_courante));
                                        /* Calcul du facteur du facteur d'homothetie.                                                */
          EGAL(fh_minimal,sPARAMETRE_FH_MINIMAL(numero_de_la_periode_courante));
                                        /* Calcul du minimum du facteur d'homothetie.                                                */
          EGAL(facteur_minimal_rayon,sFACTEUR_MINIMAL_RAYON(numero_de_la_periode_courante));
          EGAL(r0,sPARAMETRE_R0(numero_de_la_periode_courante));
                                        /* Calcul de la valeur minimale du facteur multiplicatif associe a 'RAYON(...)' et du        */
                                        /* rayon initial.                                                                            */
          EGAL(theta0,sPARAMETRE_THETA0(numero_de_la_periode_courante));
          EGAL(dtheta,sPARAMETRE_dTHETA(numero_de_la_periode_courante));
                                        /* Calcul du 'theta' et de son increment.                                                    */

          vTRANSFORMAT_31(nombre_d_iterations
                         ,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
                          );
                                        /* Calcul du nombre d'iterations lorsqu'il est variable.                                     */

          vTRANSFORMAT_31(recursivite_maximale
                         ,sRECURSIVITE_MAXIMALE,numero_de_la_periode_courante,fichier_RECURSIVITE_MAXIMALE
                          );
                                        /* Calcul de la recursivite maximale lorsqu'elle est variable.                               */

          DECR(cz
              ,MOYS(Fz(fh,AXPB(nombre_d_iterations,dtheta,theta0))
                   ,Fz(fh,theta0)
                    )
               );
                                        /* Cette translation de la coordonnee 'Z' est destinee a centrer l'objet a l'origine, ce qui */
                                        /* permet d'ameliorer la perception tridimensionnel des objets stereoscopiques...            */

          CALS(definition_recursive(nombre_d_iterations
                                   ,cx,cy,cz
                                   ,fh
                                   ,theta0,dtheta
                                    )
               );
                                        /* Generation recursive de l'objet...                                                        */

#include  xrk/attractor.1A.I"

          VISUALISATION_DES_AXES_DE_COORDONNEES;
                                        /* Visualisation si necessaire des trois axes de coordonnees.                                */

          Test(IFET(IL_FAUT(visualiser_en_RVB),IL_FAUT(renormaliser_les_niveaux)))
               Bblock
               GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE_AVEC_RENORMALISATION(BLOC(VIDE;)
                                                                                   ,SOUS(dXmax_ESPACE,dXmin_ESPACE)
                                                                                   ,SOUS(maximum_de_dcx,minimum_de_dcx)
                                                                                   ,SOUS(dYmax_ESPACE,dYmin_ESPACE)
                                                                                   ,SOUS(maximum_de_dcy,minimum_de_dcy)
                                                                                   ,SOUS(dZmax_ESPACE,dZmin_ESPACE)
                                                                                   ,SOUS(maximum_de_dcz,minimum_de_dcz)
                                                                                    );
                                        /* Generation de l'image courante avec renormalisation des niveaux. On notera que la regle   */
                                        /* de trois faite ci-dessus a l'aide 'SCAL(...)' n'est possible que parce que les derivees   */
                                        /* ont ete ramenees dans [0,1[ grace aux fonctions '?_DERIVEE_DANS_01(...)'...               */
               Eblock
          ATes
               Bblock
               GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;));
                                        /* Generation de l'image courante sans renormalisation des niveaux.                          */
               Eblock
          ETes
          Eblock
     EKom

     EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES;
                                        /* Edition facultative des extrema des coordonnees.                                          */

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.