/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        J E U   D E   L A   V I E   G E N E R A L I S E  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/jeu_vie.01$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_IMAGESF_EXT
                                        /* Include introduit le 20240826142855...                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   NOMBRE_DE_GENERATIONS                                                                                                         \
                    UN                                                                                                                  \
                                        /* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure.     */ \
                                        /* Ce parametre a ete introduit le 20090125120250...                                         */

#define   SEUIL_D_INHIBITION                                                                                                            \
                    GRIS_4                                                                                                              \
                                        /* Seuil de definition de l'autorisation (>=seuil) ou d'inhibition (<seuil) du noyau.        */
#define   FACTEUR_MULTIPLICATIF_DE_CONVOLUTION                                                                                          \
                    FU                                                                                                                  \
                                        /* Facteur multiplicatif du produit de convolution en chaque point {X,Y}.                    */
#define   FACTEUR_DU_NOMBRE_DE_POINTS                                                                                                   \
                    INVE(FLOT(DIVI(FLOT(NIVR(BLANC))                                                                                    \
                                  ,FLOT(EXP2(DOUP(DEUX)))                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Facteur par lequel on multiplie chaque niveau de 'imageN' pour obtenir                    */ \
                                        /* la longueur courante du noyau au point {X,Y}.                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/convol.01.I"
                                        /* Introduits le 20190805120543 pour 'SELECTION_DES_NIVEAUX(...)'.                           */

#define   CHOIX_IMAGE(image1,image2)                                                                                                    \
                    COND(IL_NE_FAUT_PAS(permuter_les_deux_images),image1,image2)                                                        \
                                        /* Ceci fut introduit le 20120429082425 afin de supprimer le 'Imove(...)' assez penalisant   */ \
                                        /* en terme de performance...                                                                */

#define   ImageN                                                                                                                        \
                    ImageA1
#define   ImageV                                                                                                                        \
                    ImageA2
#define   ImageF                                                                                                                        \
                    ImageA3

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        J E U   D E   L A   V I E   G E N E R A L I S E  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageN),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageV),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
                                        /* Les trois images {N,V,F} ont ete introduites le 20190805120543...                         */

     DEFV(Int,INIT(nombre_de_generations,NOMBRE_DE_GENERATIONS));
                                        /* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure.     */
                                        /* Ce parametre a ete introduit le 20090125120250...                                         */
                                        /*                                                                                           */
                                        /* On notera que grace a 'CHOIX_IMAGE(...)' l'image Resultat est identique a l'image         */
                                        /* Argument lorsque le nombre de generations est negatif ou nul...                           */

     DEFV(genere_p,INIT(seuil_d_inhibition,SEUIL_D_INHIBITION));
                                        /* Seuil de definition de l'autorisation (>=seuil) ou d'inhibition (<seuil) du noyau.        */
     DEFV(Float,INIT(facteur_multiplicatif,FACTEUR_MULTIPLICATIF_DE_CONVOLUTION));
                                        /* Facteur multiplicatif du produit de convolution en chaque point {X,Y}.                    */
     DEFV(Float,INIT(facteur_du_nombre_de_points,FACTEUR_DU_NOMBRE_DE_POINTS));
                                        /* Facteur par lequel on multiplie chaque niveau de 'imageN' pour obtenir                    */
                                        /* la longueur courante du noyau au point {X,Y}.                                             */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageN=""N=",nom_imageN);
                         GET_ARGUMENT_C("imageV=""V=",nom_imageV);
                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_L("standard=",les_images_sont_standards);
                                        /* Option introduite le 20240826142855...                                                    */

                         GET_ARGUMENT_L("tore=",Pconvolution_____placer_l_image_sur_un_tore);
                         GET_ARGUMENT_L("ponderations_utiles=",Pconvolution_____normaliser_uniquement_avec_les_ponderations_utilisees);
                         GET_ARGUMENT_I("pmX=",Pconvolution_____pasX_de_la_mosaique_de_convolution);
                         GET_ARGUMENT_I("pmY=",Pconvolution_____pasY_de_la_mosaique_de_convolution);
                         GET_ARGUMENT_I("tmX=",Pconvolution_____translationX_de_la_mosaique_de_convolution);
                         GET_ARGUMENT_I("tmY=",Pconvolution_____translationY_de_la_mosaique_de_convolution);
                         GET_ARGUMENT_I("sautC=""saut=",Pconvolution_____nombre_de_points_sautes);
                         GET_ARGUMENT_I("sautN=",CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE_____Pnoyau_nombre_de_points_sautes);
                         GET_ARGUMENT_I("spirale_horizontal=",SPIRALE_DEFINITION_____facteur_delta_horizontal);
                         GET_ARGUMENT_I("spirale_vertical=",SPIRALE_DEFINITION_____facteur_delta_vertical);
                         GET_ARGUMENT_F("Pcumul=""Pcum=",Pconvolution_____ponderation_de_cumul_courant_normalise_apres_transfert);
                         GET_ARGUMENT_F("Pminimum=""Pmin=",Pconvolution_____ponderation_de_Pconvolution_____minimum_sur_la_spirale);
                         GET_ARGUMENT_F("Pmaximum=""Pmax=",Pconvolution_____ponderation_de_Pconvolution_____maximum_sur_la_spirale);
                         GET_ARGUMENT_F("Pmoyenne=""Pmoy=",Pconvolution_____ponderation_de_Pconvolution_____moyenne_sur_la_spirale);
                         GET_ARGUMENT_L("conserver_minimum=""cmin="
                                       ,Pconvolution_____conserver_le_niveau_du_centre_de_la_spirale_s_il_est_le_minimum
                                        );
                         GET_ARGUMENT_L("conserver_maximum=""cmax="
                                       ,Pconvolution_____conserver_le_niveau_du_centre_de_la_spirale_s_il_est_le_maximum
                                        );

                         GET_ARGUMENT_P("seuil=",seuil_d_inhibition);
                         GET_ARGUMENT_F("fc=""facteur_convolution=""facteur=""f=",facteur_multiplicatif);
                         GET_ARGUMENT_F("fp=""facteur_points=""Facteur=",facteur_du_nombre_de_points);
                                        /* Options introduites le 20190805120543...                                                  */

                         GET_ARGUMENT_L("circulaire=",Pconvolution_____parcourir_circulairement_les_spirales_carrees);
                                        /* Option introduite le 20040703110338...                                                    */
                         GET_ARGUMENT_L("circulaire_optimale="
                                       ,Pconvolution_____adapter_le_nombre_de_points_lors_du_parcours_circulaire_des_spirales_carrees
                                        );
                                        /* Option introduite le 20061224122843...                                                    */

                         GET_ARGUMENTS2_I("taille=""noyau=""demi_taille="
                                         ,Ijeu_de_la_vie_generalise_____demi_taille_du_noyau
                                         ,IFjeu_de_la_vie_generalise_____demi_taille_du_noyau
                                          );

                         GET_ARGUMENT_I("nombre_generations=""generations=""ng=""iterations=""iter=",nombre_de_generations);
                                        /* Option introduite le 20090125120250 et completee le 20090126113528 ("iterations=",...).   */

                         GET_ARGUMENTS4_F("force_vie=""fv="
                                         ,Ijeu_de_la_vie_generalise_____force_de_la_vie
                                         ,Ijeu_de_la_vie_generalise_variable_____force_de_la_vie
                                         ,IFjeu_de_la_vie_generalise_____force_de_la_vie
                                         ,IFjeu_de_la_vie_generalise_variable_____force_de_la_vie
                                          );
                         GET_ARGUMENTS2_F("rapport_critique=""rc="
                                         ,Ijeu_de_la_vie_generalise_____rapport_critique
                                         ,IFjeu_de_la_vie_generalise_____rapport_critique
                                          );
                         GET_ARGUMENTS2_F("rapport_critique_variable=""rcv="
                                         ,Ijeu_de_la_vie_generalise_variable_____rapport_critique
                                         ,IFjeu_de_la_vie_generalise_variable_____rapport_critique
                                          );
                                        /* Options introduites le 20090125100558...                                                  */
                                        /*                                                                                           */
                                        /* On notera que l'on ne peut utiliser 'GET_ARGUMENTS2_F(...)' ici car les valeurs par       */
                                        /* defaut pour 'Ijeu_de_la_vie_generalise(...)' et 'Ijeu_de_la_vie_generalise_variable(...)' */
                                        /* sont differentes ('v $xig/fonct$vv$DEF 20190806104105' a ce propos).                      */
                                        /*                                                                                           */
                                        /* Je note le 20240826142855 que le commentaire precedent relatif a 'GET_ARGUMENTS2_F(...)'  */
                                        /* concerne evidemment "rc=" et "rcv=" qui ne peuvent etre regroupes a cette date en un      */
                                        /* seul 'GET_ARGUMENTS4_F(...)'...                                                           */

                         GET_ARGUMENT_L("messages_noyau_convolution_variable=""messages=""mncv="
                                       ,CALCUL_D_UN_NOYAU_DE_CONVOLUTION_VARIABLE_____editer_les_messages_du_calcul
                                        );
                                        /* Options introduites le 20190805124137...                                                  */

                         )
                    );

     CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     BSaveModifyVariable(Logical,Iload_image_____un_nom_absent_est_une_erreur,FAUX);

     CALi(Iload_image(ImageN,nom_imageN));
     CALi(Iload_image(ImageV,nom_imageV));
     CALi(Iload_image(ImageF,nom_imageF));

     ESaveModifyVariable(Logical,Iload_image_____un_nom_absent_est_une_erreur);

     Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA,IFmageA,nom_imageA))))
          Bblock
          DEFV(Logical,INIT(permuter_les_deux_images,FAUX));
                                        /* Ceci fut introduit le 20120429082425 afin de supprimer le 'Imove(...)' assez penalisant   */
                                        /* en terme de performance...                                                                */

          Repe(nombre_de_generations)
               Bblock
               Test(I3ET(IFEQ_chaine(nom_imageN,NOM_PIPE),IFEQ_chaine(nom_imageV,NOM_PIPE),IFEQ_chaine(nom_imageF,NOM_PIPE)))
                                        /* Test introduit le 20190805120543...                                                       */
                    Bblock
                    CALS(gIjeu_de_la_vie_generalise(les_images_sont_standards
                                                   ,CHOIX_IMAGE(ImageR,ImageA),CHOIX_IMAGE(IFmageR,IFmageA)
                                                   ,CHOIX_IMAGE(ImageA,ImageR),CHOIX_IMAGE(IFmageA,IFmageR)
                                                    )
                         );
                                        /* Jeu de la vie generalise...                                                               */
                    Eblock
               ATes
                    Bblock
                    CALS(gIjeu_de_la_vie_generalise_variable(les_images_sont_standards
                                                            ,CHOIX_IMAGE(ImageR,ImageA),CHOIX_IMAGE(IFmageR,IFmageA)
                                                            ,facteur_multiplicatif
                                                            ,CHOIX_IMAGE(ImageA,ImageR),CHOIX_IMAGE(IFmageA,IFmageR)
                                                            ,facteur_du_nombre_de_points
                                                            ,ImageN
                                                            ,ImageV
                                                            ,ImageF
                                                            ,seuil_d_inhibition
                                                             )
                         );
                                        /* Jeu de la vie generalise variable (introduit le 20190805120543...).                       */
                    Eblock
               ETes

               EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));
               Eblock
          ERep

          EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));

          CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     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.