/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E B A S E A D E U X A L B U M S : */
/* */
/* */
/* Definition : */
/* */
/* Ce fichier contient toutes les fonctions */
/* de base de gestion et de manipulation de */
/* deux albums raster, quelle que soit la definition. */
/* */
/* */
/* Author of '$xiii/di_album$DEF' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 19930000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E P L A C E M E N T D ' U N A L B U M : */
/* */
/*************************************************************************************************************************************/
#define AMOVE(albumR,albumA) \
Bblock \
begin_album \
Bblock \
Astore_point(Aload_point(albumA,X,Y,Z),albumR,X,Y,Z); \
Eblock \
end_album \
Eblock \
/* Introduit le 20160815082213 a cause des references a 'Amove(...)' qui sont faites */ \
/* dans plusieurs blocs different de 'v $xiii/di_album$FON AMOVE'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* N O R M A L I S A T I O N D ' U N A L B U M N O N S T A N D A R D : */
/* */
/*************************************************************************************************************************************/
#define EPSILON_DE_SEUILLAGE_INFERIEUR_PAR_RAPPORT_AU_NIVEAU_ORIGINE_POUR_AFnormalisation \
EPSILON_DE_SEUILLAGE_INFERIEUR_PAR_RAPPORT_AU_NIVEAU_ORIGINE_POUR_IFnormalisation \
/* Pour eviter des "underflows" dans 'AFnormalisation(...)' (intrdouit le 20100504153106). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S P E R M U T A T I O N S D E S D I M E N S I O N S D ' U N A L B U M : */
/* */
/*************************************************************************************************************************************/
#define PERMUTATION_XYZ_DES_DIMENSIONS_D_UN_ALBUM \
"XYZ" \
/* Nom de la permutation {X,Y,Z}. */
#define PERMUTATION_XZY_DES_DIMENSIONS_D_UN_ALBUM \
"XZY" \
/* Nom de la permutation (X,Z,Y). */
#define PERMUTATION_YZX_DES_DIMENSIONS_D_UN_ALBUM \
"YZX" \
/* Nom de la permutation (Y,Z,X). */
#define PERMUTATION_YXZ_DES_DIMENSIONS_D_UN_ALBUM \
"YXZ" \
/* Nom de la permutation (Y,X,Z). */
#define PERMUTATION_ZXY_DES_DIMENSIONS_D_UN_ALBUM \
"ZXY" \
/* Nom de la permutation (Z,X,Y). */
#define PERMUTATION_ZYX_DES_DIMENSIONS_D_UN_ALBUM \
"ZYX" \
/* Nom de la permutation (Z,Y,X). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O U P E R E L A T I V E M E N T Q U E L C O N Q U E D ' U N A L B U M */
/* A L ' A I D E D ' U N P O L Y N O M E E N { X , Y , Z } D U T R O I S I E M E D E G R E : */
/* */
/*************************************************************************************************************************************/
#define HORNER_3_03__COUPE_QUELCONQUE_ALBUM(x,y,z) \
HORNER_3_03(x,y,z \
,Acoupe_quelconque_____a333 \
,Acoupe_quelconque_____a332 \
,Acoupe_quelconque_____a331 \
,Acoupe_quelconque_____a330 \
,Acoupe_quelconque_____a323 \
,Acoupe_quelconque_____a322 \
,Acoupe_quelconque_____a321 \
,Acoupe_quelconque_____a320 \
,Acoupe_quelconque_____a313 \
,Acoupe_quelconque_____a312 \
,Acoupe_quelconque_____a311 \
,Acoupe_quelconque_____a310 \
,Acoupe_quelconque_____a303 \
,Acoupe_quelconque_____a302 \
,Acoupe_quelconque_____a301 \
,Acoupe_quelconque_____a300 \
,Acoupe_quelconque_____a233 \
,Acoupe_quelconque_____a232 \
,Acoupe_quelconque_____a231 \
,Acoupe_quelconque_____a230 \
,Acoupe_quelconque_____a223 \
,Acoupe_quelconque_____a222 \
,Acoupe_quelconque_____a221 \
,Acoupe_quelconque_____a220 \
,Acoupe_quelconque_____a213 \
,Acoupe_quelconque_____a212 \
,Acoupe_quelconque_____a211 \
,Acoupe_quelconque_____a210 \
,Acoupe_quelconque_____a203 \
,Acoupe_quelconque_____a202 \
,Acoupe_quelconque_____a201 \
,Acoupe_quelconque_____a200 \
,Acoupe_quelconque_____a133 \
,Acoupe_quelconque_____a132 \
,Acoupe_quelconque_____a131 \
,Acoupe_quelconque_____a130 \
,Acoupe_quelconque_____a123 \
,Acoupe_quelconque_____a122 \
,Acoupe_quelconque_____a121 \
,Acoupe_quelconque_____a120 \
,Acoupe_quelconque_____a113 \
,Acoupe_quelconque_____a112 \
,Acoupe_quelconque_____a111 \
,Acoupe_quelconque_____a110 \
,Acoupe_quelconque_____a103 \
,Acoupe_quelconque_____a102 \
,Acoupe_quelconque_____a101 \
,Acoupe_quelconque_____a100 \
,Acoupe_quelconque_____a033 \
,Acoupe_quelconque_____a032 \
,Acoupe_quelconque_____a031 \
,Acoupe_quelconque_____a030 \
,Acoupe_quelconque_____a023 \
,Acoupe_quelconque_____a022 \
,Acoupe_quelconque_____a021 \
,Acoupe_quelconque_____a020 \
,Acoupe_quelconque_____a013 \
,Acoupe_quelconque_____a012 \
,Acoupe_quelconque_____a011 \
,Acoupe_quelconque_____a010 \
,Acoupe_quelconque_____a003 \
,Acoupe_quelconque_____a002 \
,Acoupe_quelconque_____a001 \
,Acoupe_quelconque_____a000 \
) \
/* Introduit le 20171117133418 pour 'v $xrf/EpongeDeMenger.01$I HORNER_3_03__...' et ce */ \
/* afin de pouvoir reutiliser tous les 'Acoupe_quelconque_____a???' tels quels sans avoir */ \
/* a redefinir de tels parametres dans 'v $xrf/EpongeDeMenger.01$K Acoupe_quelconque_____a'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M O Y E N N A G E D ' U N A L B U M " N O N S T A N D A R D " */
/* A L ' I N T E R I E U R D E P A V E S R E C T A N G U L A I R E S : */
/* */
/*************************************************************************************************************************************/
#define AFmoyennage_dans_des_paves_rectangulaires(albumR,imageA) \
Bblock \
begin_fuite \
Bblock \
DEFV(Float(parametre_d_interpolation,INIT(DIVI(FLOT(COZR(Z)),FLOT(COZR(Zmax)))))); \
/* Parametre d'interpolation pour calculer les tailles du pave, soit 'taille_du_pave_X' et */ \
/* 'taille_du_pave_Y' dans 'v $xiii/di_image$FON IFmoyennage_dans_des_paves_rectangulaires'. */ \
\
CALS(IFmoyennage_dans_des_paves_rectangulaires(PAGE(albumR,Z) \
,imageA \
,INTERPOLATION_LINEAIRE(PasX,dimX,parametre_d_interpolation) \
,INTERPOLATION_LINEAIRE(PasY,dimY,parametre_d_interpolation) \
) \
); \
Eblock \
end_fuite \
Eblock \
/* Generation d'un album donnant le moyennage de 'imageA' pour differentes tailles de paves */ \
/* (interpolees entre 'PasX.PasY' et 'dimX.dimY'). Ceci fut introduit le 20080218144604. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* J E U D E L A V I E S T A N D A R D : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_MINIMAL_DE_VOISINS_DE_Ajeu_de_la_vie \
ZERO
#define NOMBRE_MAXIMAL_DE_VOISINS_DE_Ajeu_de_la_vie \
INTE(SOUS(PUIX(TROIS,TRI_DIMENSIONNEL),UN))
/* Nombre maximal de voisins (introduit le 20120229152056). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M O D E L E D E I S I N G T R I D I M E N S I O N N E L A T E M P E R A T U R E L O C A L E : */
/* */
/*************************************************************************************************************************************/
#define Amodele_d_Ising_3D_a_temperature_locale_VERSION_01 \
/* La temperature dite "locale" est en fait identique a la temperature "globale" car, dans */ \
/* cas contraire, cela demanderait l'implementation de : */ \
/* */ \
/* DEFV(albumF,temperature_locale) */ \
/* */ \
/* qui, sauf pour de petits axes 'Z', ne pourrait tenir en machine... */
#nodefine Amodele_d_Ising_3D_a_temperature_locale_VERSION_02 \
/* La temperature dite "locale" est vraiment locale car elle est fonction du point */ \
/* courant {X,Y,Z}. */
#define PONDERATION_D_UN_POINT_DANS_Amodele_d_Ising_3D \
FU \
/* Definition du facteur par defaut des points du voisinage du point courant {X,Y,Z}. */
#define DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D
#define DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Amodele_d_Ising_3D \
DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Imodele_d_Ising_2D
#define DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Imodele_d_Ising_2D
/* Demi-dimensions (arbitraire) du noyau de 'Amodele_d_Ising_3D(...)'. Elles sont choisies */
/* identiques a celles de 'Imodele_d_Ising_2D(...)' afin de simplifier certaines choses (et */
/* par exemple 'v _____xivPdf_10_2/.ISIN.H.11.$U FoRmAtN'). */
#define DimNo_Amodele_d_Ising_3D \
DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D) \
/* Dimension (arbitraire) du noyau de 'Amodele_d_Ising_3D(...)'. */ \
/* */ \
/* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Amodele_d_Ising_3D' ne peut etre */ \
/* utilise (d'ou 'DimNo_Amodele_d_Ising_3D') a cause de la procedure '$xcg/gen.ext$Z' */ \
/* ('v $xiii/di_album$FON DimNo_Amodele_d_Ising_3D'). */
#define Amodele_d_Ising_3D_____XYZmin \
NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D)
#define Amodele_d_Ising_3D_____XYZmax \
NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D)
/* Dimension des axes {X,Y,Z} necessaires a la lecture de fichiers contenant un noyau */
/* ('v $xci/Ising_3D.11$K Amodele_d_Ising_3D_____noyau'). */
#define Amodele_d_Ising_3D_____XYZmin_effectif \
NEGA(Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau)
#define Amodele_d_Ising_3D_____XYZmax_effectif \
NEUT(Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau)
/* Extremites effectives des axes {X,Y,Z}. */
#define ACCES_NOYAU_DANS_Amodele_d_Ising_3D(x,y,z) \
ITb3(Amodele_d_Ising_3D_____noyau \
,INDX(z,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D)) \
,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D)) \
,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D)) \
) \
/* Acces a l'element {x,y,z} du noyau de 'Amodele_d_Ising_3D(...)'. ATTENTION a l'odre */ \
/* des trois coordonnees identique a celui de 'v $xiii/Images$DEF ALBUM.album.x.y.z.'. */
#define INITIALISATION_ELEMENT_NOYAU_DANS_Amodele_d_Ising_3D(x,y,z,valeur) \
Bblock \
EGAL(ACCES_NOYAU_DANS_Amodele_d_Ising_3D(x,y,z) \
,valeur \
); \
Eblock \
/* Initialisation de l'element {x,y,z}. */
#define INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
Bblock \
Test(IL_FAUT(Amodele_d_Ising_3D_____utiliser_un_noyau)) \
Bblock \
Test(IFINff(Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
) \
) \
Bblock \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("les dimensions du noyau du modele d'Ising tridimensionnel sont incorrectes"); \
CAL1(Prer1("%d est demande\n",Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau)); \
CAL1(Prer2("alors que seul [%d,%d] est possible\n" \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Amodele_d_Ising_3D \
) \
); \
\
EGAL(Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Amodele_d_Ising_3D \
); \
\
CAL1(Prer1("%d est donc force\n",Amodele_d_Ising_3D_____demi_dimension_effective_du_noyau)); \
Eblock \
ETes \
\
Test(IL_FAUT(Amodele_d_Ising_3D_____initialiser_le_noyau)) \
Bblock \
begin_albumQ(DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasZ \
,DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasY \
,DoIn,Amodele_d_Ising_3D_____XYZmin_effectif,Amodele_d_Ising_3D_____XYZmax_effectif,PasX \
) \
Bblock \
INITIALISATION_ELEMENT_NOYAU_DANS_Amodele_d_Ising_3D(X,Y,Z \
,PONDERATION_D_UN_POINT_DANS_Amodele_d_Ising_3D \
); \
/* Initialisation de l'element courant {X,Y,Z}. */ \
Eblock \
end_albumQ(EDoI,EDoI,EDoI) \
\
EGAL(Amodele_d_Ising_3D_____initialiser_le_noyau,FAUX); \
/* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation eventuelle du noyau de 'Amodele_d_Ising_3D(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N V O L U T I O N F L O T T A N T E S I M P L I F I E E D ' U N A L B U M F L O T T A N T : */
/* */
/*************************************************************************************************************************************/
#define PONDERATION_D_UN_POINT_DANS_AFFconvolution \
FU \
/* Definition du facteur par defaut des points du voisinage du point courant {X,Y,Z}. */
#define DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_AFFconvolution \
UN
#define DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_AFFconvolution \
TROIS
#define DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution \
SOIXANTE_QUATRE
/* Demi-dimensions (arbitraire) du noyau de 'AFFconvolution(...)'. */
#define DimNo_AFFconvolution \
DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution) \
/* Dimension (arbitraire) du noyau de 'AFFconvolution(...)'. */ \
/* */ \
/* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_AFFconvolution' ne peut etre */ \
/* utilise (d'ou 'DimNo_AFFconvolution') a cause de la procedure '$xcg/gen.ext$Z' */ \
/* ('v $xiii/di_album$FON DimNo_AFFconvolution'). */
#define AFFconvolution_____XYZmin \
NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution)
#define AFFconvolution_____XYZmax \
NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution)
/* Dimension des axes {X,Y,Z} necessaires a la lecture de fichiers contenant un noyau */
/* ('v $xci/Ising_3D.11$K AFFconvolution_____noyau'). */
#define AFFconvolution_____XYZmin_effectif \
NEGA(AFFconvolution_____demi_dimension_effective_du_noyau)
#define AFFconvolution_____XYZmax_effectif \
NEUT(AFFconvolution_____demi_dimension_effective_du_noyau)
/* Extremites effectives des axes {X,Y,Z}. */
#define ACCES_NOYAU_DANS_AFFconvolution(x,y,z) \
ITb3(AFFconvolution_____noyau \
,INDX(z,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution)) \
,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution)) \
,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution)) \
) \
/* Acces a l'element {x,y,z} du noyau de 'AFFconvolution(...)'. ATTENTION a l'odre */ \
/* des trois coordonnees identique a celui de 'v $xiii/Images$DEF ALBUM.album.x.y.z.'. */
#define INITIALISATION_ELEMENT_NOYAU_DANS_AFFconvolution(x,y,z,valeur) \
Bblock \
EGAL(ACCES_NOYAU_DANS_AFFconvolution(x,y,z) \
,valeur \
); \
Eblock \
/* Initialisation de l'element {x,y,z}. */
#define INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_AFFconvolution \
Bblock \
Test(IFINff(AFFconvolution_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_AFFconvolution \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution \
) \
) \
Bblock \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("les dimensions du noyau de convolution d'un album tridimensionnel sont incorrectes"); \
CAL1(Prer1("%d est demande\n",AFFconvolution_____demi_dimension_effective_du_noyau)); \
CAL1(Prer3("alors que seul [%d,%d,%d] est possible\n" \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_AFFconvolution \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_AFFconvolution \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_AFFconvolution \
) \
); \
\
EGAL(AFFconvolution_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_AFFconvolution \
); \
\
CAL1(Prer1("%d est donc force\n",AFFconvolution_____demi_dimension_effective_du_noyau)); \
Eblock \
ETes \
\
Test(IL_FAUT(AFFconvolution_____initialiser_le_noyau)) \
Bblock \
begin_albumQ(DoIn,AFFconvolution_____XYZmin_effectif,AFFconvolution_____XYZmax_effectif,PasZ \
,DoIn,AFFconvolution_____XYZmin_effectif,AFFconvolution_____XYZmax_effectif,PasY \
,DoIn,AFFconvolution_____XYZmin_effectif,AFFconvolution_____XYZmax_effectif,PasX \
) \
Bblock \
INITIALISATION_ELEMENT_NOYAU_DANS_AFFconvolution(X,Y,Z \
,PONDERATION_D_UN_POINT_DANS_AFFconvolution \
); \
/* Initialisation de l'element courant {X,Y,Z}. */ \
Eblock \
end_albumQ(EDoI,EDoI,EDoI) \
\
EGAL(AFFconvolution_____initialiser_le_noyau,FAUX); \
/* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation eventuelle du noyau de 'AFFconvolution(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* O M B R A G E " G E N E R A L " D ' U N A L B U M : */
/* */
/*************************************************************************************************************************************/
#define POINT_EN_REALITE_A_L_OMBRE \
NOIR
#define POINT_A_PRIORI_AU_SOLEIL \
BLANC
/* Optimisation introduite le 20170517101721 et deplacee ici le 20180124092646 depuis */
/* 'v $xiii/di_album$FON 20180124092708'... */
#define DEMI_DIMENSION_XYZ_MATRIX_CALCUL_GRADIENT \
UN \
/* Introduit ici le 20180124104544 depuis 'v $xiii/di_album$FON 20180124104526'... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I F F U S I O N T R I D I M E N S I O N N E L L E A T E M P E R A T U R E L O C A L E : */
/* */
/*************************************************************************************************************************************/
#define Adiffusion_3D_a_temperatures_locales_____NIVEAU_DE_LA___MER \
GRIS_0
#define Adiffusion_3D_a_temperatures_locales_____NIVEAU_DE_LA___MER_NOUVELLE_NEE \
GRIS_1
#define Adiffusion_3D_a_temperatures_locales_____NIVEAU_DE_LA_TERRE_NOUVELLE_NEE \
GRIS_7
#define Adiffusion_3D_a_temperatures_locales_____NIVEAU_DE_LA_TERRE \
GRIS_8
/* Niveaux "speciaux" (introduits le 20070213091108). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M O D E L E D E C O T E S T R I D I M E N S I O N N E L A V E C E R O S I O N : */
/* */
/*************************************************************************************************************************************/
#define Aerode__CoastLines_3D_a_taux_facteur_locaux_VERSION_01 \
/* Les arguments : */ \
/* */ \
/* taux_d_affaiblissement_de_la_durete_de_la_terre_local */ \
/* facteur_d_anti_corrosite_de_la_mer_local */ \
/* */ \
/* sont globaux car, en effet, sauf pour de petits axes 'Z', cela demanderait une memoire */ \
/* considerable... */
#nodefine Aerode__CoastLines_3D_a_taux_facteur_locaux_VERSION_02 \
/* Les arguments : */ \
/* */ \
/* taux_d_affaiblissement_de_la_durete_de_la_terre_local */ \
/* facteur_d_anti_corrosite_de_la_mer_local */ \
/* */ \
/* sont reellement locaux, c'est-a-dire fonction du point courant {X,Y,Z}. */
#nodefine SURFACE_DE_LA_COTE_D_ERODE______COTES_3D_VERSION_01 \
/* Cette facon de mesurer la longueur utilise 'AFFconvolution(...)'. Elle presente un */ \
/* gros defaut : en effet, le niveau convolue obtenu ne donne pas, comme je le croyais */ \
/* naivement initialement, la frontiere entre la "terre" et la "mer" car cela n'est vrai */ \
/* que si la repartition "terre"/"mer" et de 50%/50% dans le domaine de convolution (ce */ \
/* qui n'est qu'exceptionnellemnt vrai). Une nouvelle version ('VERSION_02') a donc ete */ \
/* introduite afin de travailler sur les extrema, en les seuillant de plus... */
#define SURFACE_DE_LA_COTE_D_ERODE______COTES_3D_VERSION_02 \
/* Cette facon de mesurer la longueur utilise 'AFFconvolution_de_seuillage(...)' ; elle */ \
/* a ete introduite le 20011214102608. */
#nodefine CONVOLUTION_DE_albumA_D_ERODE______COTES_3D_VERSION_01 \
/* Cette facon de convoluer 'albumA' n'utilise que 'albumA_convolue_courant'. */
#define CONVOLUTION_DE_albumA_D_ERODE______COTES_3D_VERSION_02 \
/* Cette facon de convoluer 'albumA' utilise simultanement 'albumA_convolue_courant' et */ \
/* 'Aerode__CoastLines_3D_____albumA_convolue_initial' (introduite le 20011218092742). */
#define NIVEAU_DE_LA___MER_DANS_Aerode__CoastLines_3D \
NIVEAU_DE_LA___MER_DANS_Ierode__CoastLines_2D
#define NIVEAU_DE_LA_TERRE_DANS_Aerode__CoastLines_3D \
NIVEAU_DE_LA_TERRE_DANS_Ierode__CoastLines_2D
/* Niveaux respectifs de la "mer" et de la "terre" a priori... */
#define DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D
#define DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Aerode__CoastLines_3D \
DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ierode__CoastLines_2D
#define DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ierode__CoastLines_2D
/* Demi-dimensions (arbitraire) du noyau de 'Aerode__CoastLines_3D(...)'. */
#define DN_Aerode__CoastLines_3D \
DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D) \
/* Dimension (arbitraire) du noyau "quelconque" de 'Aerode__CoastLines_3D(...)'. */ \
/* */ \
/* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Aerode__CoastLines_3D' ne peut etre */ \
/* utilise (d'ou 'DN_Aerode__CoastLines_3D') a cause de la procedure '$xcg/gen.ext$Z' */ \
/* ('v $xiii/di_album$FON DN_Aerode__CoastLines_3D'). */
#define PONDERATION_D_UN_POINT_DANS_Aerode__CoastLines_3D \
FU \
/* Definition du facteur par defaut des points du voisinage du point courant {X,Y}. */
#define Aerode__CoastLines_3D_____XYZmin \
NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D)
#define Aerode__CoastLines_3D_____XYZmax \
NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D)
/* Dimension des axes {X,Y,Z} necessaires a la lecture de fichiers contenant un noyau */
/* ('v $xci/CoastL_3D.11$K Aerode__CoastLines_3D_____noyau'). */
#define Aerode__CoastLines_3D_____XYZmin_effectif \
NEGA(Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau)
#define Aerode__CoastLines_3D_____XYZmax_effectif \
NEUT(Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau)
/* Extremites effectives des axes {X,Y,Z}. */
#define ACCES_NOYAU_DANS_Aerode__CoastLines_3D(x,y,z) \
ITb3(Aerode__CoastLines_3D_____noyau \
,INDX(z,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D)) \
,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D)) \
,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D)) \
) \
/* Acces a l'element {x,y,z} du noyau de 'Aerode__CoastLines_3D(...)'. ATTENTION a l'odre */ \
/* des deux coordonnees identique a celui de 'v $xiii/Images$DEF IMAGE.album.x.y.z.'. */
#define INITIALISATION_ELEMENT_NOYAU_DANS_Aerode__CoastLines_3D(x,y,z,valeur) \
Bblock \
EGAL(ACCES_NOYAU_DANS_Aerode__CoastLines_3D(x,y,z) \
,valeur \
); \
Eblock \
/* Initialisation de l'element {x,y,z}. */
#define INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
Bblock \
Test(IL_FAUT(Aerode__CoastLines_3D_____utiliser_un_noyau)) \
Bblock \
Test(IFINff(Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
) \
) \
Bblock \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("les dimensions du noyau du modele de cotes bidimensionnel sont incorrectes"); \
CAL1(Prer1("%d est demande\n",Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau)); \
CAL1(Prer3("alors que seul [%d,%d,%d] est possible\n" \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aerode__CoastLines_3D \
) \
); \
\
EGAL(Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Aerode__CoastLines_3D \
); \
\
CAL1(Prer1("%d est donc force\n",Aerode__CoastLines_3D_____demi_dimension_effective_du_noyau)); \
Eblock \
ETes \
\
Test(IL_FAUT(Aerode__CoastLines_3D_____initialiser_le_noyau)) \
Bblock \
begin_albumQ(DoIn \
,Aerode__CoastLines_3D_____XYZmin_effectif,Aerode__CoastLines_3D_____XYZmax_effectif,PasZ \
,DoIn \
,Aerode__CoastLines_3D_____XYZmin_effectif,Aerode__CoastLines_3D_____XYZmax_effectif,PasY \
,DoIn \
,Aerode__CoastLines_3D_____XYZmin_effectif,Aerode__CoastLines_3D_____XYZmax_effectif,PasX \
) \
Bblock \
INITIALISATION_ELEMENT_NOYAU_DANS_Aerode__CoastLines_3D \
(X,Y,Z \
,PONDERATION_D_UN_POINT_DANS_Aerode__CoastLines_3D \
); \
/* Initialisation de l'element courant {X,Y,Z}. */ \
Eblock \
end_albumQ(EDoI,EDoI,EDoI) \
\
EGAL(Aerode__CoastLines_3D_____initialiser_le_noyau,FAUX); \
/* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation eventuelle du noyau de 'Aerode__CoastLines_3D(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M O D E L E D E C O T E S T R I D I M E N S I O N N E L A V E C " E T C H I N G " : */
/* */
/*************************************************************************************************************************************/
#define Aetche__CoastLines_3D_a_temperatures_locales_VERSION_01 \
/* Les arguments : */ \
/* */ \
/* temperature_locale */ \
/* */ \
/* est global car, en effet, sauf pour de petits axes 'Z', cela demanderait une memoire */ \
/* considerable... */
#nodefine Aetche__CoastLines_3D_a_temperatures_locales_VERSION_02 \
/* L'argument : */ \
/* */ \
/* temperature_locale */ \
/* */ \
/* est reellement local, c'est-a-dire fonction du point courant {X,Y,Z}. */
#define NIVEAU_DE_LA___MER_DANS_Aetche__CoastLines_3D \
NIVEAU_DE_LA___MER_DANS_Ietche__CoastLines_2D
#define NIVEAU_DE_LA_TERRE_DANS_Aetche__CoastLines_3D \
NIVEAU_DE_LA_TERRE_DANS_Ietche__CoastLines_2D
/* Niveaux respectifs de la "mer" et de la "terre" a priori... */
#define DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D
#define DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Aetche__CoastLines_3D \
DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Ietche__CoastLines_2D
#define DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Ietche__CoastLines_2D
/* Demi-dimensions (arbitraire) du noyau de 'Aetche__CoastLines_3D(...)'. */
#define DN_Aetche__CoastLines_3D \
DOUP(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D) \
/* Dimension (arbitraire) du noyau "quelconque" de 'Aetche__CoastLines_3D(...)'. */ \
/* */ \
/* ATTENTION : le nom 'DIMENSION_DU_NOYAU_DANS_Aetche__CoastLines_3D' ne peut etre */ \
/* utilise (d'ou 'DN_Aetche__CoastLines_3D') a cause de la procedure '$xcg/gen.ext$Z' */ \
/* ('v $xiii/di_album$FON DN_Aetche__CoastLines_3D'). */
#define PONDERATION_D_UN_POINT_DANS_Aetche__CoastLines_3D \
FU \
/* Definition du facteur par defaut des points du voisinage du point courant {X,Y}. */
#define Aetche__CoastLines_3D_____XYZmin \
NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D)
#define Aetche__CoastLines_3D_____XYZmax \
NEUT(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D)
/* Dimension des axes {X,Y,Z} necessaires a la lecture de fichiers contenant un noyau */
/* ('v $xci/CoastL_3D.11$K Aetche__CoastLines_3D_____noyau'). */
#define Aetche__CoastLines_3D_____XYZmin_effectif \
NEGA(Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau)
#define Aetche__CoastLines_3D_____XYZmax_effectif \
NEUT(Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau)
/* Extremites effectives des axes {X,Y,Z}. */
#define ACCES_NOYAU_DANS_Aetche__CoastLines_3D(x,y,z) \
ITb3(Aetche__CoastLines_3D_____noyau \
,INDX(z,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D)) \
,INDX(y,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D)) \
,INDX(x,NEGA(DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D)) \
) \
/* Acces a l'element {x,y,z} du noyau de 'Aetche__CoastLines_3D(...)'. ATTENTION a l'odre */ \
/* des deux coordonnees identique a celui de 'v $xiii/Images$DEF IMAGE.album.x.y.z.'. */
#define INITIALISATION_ELEMENT_NOYAU_DANS_Aetche__CoastLines_3D(x,y,z,valeur) \
Bblock \
EGAL(ACCES_NOYAU_DANS_Aetche__CoastLines_3D(x,y,z) \
,valeur \
); \
Eblock \
/* Initialisation de l'element {x,y,z}. */
#define INITIALISATION_EVENTUELLE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
Bblock \
Test(IL_FAUT(Aetche__CoastLines_3D_____utiliser_un_noyau)) \
Bblock \
Test(IFINff(Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
) \
) \
Bblock \
Eblock \
ATes \
Bblock \
PRINT_ERREUR("les dimensions du noyau du modele de cotes bidimensionnel sont incorrectes"); \
CAL1(Prer1("%d est demande\n",Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau)); \
CAL1(Prer3("alors que seul [%d,%d,%d] est possible\n" \
,DEMI_DIMENSION_MINIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
,DEMI_DIMENSION_MAXIMALE_DU_NOYAU_DANS_Aetche__CoastLines_3D \
) \
); \
\
EGAL(Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau \
,DEMI_DIMENSION_STANDARD_DU_NOYAU_DANS_Aetche__CoastLines_3D \
); \
\
CAL1(Prer1("%d est donc force\n",Aetche__CoastLines_3D_____demi_dimension_effective_du_noyau)); \
Eblock \
ETes \
\
Test(IL_FAUT(Aetche__CoastLines_3D_____initialiser_le_noyau)) \
Bblock \
begin_albumQ(DoIn \
,Aetche__CoastLines_3D_____XYZmin_effectif,Aetche__CoastLines_3D_____XYZmax_effectif,PasZ \
,DoIn \
,Aetche__CoastLines_3D_____XYZmin_effectif,Aetche__CoastLines_3D_____XYZmax_effectif,PasY \
,DoIn \
,Aetche__CoastLines_3D_____XYZmin_effectif,Aetche__CoastLines_3D_____XYZmax_effectif,PasX \
) \
Bblock \
INITIALISATION_ELEMENT_NOYAU_DANS_Aetche__CoastLines_3D \
(X,Y,Z \
,PONDERATION_D_UN_POINT_DANS_Aetche__CoastLines_3D \
); \
/* Initialisation de l'element courant {X,Y,Z}. */ \
Eblock \
end_albumQ(EDoI,EDoI,EDoI) \
\
EGAL(Aetche__CoastLines_3D_____initialiser_le_noyau,FAUX); \
/* Et l'initialisation n'est plus a faire (jusqu'a la prochaine fois...). */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Initialisation eventuelle du noyau de 'Aetche__CoastLines_3D(...)'. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O M P L E M E N T A T I O N D ' U N A L B U M : */
/* */
/*************************************************************************************************************************************/
#define dAcomplementation(album_d_imagesR,album_d_imagesA) \
Bblock \
begin_fuite \
Bblock \
CALi(Icomplementation(PAGE(album_d_imagesR,Z),PAGE(album_d_imagesA,Z))); \
/* Complementation de l'album. */ \
Eblock \
end_fuite \
Eblock \
/* Complementation independante des differentes pages (introduite le 20140819113725). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O M P L E M E N T A T I O N D ' U N A L B U M F L O T T A N T : */
/* */
/*************************************************************************************************************************************/
#define dAFcomplementation(album_d_imagesR,album_d_imagesA,forcer_les_extrema,niveau_minimum,niveau_maximum) \
Bblock \
BSaveModifyVariable(Logical,IFcomplementation_____forcer_les_extrema,forcer_les_extrema); \
BSaveModifyVariable(genere_Float,IFcomplementation_____niveau_minimum,niveau_minimum); \
BSaveModifyVariable(genere_Float,IFcomplementation_____niveau_maximum,niveau_maximum); \
\
begin_fuite \
Bblock \
CALi(IFcomplementation(PAGE(album_d_imagesR,Z),PAGE(album_d_imagesA,Z))); \
/* Complementation de l'album. */ \
Eblock \
end_fuite \
\
ESaveModifyVariable(genere_Float,IFcomplementation_____niveau_maximum); \
ESaveModifyVariable(genere_Float,IFcomplementation_____niveau_minimum); \
ESaveModifyVariable(Logical,IFcomplementation_____forcer_les_extrema); \
Eblock \
/* Complementation independante des differentes pages (introduite le 20140819113725). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* N O R M A L I S A T I O N D ' U N A L B U M F L O T T A N T */
/* A V E C C A L C U L A U T O M A T I Q U E D E S E X T R E M A : */
/* */
/*************************************************************************************************************************************/
#define dAFnormalisation_automatique(album_d_imagesR,album_d_imagesA) \
Bblock \
begin_fuite \
Bblock \
CALi(IFnormalisation_automatique(PAGE(album_d_imagesR,Z),PAGE(album_d_imagesA,Z))); \
/* Renormalisation de l'album. */ \
Eblock \
end_fuite \
Eblock \
/* Renormalisation independante des differentes pages (introduite le 20100831212721). */