/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O P E R A T I O N   I N V E R S E   D E   L A   R E D U C T I O N   D ' U N E   S U I T E   D E   6 4   I M A G E S  :     */
/*        E N   V U E   D E   L E S   A N I M E R  :                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une serie d'images en                                                                    */
/*                  agrandissant chacune des sous-images d'une                                                                       */
/*                  image Argument du type '$R64'.                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                Y ^                                                                                                                */
/*                  |                                                                                                                */
/*             Ymax |----------------------------------------                                                                        */
/*                  | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |                                                                        */
/*                  |----------------------------------------                                                                        */
/*                  | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |                                                                        */
/*             Ymin |------------------------------------------->                                                                    */
/*                 Xmin                                   Xmax  X                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/noitcuder_64$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PAS_DES_IMAGES                                                                                                                \
                    I                                                                                                                   \
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
#define   PREMIERE_IMAGE                                                                                                                \
                    PREMIERE_IMAGE_ABSOLUE                                                                                              \
                                        /* Numero de la premiere image a integrer...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C U M U L A T I O N   D ' U N E   S E R I E   D ' I M A G E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom du Resultat de l'agrandissement.                                                      */
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de la sequence a integrer.                                                            */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(CHAR,INIT(POINTERc(nom_imageR_j),NOM_UNDEF));
                                        /* Noms courant des images.                                                                  */
     DEFV(Int,INIT(pas_horizontal,PasX));
     DEFV(Int,INIT(pas_vertical,PasY));
                                        /* Pas de parcours des images Resultats ; on notera que l'on ne peut utiliser, comme cela    */
                                        /* se fait habituellement, les pas (pasX,pasY), et ce a cause de la gestion des "voint"s...  */
     DEFV(genere_p,INIT(voint_courant,NIVEAU_UNDEF));
                                        /* Niveau courant de l'image courante...                                                     */
     DEFV(Float,INIT(puissance_OX,FU));
     DEFV(Float,INIT(puissance_OY,FU));
     DEFV(Float,INIT(puissance_ponderation,FU));
     DEFV(Int,INIT(graine,UNDEF));
                                        /* Argument au generateur fractal dont la valeur est indifferente...                         */
     DEFV(Float,INIT(borne_inferieure,FLOT__NOIR));
     DEFV(Float,INIT(borne_superieure,FLOT__BLANC));
                                        /* Argument d'amplitude des niveaux fractals a generer.                                      */
     DEFV(Float,INIT(facteur_d_echelle_OX,FU));
     DEFV(Float,INIT(facteur_d_echelle_OY,FU));
                                        /* Argument de facteur d echelle du champ.                                                   */
     DEFV(Float,INIT(translation_OX,FZERO));
     DEFV(Float,INIT(translation_OY,FZERO));
                                        /* Argument de translation du champ.                                                         */
     DEFV(Float,INIT(origine_OX,FLOT__UNDEF));
     DEFV(Float,INIT(origine_OY,FLOT__UNDEF));
     DEFV(Float,INIT(extremite_OX,FLOT__UNDEF));
     DEFV(Float,INIT(extremite_OY,FLOT__UNDEF));
                                        /* Definition du 2D-tore support du champ.                                                   */
     DEFV(coeffF_2D,Cechelle_globale);
                                        /* Echelle globale du champ.                                                                 */
     DEFV(deltaF_2D,translation);
                                        /* Translation du champ.                                                                     */
     DEFV(pointF_2D,origine);
                                        /* Definition de l'origine du 2D-tore,                                                       */
     DEFV(pointF_2D,extremite);
                                        /* Definition de l'extremite du 2D-tore.                                                     */
     DEFV(deltaF_2D,maille_initiale);
                                        /* Maille initiale.                                                                          */

     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("Fcalcul_d_un_noeud_relativement_au_centre_____compatibilite_20080925=""compatibilite_20080925="
                                       ,Fcalcul_d_un_noeud_relativement_au_centre_____compatibilite_20080925
                                        );
                                        /* Introduit le 20080925165153...                                                            */

                         GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);

                         GET_ARGUMENT_I("horizontal=""h=",pas_horizontal);
                         GET_ARGUMENT_I("vertical=""v=",pas_vertical);
                                        /* Le 20061211110116 les parametres {"px=","py="} ont change de nom car ils etaient          */
                                        /* multiplement definis ('v $xig/fonct$vv$DEF ENTREE_ARGUMENT_pas'). Ils s'appellent         */
                                        /* donc dorenavant {"horizontal=","vertical="}...                                            */
                         )
                    );

     Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_imageA))))
          Bblock
                                        /* A1 : matrice des 64 petites images a agrandir...                                          */

          SET_ECHANTILLONNAGE_POUR_SIMULER_LES_VOINTS;
                                        /* Mise en place d'un pas sur les trois axes compatibles avec la gestion des "voint"s. On    */
                                        /* consultera avec interet le fichier 'v $xiii/Images$DEF' a ce propos...                    */

          INITIALISATION_COEFFICIENT_2D(Cechelle_globale,facteur_d_echelle_OX,facteur_d_echelle_OY);
                                        /* Definition de l'echelle globale sur le champ fractal 2D.                                  */
          INITIALISATION_ACCROISSEMENT_2D(translation,translation_OX,translation_OY);
                                        /* Definition de la translation sur le champ.                                                */

          EGAL(origine_OX,_____cNORMALISE_OX(TORE_PLAT_INFERIEUR));
          EGAL(origine_OY,_____cNORMALISE_OY(TORE_PLAT_INFERIEUR));
          EGAL(extremite_OX,_____cNORMALISE_OX(TORE_PLAT_SUPERIEUR));
          EGAL(extremite_OY,_____cNORMALISE_OY(TORE_PLAT_SUPERIEUR));
                                        /* Definition du 2D-tore support du champ. ATTENTION : cette operation doit avoir lieu       */
                                        /* apres le 'GET_ARGUMENTSi(...)' a cause de la definition du format de l'image...           */

          INITIALISATION_POINT_2D(origine,origine_OX,origine_OY);
          INITIALISATION_POINT_2D(extremite,extremite_OX,extremite_OY);
                                        /* Definition du 2D-tore support du champ.                                                   */

          INITIALISATION_ACCROISSEMENT_2D(maille_initiale
                                         ,_____lNORMALISE_OX(pasX)
                                         ,_____lNORMALISE_OY(pasY)
                                          );
                                        /* Definition de la maille initiale qui correspond evidemment a (pasX,pasY) de gestion       */
                                        /* des "voint"s...                                                                           */

          EGAL(numero_d_image,premiere_image);
                                        /* Initialisation du numero de l'image courante a generer...                                 */

          begin_album
               Bblock
               Test(IFET(IFEQ(X,INTX(Xmin)),IFEQ(Y,INTY(Ymin))))
                    Bblock
                    PUSH_TRANSLATION;
                    SET_TRANSLATION(TraX,TraY);
                    gPUSH_ECHANTILLONNAGE;
                    gSET_ECHANTILLONNAGE(pas_horizontal,pas_vertical);
                                        /* On met en place un echantillonnage permettant de proceder aux initialisations...          */

                    CALi(Inoir(ImageR));
                    CALi(Inoir(ImageA2));
                                        /* Initialisation de l'image courante au debut de chaque nouveau "plan" 'Z'.                 */
                                        /* ATTENTION, c'est bien 'CALS(...)' et non pas 'CALi(...)' qu'il faut utiliser ici...       */

                    gPULL_ECHANTILLONNAGE;
                    PULL_TRANSLATION;
                                        /* Restauration de l'echantillonnage des "voint"s...                                         */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               load_voint(voint_courant,ImageA1,X,Y,Z);
               store_point(voint_courant,ImageA2,X,Y,FVARIABLE);
                                        /* A2 : version agrandie de la sous-image courante mais sur une maille 8x8 grossiere...      */

               Test(IFET(IFEQ(X,INTX(Xmax)),IFEQ(Y,INTY(Ymax))))
                    Bblock
                    PUSH_TRANSLATION;
                    SET_TRANSLATION(TraX,TraY);
                    gPUSH_ECHANTILLONNAGE;
                    gSET_ECHANTILLONNAGE(pas_horizontal,pas_vertical);
                                        /* On met en place un echantillonnage permettant de proceder a l'interpolation...            */

                    CALS(Ifractal_2D(ImageR
                                    ,puissance_OX,puissance_OY,puissance_ponderation
                                    ,FIRST_NIVEAU_DE_RECURSION
                                    ,graine,borne_inferieure,borne_superieure
                                    ,ADRESSE(Cechelle_globale)
                                    ,ADRESSE(translation)
                                    ,ADRESSE(origine)
                                    ,ADRESSE(extremite)
                                    ,ADRESSE(maille_initiale)
                                    ,VRAI
                                    ,ImageA2
                                     )
                         );
                                        /* R  : version agrandie de la sous-image courante lissee a la fin de chaque "plan" 'Z'.     */

                    gPULL_ECHANTILLONNAGE;
                    PULL_TRANSLATION;
                                        /* Restauration de l'echantillonnage des "voint"s...                                         */

                    EGAL(nom_imageR_j
                        ,chain_Aconcaten2_sauf_nom_pipe(nom_imageR,chain_numero(INTE(numero_d_image),nombre_de_chiffres))
                         );
                    CALi(Iupdate_image(nom_imageR_j,ImageR));

                    CALZ_FreCC(nom_imageR_j);
                    INCR(numero_d_image,pas_des_images);
                                        /* Progression du numero de l'image courante a generer...                                    */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          end_album
          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.