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