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