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