/*************************************************************************************************************************************/ /* */ /* P R I M I T I V E S D ' A C C E S A U X P I X E L S S O U S F O R M E D E " D E F I N E S " : */ /* */ /* */ /* Definition : */ /* */ /* Dans ce fichier, se trouvent toutes */ /* les fonctions primitives d'acces aux */ /* pixels d'une image ; elles sont exprimees */ /* sous forme de "defines" afin de reduire */ /* la duree de l'execution. */ /* */ /* */ /* N O T A T I O N S : */ /* */ /* */ /* On notera 'imageA' les images Arguments, */ /* et 'imageR' les images Resultats ; 'arg' */ /* designera des arguments, et 'Vf' une */ /* fonction "variable"... */ /* */ /* */ /* Author of '$xiipd/fonction.1$FON' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19870000000000). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E S " B U G S " P R E S E N T S : */ /* */ /*************************************************************************************************************************************/ /* ATTENTION : le 20061124142825 '_____BUG_SYSTEME_C_complexite_01' a ete installe dans */ /* 'v $xiii/Images$STR _____BUG_SYSTEME_C_complexite_01' car, en effet, le fichier dans */ /* lequel nous sommes ('v $xiipd/fonction.1$FON') n'est pas compile (au passage le directory */ /* '$xbipd' n'existe pas...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E S N I V E A U X A B S O L U S E T R E L A T I F S : */ /* */ /*************************************************************************************************************************************/ /* Enfin, on notera que l'utilisation courante sera du type : */ /* */ /* GENP(NIVA(...FLOT(NIVR(...)))) */ /* */ /* ou si necessaire : */ /* */ /* GENP(TRNP(NIVA(...FLOT(NIVR(...))))) */ /* */ /* en notant bien l'importance de l'ordres des operations ; en particulier 'TRNP(...)' */ /* qui fait un 'TRON(...)' dans [NOIR,BLANC] doit preceder imperativement 'GENP(...)' qui */ /* ferait une troncation automatique... */ %define NIVA(niveau) \ ADD2(niveau,NOIR) /* Mise du niveau en absolu (par rapport au 'NOIR'). */ %define NIVR(niveau) \ SOUS(niveau,NOIR) /* Mise du niveau en relatif. */ /* On notera que 'NIVA(...)' et 'NIVR(...)' */ /* sont definis par "%define" et non par "#define" afin de pouvoir utiliser le nouvel */ /* operateur de concatenation "`" du pre-processeur : il faut que leur substitution ait */ /* lieu apres la gestion de cet operateur de concatenation... */ /* Enfin, on notera que l'utilisation courante sera du type : */ /* */ /* GENP(NIVA(...FLOT(NIVR(...)))) */ /* */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* O P E R A T E U R N E U T R E : */ /* */ /*************************************************************************************************************************************/ #define VNEUT(argument) \ NEUT(argument) \ /* Introduit le 20151125175653 pour 'v $xci/histogramme$K VNEUT'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E N V O I D U P R E M I E R A R G U M E N T : */ /* */ /*************************************************************************************************************************************/ #define VNEUTRE1(arg1,arg2) \ NEUT(arg1) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E N V O I D U D E U X I E M E A R G U M E N T ( D E U X S O L U T I O N S ) : */ /* */ /*************************************************************************************************************************************/ #define VNEUTRE2(arg1,arg2) \ NEUT(arg2) #define VNEUTRE(arg1,arg2) \ VNEUTRE2(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R A B S O L U E D ' U N E V A L E U R : */ /* */ /*************************************************************************************************************************************/ #define VABS(argument) \ NIVA(ABSO(NIVR(argument))) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A D D I T I O N D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #define VADD(arg1,arg2) \ NIVA(ADD2(NIVR(arg1),NIVR(arg2))) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O U S T R A C T I O N D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #define VSUB(arg1,arg2) \ NIVA(SOUS(arg1,arg2)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P L E M E N T A T I O N D ' U N E V A L E U R : */ /* */ /*************************************************************************************************************************************/ #define VCOMP(argument) \ VSUB(BLANC,argument) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M U L T I P L I C A T I O N D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #define VMUL(arg1,arg2) \ MUL2(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M U L T I P L I C A T I O N D E D E U X V A L E U R S ( F L O T T A N T E E T E N T I E R E ) : */ /* */ /*************************************************************************************************************************************/ #define VMULF(arg1,arg2) \ MUL2(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I V I S I O N D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #define VDIV(arg1,arg2) \ DIVI(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A X I M U M D E D E U X V A L E U R S ( " O U " F L O U ) : */ /* */ /*************************************************************************************************************************************/ #define VMAX(arg1,arg2) \ MAX2(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M I N I M U M D E D E U X V A L E U R S ( " E T " F L O U ) : */ /* */ /*************************************************************************************************************************************/ #define VMIN(arg1,arg2) \ MIN2(arg1,arg2) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " O U " E X C L U S I F F L O U D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #define VMINMAX(arg1,arg2) \ VMAX(VMIN(arg1,VCOMP(arg2)),VMIN(VCOMP(arg1),arg2)) #define VMAXMIN(arg1,arg2) \ VMIN(VMAX(arg1,VCOMP(arg2)),VMAX(VCOMP(arg1),arg2)) \ /* Introduit le 20061023092103 par "symetrie" avec 'VMINMAX(...)'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' O R ' D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define VOR(arg1,arg2) \ OUIN(arg1,arg2) #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' A N D ' D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define VAND(arg1,arg2) \ ETLO(arg1,arg2) #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' E O R ' D E D E U X V A L E U R S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define VEOR(arg1,arg2) \ OUEX(arg1,arg2) #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N V E R S I O N D ' U N E V A L E U R : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define VINVERT(argument) \ VEOR(BLANC,argument) #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* H I E R A R C H I E D E S F O N C T I O N S D E C H A R G E M E N T : */ /* */ /* */ /* loadQ_point_GENERAL */ /* loadQ_point */ /* load_point */ /* loadNS_point */ /* loadS_point */ /* loadS_point_valide */ /* load_point_valide */ /* loadNS_point_valide */ /* loadC_point_valide */ /* loadI_point_valide */ /* loadF_point_valide */ /* loadF_point_continu */ /* loadF_point_continu_cubique */ /* loadF_point_continu_lineaire */ /* loadD_point_valide */ /* load_point_modulo */ /* loadC_point_modulo */ /* loadI_point_modulo */ /* loadF_point_modulo */ /* loadD_point_modulo */ /* loadC_point */ /* loadIB_point */ /* loadI_point */ /* loadUB_point */ /* loadU_point */ /* loadF_point */ /* loadD_point */ /* loadJ_point */ /* loadJ_point_modulo */ /* loadRJ_point */ /* loadRJ_point_modulo */ /* loadIJ_point */ /* loadIJ_point_modulo */ /* loadHJ_point */ /* loadHJ_point_modulo */ /* loadRHJ_point */ /* loadRHJ_point_modulo */ /* loadIHJ_point */ /* loadIHJ_point_modulo */ /* loadJHJ_point */ /* loadJHJ_point_modulo */ /* loadKHJ_point */ /* loadKHJ_point_modulo */ /* */ /* AloadQ_point_GENERAL */ /* Aload_point */ /* Aload_point_valide */ /* AloadF_point */ /* AloadF_point_valide */ /* AloadI_point */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T G E N E R A L D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define loadQ_point_GENERAL(imageA,X,Y) \ IMAGE(imageA,X,Y) #define AloadQ_point_GENERAL(albumA,X,Y,Z) \ ALBUM(albumA,X,Y,Z) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #if ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01)) \ || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) \ ) # define loadQ_point(imageA,X,Y) \ COND(TEST_MASQUE_ACTIF(X,Y,MASQUER_LOAD) \ ,loadQ_point_GENERAL(imageA,X,Y) \ ,NIVEAU_MASQUE \ ) #Aif ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01)) \ || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) \ ) #Eif ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01)) \ || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) \ ) #if ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03)) \ ) # define loadQ_point(imageA,X,Y) \ COND_MASQUE_NON_ACTIF(X,Y,MASQUER_LOAD \ ,loadQ_point_GENERAL(imageA,X,Y) \ ,NIVEAU_MASQUE \ ) \ /* Avant le 19970219155451, 'loadQ_point(...)' etait defini par : */ \ /* */ \ /* COND(TEST_MASQUE_ACTIF(X,Y,MASQUER_LOAD) \ */ \ /* ,loadQ_point_GENERAL(imageA,X,Y) \ */ \ /* ,NIVEAU_MASQUE \ */ \ /* ) */ \ /* */ \ /* mais des tests avec 'v $xB/SGO200A1$D/CC$D/performan.04$c' ont montre que de faire */ \ /* en "une fois" les tests 'TEST_MASQUE_ACTIF(X,Y,MASQUER_LOAD)' bloquait considerablement */ \ /* l'optimisation, d'ou cette version... */ #Aif ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03)) \ ) #Eif ( (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03)) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " ( A V E C M A S Q U A G E ) : */ /* */ /*************************************************************************************************************************************/ #define load_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) #define Aload_point(albumA,X,Y,Z) \ AloadQ_point_GENERAL(albumA,X,Y,Z) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " */ /* S A N S S U B S T I T U T I O N " I N V E R S E " : */ /* */ /*************************************************************************************************************************************/ #define loadNS_point(imageA,X,Y) \ load_point(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " */ /* A V E C S U B S T I T U T I O N " I N V E R S E " : */ /* */ /*************************************************************************************************************************************/ #define loadS_point(imageA,X,Y) \ COND(EST_INACTIF_FILTRAGE \ ,load_point(imageA,X,Y) \ ,Nsubstitution_inverse(loadQ_point(imageA,X,Y)) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define loadC_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define loadIB_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) #define AloadIB_point(albumA,X,Y,Z) \ AloadQ_point_GENERAL(albumA,X,Y,Z) \ /* Introduit le 20100326182837... */ #define loadI_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) #define AloadI_point(albumA,X,Y,Z) \ AloadQ_point_GENERAL(albumA,X,Y,Z) \ /* Introduit le 20050909143052... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " P O S I T I V E " : */ /* */ /*************************************************************************************************************************************/ #define loadUB_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) #define loadU_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define loadF_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) #define AloadF_point(albumA,X,Y,Z) \ AloadQ_point_GENERAL(albumA,X,Y,Z) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define loadD_point(imageA,X,Y) \ loadQ_point(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " C O M P L E X E " : */ /* */ /*************************************************************************************************************************************/ #define loadJ_point(imageA,X,Y) \ loadQ_point_GENERAL(imageA,X,Y) \ /* Chargement du nombre complexe. */ #define loadRJ_point(imageA,X,Y) \ Reelle(loadJ_point(imageA,X,Y)) \ /* Chargement de la partie reelle. */ #define loadIJ_point(imageA,X,Y) \ Imaginaire(loadJ_point(imageA,X,Y)) \ /* Chargement de la partie imaginaire. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " C O M P L E X E " M O D U L O : */ /* */ /*************************************************************************************************************************************/ #define loadJ_point_modulo(imageA,X,Y) \ loadJ_point(imageA,MODX(X),MODY(Y)) \ /* Chargement du nombre complexe modulo. */ #define loadRJ_point_modulo(imageA,X,Y) \ Reelle(loadJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie reelle modulo... */ #define loadIJ_point_modulo(imageA,X,Y) \ Imaginaire(loadJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie imaginaire modulo... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " H Y P E R - C O M P L E X E " : */ /* */ /*************************************************************************************************************************************/ #define loadHJ_point(imageA,X,Y) \ loadQ_point_GENERAL(imageA,X,Y) \ /* Chargement du nombre hyper-complexe. */ #define loadRHJ_point(imageA,X,Y) \ HReelle(loadHJ_point(imageA,X,Y)) \ /* Chargement de la partie reelle. */ #define loadIHJ_point(imageA,X,Y) \ HImaginaire(loadHJ_point(imageA,X,Y)) \ /* Chargement de la partie imaginaire. */ #define loadJHJ_point(imageA,X,Y) \ HJmaginaire(loadHJ_point(imageA,X,Y)) \ /* Chargement de la partie jmaginaire. */ #define loadKHJ_point(imageA,X,Y) \ HKmaginaire(loadHJ_point(imageA,X,Y)) \ /* Chargement de la partie kmaginaire. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " H Y P E R - C O M P L E X E " M O D U L O : */ /* */ /*************************************************************************************************************************************/ #define loadHJ_point_modulo(imageA,X,Y) \ loadHJ_point(imageA,MODX(X),MODY(Y)) \ /* Chargement du nombre hyper-complexe modulo. */ #define loadRHJ_point_modulo(imageA,X,Y) \ HReelle(loadHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie reelle modulo... */ #define loadIHJ_point_modulo(imageA,X,Y) \ HImaginaire(loadHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie imaginaire modulo... */ #define loadJHJ_point_modulo(imageA,X,Y) \ HJmaginaire(loadHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie jmaginaire modulo... */ #define loadKHJ_point_modulo(imageA,X,Y) \ HKmaginaire(loadHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie kmaginaire modulo... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " H Y P E R - H Y P E R - C O M P L E X E " : */ /* */ /*************************************************************************************************************************************/ /* Toutes les definitions suivantes ont ete introduites le 20150227102109... */ #define loadHHJ_point(imageA,X,Y) \ loadQ_point_GENERAL(imageA,X,Y) \ /* Chargement du nombre hyper-hyper-complexe. */ #define loadRHHJ_point(imageA,X,Y) \ HHReelle(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie reelle. */ #define loadIHHJ_point(imageA,X,Y) \ HHImaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie imaginaire. */ #define loadJHHJ_point(imageA,X,Y) \ HHHJmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie jmaginaire. */ #define loadKHHJ_point(imageA,X,Y) \ HHKmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie kmaginaire. */ #define loadSHHJ_point(imageA,X,Y) \ HHSmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie smaginaire. */ #define loadTHHJ_point(imageA,X,Y) \ HHTmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie tmaginaire. */ #define loadUHHJ_point(imageA,X,Y) \ HHUmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie umaginaire. */ #define loadVHHJ_point(imageA,X,Y) \ HHVmaginaire(loadHHJ_point(imageA,X,Y)) \ /* Chargement de la partie vmaginaire. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A R G E M E N T D ' U N P O I N T " H Y P E R - H Y P E R - C O M P L E X E " M O D U L O : */ /* */ /*************************************************************************************************************************************/ /* Toutes les definitions suivantes ont ete introduites le 20150227102109... */ #define loadHHJ_point_modulo(imageA,X,Y) \ loadHHJ_point(imageA,MODX(X),MODY(Y)) \ /* Chargement de la partie reelle et de la partie imaginaire modulo... */ #define loadRHHJ_point_modulo(imageA,X,Y) \ HHReelle(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie reelle modulo... */ #define loadIHHJ_point_modulo(imageA,X,Y) \ HHImaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie imaginaire modulo... */ #define loadJHHJ_point_modulo(imageA,X,Y) \ HHJmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie jmaginaire modulo... */ #define loadKHHJ_point_modulo(imageA,X,Y) \ HHKmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie kmaginaire modulo... */ #define loadSHHJ_point_modulo(imageA,X,Y) \ HHSmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie smaginaire modulo... */ #define loadTHHJ_point_modulo(imageA,X,Y) \ HHTmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie tmaginaire modulo... */ #define loadUHHJ_point_modulo(imageA,X,Y) \ HHUmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie umaginaire modulo... */ #define loadVHHJ_point_modulo(imageA,X,Y) \ HHVmaginaire(loadHHJ_point_modulo(imageA,X,Y)) \ /* Chargement de la partie vmaginaire modulo... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ #define load_point_valide(imageA,X,Y) \ COND(TEST_HORS_IMAGE(X,Y) \ ,NIVEAU_HORS_IMAGE(imageA,X,Y) \ /* Cas des points {X,Y} hors de l'ecran [Xmin,Xmax][Ymin,Ymax]. */ \ ,load_point(imageA,X,Y) \ /* Cas des points {X,Y} dans l'ecran [Xmin,Xmax][Ymin,Ymax]. */ \ ) #define Aload_point_valide(albumA,X,Y,Z) \ COND(TEST_HORS_ALBUM(X,Y,Z) \ ,NIVEAU_HORS_ALBUM(albumA,X,Y,Z) \ /* Cas des points {X,Y,Z} hors de l'ecran [Xmin,Xmax][Ymin,Ymax][Zmin,Zmax]. */ \ ,Aload_point(albumA,X,Y,Z) \ /* Cas des points {X,Y,Z} dans l'ecran [Xmin,Xmax][Ymin,Ymax][Zmin,Zmax]. */ \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " */ /* S A N S S U B S T I T U T I O N " I N V E R S E " : */ /* */ /*************************************************************************************************************************************/ #define loadNS_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " */ /* A V E C S U B S T I T U T I O N " I N V E R S E " : */ /* */ /*************************************************************************************************************************************/ #define loadS_point_valide(imageA,X,Y) \ COND(TEST_HORS_IMAGE(X,Y) \ ,NIVEAU_HORS_IMAGE(imageA,X,Y) \ /* Cas des points {X,Y} hors de l'ecran [Xmin,Xmax][Ymin,Ymax]. */ \ ,loadS_point(imageA,X,Y) \ /* Cas des points {X,Y} dans l'ecran [Xmin,Xmax][Ymin,Ymax]. */ \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define loadC_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define loadIB_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) #define loadI_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define loadF_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) \ /* ATTENTION : je rappelle le 20170826104520 que 'loadF_point_valide(...)' utilise donc le */ \ /* meme 'NIVEAU_HORS_IMAGE(...)' que 'loadF_point_valide(...)', qui est donc de type */ \ /* 'genere_p' et non pas 'genere_Float'... */ #define AloadF_point_valide(albumA,X,Y,Z) \ Aload_point_valide(albumA,X,Y,Z) \ /* ATTENTION : je rappelle le 20170826104520 que 'AloadF_point_valide(...)' utilise donc le */ \ /* meme 'NIVEAU_HORS_ALBUM(...)' que 'AloadF_point_valide(...)', qui est donc de type */ \ /* 'genere_p' et non pas 'genere_Float'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S C H A R G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define loadD_point_valide(imageA,X,Y) \ load_point_valide(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S C H A R G E M E N T D ' U N P O I N T " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ #define load_point_modulo(imageA,X,Y) \ load_point(imageA,MODX(X),MODY(Y)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S C H A R G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define loadC_point_modulo(imageA,X,Y) \ load_point_modulo(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S C H A R G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define loadIB_point_modulo(imageA,X,Y) \ load_point_modulo(imageA,X,Y) #define loadI_point_modulo(imageA,X,Y) \ load_point_modulo(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S C H A R G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define loadF_point_modulo(imageA,X,Y) \ load_point_modulo(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S C H A R G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define loadD_point_modulo(imageA,X,Y) \ load_point_modulo(imageA,X,Y) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* H I E R A R C H I E D E S F O N C T I O N S D E R A N G E M E N T : */ /* */ /* */ /* storeQ_point_GENERAL */ /* storeQ_point_FAST */ /* storeQ_point */ /* store_point */ /* storeQ_point_valide */ /* store_point_valide */ /* storeQ_point_modulo */ /* store_point_modulo */ /* storeQV_point */ /* storeC_point */ /* storeIB_point */ /* storeI_point */ /* storeUB_point */ /* storeU_point */ /* storeF_point */ /* storeD_point */ /* storeQV_point_valide */ /* storeC_point_valide */ /* storeIB_point_valide */ /* storeI_point_valide */ /* storeUB_point_valide */ /* storeU_point_valide */ /* storeF_point_valide */ /* storeD_point_valide */ /* storeQV_point_modulo */ /* storeC_point_modulo */ /* storeIB_point_modulo */ /* storeI_point_modulo */ /* storeUB_point_modulo */ /* storeU_point_modulo */ /* storeF_point_modulo */ /* storeD_point_modulo */ /* storeJ_point */ /* storeJ_point_valide */ /* storeRJ_point */ /* storeRJ_point_valide */ /* storeIJ_point */ /* storeIJ_point_valide */ /* storeHJ_point */ /* storeRHJ_point */ /* storeIHJ_point */ /* storeJHJ_point */ /* storeKHJ_point */ /* */ /* AstoreQ_point_GENERAL */ /* Astore_point */ /* AstoreQ_point_valide */ /* Astore_point_valide */ /* AstoreF_point */ /* AstoreF_point_valide */ /* AstoreI_point */ /* AstoreI_point_valide */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T G E N E R A L D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define storeQ_point_GENERAL(valeur,imageR,X,Y,loadX_point,Vf,Calibrage,selecteur) \ Bblock \ DEFV(Int,INIT(X_local,X)); \ DEFV(Int,INIT(Y_local,Y)); \ /* Optimisation de la compilation introduite le 20120321185221 afin de prevenir les cas */ \ /* ou {X,Y} sont des expressions "lourdes"... */ \ \ EGAL(selecteur(IMAGE(imageR,X_local,Y_local)),valeur); \ Eblock \ /* ATTENTION : il ne faut surtout pas mettre de 'GENP' pour positionner */ \ /* correctement 'valeur', car en effet, toutes les operations 'store' */ \ /* passent par ici, et par exemple le 'storeF' ; enfin, le 'selecteur' est */ \ /* utilise par les images "complexes"... */ #define AstoreQ_point_GENERAL(valeur,albumR,X,Y,Z,selecteur) \ Bblock \ DEFV(Int,INIT(X_local,X)); \ DEFV(Int,INIT(Y_local,Y)); \ DEFV(Int,INIT(Z_local,Z)); \ /* Optimisation de la compilation introduite le 20120321185221 afin de prevenir les cas */ \ /* ou {X,Y,Z} sont des expressions "lourdes"... */ \ \ EGAL(selecteur(ALBUM(albumR,X_local,Y_local,Z_local)),valeur); \ Eblock \ /* ATTENTION : il ne faut surtout pas mettre de 'GENP' pour positionner correctement */ \ /* 'valeur', car en effet, toutes les operations 'store' passent par ici ; enfin, le */ \ /* 'selecteur' peut etre utilise par les albums "complexes"... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T S U P E R - R A P I D E D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define storeQ_point_FAST(valeur,imageR,X,Y,loadX_point,Vf,Calibrage) \ Bblock \ storeQ_point_GENERAL(valeur,imageR,X,Y,loadX_point,Vf,Calibrage,NEUT); \ Eblock \ /* ATTENTION : il ne faut surtout pas mettre de 'GENP' pour positionner */ \ /* correctement 'valeur', car en effet, toutes les operations 'store' */ \ /* passent par ici, et par exemple le 'storeF'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define storeQ_point(valeur,imageR,X,Y,loadX_point,Vf,Calibrage) \ Bblock \ Test(EST_INACTIF_FILTRAGE) \ Bblock \ storeQ_point_FAST(valeur \ ,imageR \ ,X,Y \ ,loadX_point,Vf,Calibrage \ ); \ /* "Point de passage" le plus rapide... */ \ /* */ \ /* Je note le 20170715132317 que c'est le point de passage par defaut... */ \ Eblock \ ATes \ Bblock \ Test(IL_FAUT(ne_faire_que_les_substitutions)) \ Bblock \ storeQ_point_FAST(Nsubstitution(valeur) \ ,imageR \ ,X,Y \ ,loadX_point,Vf,Calibrage \ ); \ /* "Point de passage" intermediaire... */ \ Eblock \ ATes \ Bblock \ Test(TEST_MASQUE_ACTIF(X,Y,MASQUER_STORE)) \ Bblock \ Test(EST_AUTORISE(Necrasement(loadX_point(imageR,X,Y)))) \ Bblock \ storeQ_point_FAST(Nsubstitution(Calibrage(Vf(loadX_point(imageR,X,Y) \ ,GENP(valeur) \ ) \ ) \ ) \ ,imageR \ ,X,Y \ ,loadX_point,Vf,Calibrage \ ); \ /* "Point de passage" le plus lent... */ \ /* */ \ /* Le 20170715081804, suite a 'v $xiipf/fonction.2$DEF 20170715081454', la fonction */ \ /* 'Vf(...)' n'est plus accedee via un 'fPOINTEUR(...)'... */ \ /* */ \ /* Je note le 20170715132317 que pour passer par ici, il faut : */ \ /* */ \ /* ne_faire_que_les_substitutions = FAUX */ \ /* etat_Filtrage_niveaux = VRAI (equivalent a 'ACTIF'). */ \ /* */ \ /* */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ #define store_point(valeur,imageR,X,Y,Vf) \ Bblock \ storeQ_point(GENP(valeur),imageR,X,Y,load_point,Vf,Ncalibrage); \ Eblock #define Astore_point(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_GENERAL(GENP(valeur),albumR,X,Y,Z,NEUT); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " C H A R " / " I N T " / " F L O A T " : */ /* */ /* */ /* Nota : */ /* */ /* Pour les "store" de types differents */ /* de 'genere_p', on ne peut appliquer la */ /* fonction 'Vf', car en effet le type de */ /* ses arguments est variable, alors que */ /* dans son corps, il est fixe... */ /* */ /*************************************************************************************************************************************/ #define storeQV_point(valeur,imageR,X,Y) \ Bblock \ Test(EST_INACTIF_FILTRAGE) \ Bblock \ storeQ_point_FAST(valeur,imageR,X,Y,loadX_point,Vf,Calibrage); \ Eblock \ ATes \ Bblock \ Test(TEST_MASQUE_ACTIF(X,Y,MASQUER_STORE)) \ Bblock \ EGAL(IMAGE(imageR,X,Y) \ ,valeur \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define storeC_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CAST_CHAR(valeur),imageR,X,Y); \ /* La procedure 'CAST_CHAR(...)' a remplace un 'CAST(genere_CHAR,...)' le 20090331101826. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define storeIB_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_vrai_Int_de_base(valeur),imageR,X,Y); \ Eblock #define AstoreIB_point(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_GENERAL(CASP_vrai_Int_de_base(valeur),albumR,X,Y,Z,NEUT); \ Eblock \ /* Introduit le 20100326182837... */ #define storeI_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_Int(valeur),imageR,X,Y); \ /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103710. */ \ Eblock #define AstoreI_point(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_GENERAL(CASP_Int(valeur),albumR,X,Y,Z,NEUT); \ /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103710. */ \ Eblock \ /* Introduit le 20050909143052... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " P O S I T I V E " : */ /* */ /*************************************************************************************************************************************/ #define storeUB_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_vrai_Positive_de_base(valeur),imageR,X,Y); \ Eblock #define storeU_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_LPositive(valeur),imageR,X,Y); \ /* La procedure 'CASP_LPositive(...)' remplace un 'CASP(genere_posi,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define storeF_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_Float(valeur),imageR,X,Y); \ /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103710. */ \ Eblock #define AstoreF_point(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_GENERAL(CASP_Float(valeur),albumR,X,Y,Z,NEUT); \ /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define storeD_point(valeur,imageR,X,Y) \ Bblock \ storeQV_point(CASP_Double(valeur),imageR,X,Y); \ /* La procedure 'CASP_Double(...)' remplace un 'CASP(genere_Double,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " C O M P L E X E " S O U S */ /* L A F O R M E P A R T I E R E E L L E E T I M A G I N A I R E : */ /* */ /*************************************************************************************************************************************/ #define storeJ_point(valeur_complexe,imageR,X,Y) \ Bblock \ storeRJ_point(Reelle(valeur_complexe),imageR,X,Y); \ /* Rangement de la partie reelle du nombre complexe, */ \ storeIJ_point(Imaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie imaginaire. */ \ Eblock \ /* Rangement du nombre complexe. */ #define storeJ_point_valide(valeur_complexe,imageR,X,Y) \ Bblock \ Test(TEST_DANS_L_IMAGE(X,Y)) \ Bblock \ storeJ_point(valeur_complexe,imageR,X,Y); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Rangement du nombre complexe avec validation. On notera la programmation specifique de */ \ /* 'storeJ_point_valide(...)' qui ne suit pas le modele 'storeQ_point_valide(...)' a cause */ \ /* du fait que 'valeur_complexe' est une structure et non pas un "scalaire"... */ #define storeRJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,Reelle); \ Eblock \ /* Rangement de la partie reelle du nombre complexe. */ #define storeIJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,Imaginaire); \ Eblock \ /* Rangement de la partie imaginaire du nombre complexe. */ #define storeRJ_point_valide(valeur_flottante,imageR,X,Y) \ Bblock \ Test(TEST_DANS_L_IMAGE(X,Y)) \ Bblock \ storeRJ_point(valeur_flottante,imageR,X,Y); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Rangement de la partie reelle du nombre complexe avec validation (introduit le */ /* 20120526185135). */ #define storeIJ_point_valide(valeur_flottante,imageR,X,Y) \ Bblock \ Test(TEST_DANS_L_IMAGE(X,Y)) \ Bblock \ storeIJ_point(valeur_flottante,imageR,X,Y); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Rangement de la partie imaginaire du nombre complexe avec validation (introduit le */ /* 20120526185135). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " H Y P E R - C O M P L E X E " S O U S */ /* L A F O R M E P A R T I E R E E L L E E T I M A G I N A I R E : */ /* */ /*************************************************************************************************************************************/ #define storeHJ_point(valeur_complexe,imageR,X,Y) \ Bblock \ storeRHJ_point(HReelle(valeur_complexe),imageR,X,Y); \ /* Rangement de la partie reelle du nombre complexe, */ \ storeIHJ_point(HImaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie imaginaire, */ \ storeJHJ_point(HJmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie jmaginaire, */ \ storeKHJ_point(HKmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie kmaginaire. */ \ Eblock \ /* Rangement du nombre hyper-complexe. */ #define storeRHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HReelle); \ Eblock \ /* Rangement de la partie reelle du nombre hyper-complexe. */ #define storeIHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HImaginaire); \ Eblock \ /* Rangement de la partie imaginaire du nombre hyper-complexe. */ #define storeJHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HJmaginaire); \ Eblock \ /* Rangement de la partie jmaginaire du nombre hyper-complexe. */ #define storeKHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HKmaginaire); \ Eblock \ /* Rangement de la partie kmaginaire du nombre hyper-complexe. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R A N G E M E N T D ' U N P O I N T " H Y P E R - H Y P E R - C O M P L E X E " S O U S */ /* L A F O R M E P A R T I E R E E L L E E T I M A G I N A I R E : */ /* */ /*************************************************************************************************************************************/ /* Toutes les definitions suivantes ont ete introduites le 20150227102109... */ #define storeHHJ_point(valeur_complexe,imageR,X,Y) \ Bblock \ storeRHHJ_point(HHReelle(valeur_complexe),imageR,X,Y); \ /* Rangement de la partie reelle du nombre hyper-hyper-complexe, */ \ storeIHHJ_point(HHImaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie imaginaire, */ \ storeJHHJ_point(HHJmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie jmaginaire, */ \ storeKHHJ_point(HHKmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie kmaginaire. */ \ storeSHHJ_point(HHSmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie smaginaire. */ \ storeTHHJ_point(HHTmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie tmaginaire. */ \ storeUHHJ_point(HHUmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie umaginaire. */ \ storeVHHJ_point(HHVmaginaire(valeur_complexe),imageR,X,Y); \ /* Puis, rangement de sa partie vmaginaire. */ \ Eblock \ /* Rangement du nombre hyper-hyper-complexe. */ #define storeRHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHReelle); \ Eblock \ /* Rangement de la partie reelle du nombre hyper-hyper-complexe. */ #define storeIHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHImaginaire); \ Eblock \ /* Rangement de la partie imaginaire du nombre hyper-hyper-complexe. */ #define storeJHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHJmaginaire); \ Eblock \ /* Rangement de la partie jmaginaire du nombre hyper-hyper-complexe. */ #define storeKHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHKmaginaire); \ Eblock \ /* Rangement de la partie kmaginaire du nombre hyper-hyper-complexe. */ #define storeSHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHSmaginaire); \ Eblock \ /* Rangement de la partie smaginaire du nombre hyper-hyper-complexe. */ #define storeTHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHTmaginaire); \ Eblock \ /* Rangement de la partie tmaginaire du nombre hyper-hyper-complexe. */ #define storeUHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHUmaginaire); \ Eblock \ /* Rangement de la partie umaginaire du nombre hyper-hyper-complexe. */ #define storeVHHJ_point(valeur_flottante,imageR,X,Y) \ Bblock \ storeQ_point_GENERAL(valeur_flottante,imageR,X,Y,loadX_point,Vf,Calibrage,HHVmaginaire); \ Eblock \ /* Rangement de la partie vmaginaire du nombre hyper-hyper-complexe. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define storeQ_point_valide(valeur,imageR,X,Y,loadX_point,Vf,Calibrage) \ Bblock \ Test(TEST_DANS_L_IMAGE(X,Y)) \ Bblock \ storeQ_point(valeur,imageR,X,Y,loadX_point,Vf,Calibrage); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock #define AstoreQ_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ Test(TEST_DANS_L_ALBUM(X,Y,Z)) \ Bblock \ AstoreQ_point_GENERAL(valeur,albumR,X,Y,Z,NEUT); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ #if ( (defined(SYSTEME_NWS3000_NEWSOS_CC)) \ || (defined(SYSTEME_NWS3000_NEWSOS_2CC)) \ || (defined(SYSTEME_SG4D20G_IRIX_CC)) \ || (defined(SYSTEME_SG4D25TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D310VGX_IRIX_CC)) \ || (defined(SYSTEME_SG4D35TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D85GT_IRIX_CC)) \ || (defined(SYSTEME_SGIND308_IRIX_CC)) \ || (defined(SYSTEME_SGIND324_IRIX_CC)) \ || (defined(SYSTEME_SGIND3GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND408_IRIX_CC)) \ || (defined(SYSTEME_SGIND424_IRIX_CC)) \ || (defined(SYSTEME_SGIND4GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND508_IRIX_CC)) \ || (defined(SYSTEME_SGIND524_IRIX_CC)) \ || (defined(SYSTEME_SGIND5GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND808_IRIX_CC)) \ || (defined(SYSTEME_SGIND824_IRIX_CC)) \ || (defined(SYSTEME_SGIND8GA_IRIX_CC)) \ || (defined(SYSTEME_SGINDA08_IRIX_CC)) \ || (defined(SYSTEME_SGINDA24_IRIX_CC)) \ || (defined(SYSTEME_SGINDAGA_IRIX_CC)) \ || (defined(SYSTEME_SGO200A1_IRIX_CC)) \ || (defined(SYSTEME_SGO200A2_IRIX_CC)) \ || (defined(SYSTEME_SGO200A4_IRIX_CC)) \ || (defined(SYSTEME_SGO25224_IRIX_CC)) \ || (defined(SYSTEME_SGO252VA_IRIX_CC)) \ || (defined(SYSTEME_SGO252VN_IRIX_CC)) \ || (defined(SYSTEME_SGPCM801_IRIX_CC)) \ || (defined(SYSTEME_SGPCMA01_IRIX_CC)) \ ) # TestADef BUG_SYSTEME_C_complexite_01 \ /* Le compilateur 'cc' ne supporte pas des expressions trop complexes, telles celles qui */ \ /* sont le resultat de l'expansion de la procedure 'TRACE_POINT_3D' contenue dans le */ \ /* fichier '$xiii/montagnes$FON' ; le message suivant sort alors : */ \ /* */ \ /* 1-cas de 'SYSTEME_NWS3000_NEWSOS' : */ \ /* */ \ /* "Fatal error in: /usr/lib/cmplrs/cc/ugen Trace/BPT trap" */ \ /* */ \ /* et ceci est la seule solution que j'ai trouve... */ \ /* */ \ /* 2-cas de 'SYSTEME_SG' : */ \ /* */ \ /* le compilateur 'cc' ne supporte pas des expressions trop complexes, telles celles qui */ \ /* sont le resultat de l'expansion de la procedure 'TRACE_POINT_3D' contenue dans le */ \ /* fichier '$xiii/montagnes$FON' : le module 'usr/lib/ugen' fait alors un "core"... */ \ /* */ #Aif ( (defined(SYSTEME_NWS3000_NEWSOS_CC)) \ || (defined(SYSTEME_NWS3000_NEWSOS_2CC)) \ || (defined(SYSTEME_SG4D20G_IRIX_CC)) \ || (defined(SYSTEME_SG4D25TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D310VGX_IRIX_CC)) \ || (defined(SYSTEME_SG4D35TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D85GT_IRIX_CC)) \ || (defined(SYSTEME_SGIND308_IRIX_CC)) \ || (defined(SYSTEME_SGIND324_IRIX_CC)) \ || (defined(SYSTEME_SGIND3GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND408_IRIX_CC)) \ || (defined(SYSTEME_SGIND424_IRIX_CC)) \ || (defined(SYSTEME_SGIND4GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND508_IRIX_CC)) \ || (defined(SYSTEME_SGIND524_IRIX_CC)) \ || (defined(SYSTEME_SGIND5GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND808_IRIX_CC)) \ || (defined(SYSTEME_SGIND824_IRIX_CC)) \ || (defined(SYSTEME_SGIND8GA_IRIX_CC)) \ || (defined(SYSTEME_SGINDA08_IRIX_CC)) \ || (defined(SYSTEME_SGINDA24_IRIX_CC)) \ || (defined(SYSTEME_SGINDAGA_IRIX_CC)) \ || (defined(SYSTEME_SGO200A1_IRIX_CC)) \ || (defined(SYSTEME_SGO200A2_IRIX_CC)) \ || (defined(SYSTEME_SGO200A4_IRIX_CC)) \ || (defined(SYSTEME_SGO25224_IRIX_CC)) \ || (defined(SYSTEME_SGO252VA_IRIX_CC)) \ || (defined(SYSTEME_SGO252VN_IRIX_CC)) \ || (defined(SYSTEME_SGPCM801_IRIX_CC)) \ || (defined(SYSTEME_SGPCMA01_IRIX_CC)) \ ) #Eif ( (defined(SYSTEME_NWS3000_NEWSOS_CC)) \ || (defined(SYSTEME_NWS3000_NEWSOS_2CC)) \ || (defined(SYSTEME_SG4D20G_IRIX_CC)) \ || (defined(SYSTEME_SG4D25TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D310VGX_IRIX_CC)) \ || (defined(SYSTEME_SG4D35TG_IRIX_CC)) \ || (defined(SYSTEME_SG4D85GT_IRIX_CC)) \ || (defined(SYSTEME_SGIND308_IRIX_CC)) \ || (defined(SYSTEME_SGIND324_IRIX_CC)) \ || (defined(SYSTEME_SGIND3GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND408_IRIX_CC)) \ || (defined(SYSTEME_SGIND424_IRIX_CC)) \ || (defined(SYSTEME_SGIND4GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND508_IRIX_CC)) \ || (defined(SYSTEME_SGIND524_IRIX_CC)) \ || (defined(SYSTEME_SGIND5GA_IRIX_CC)) \ || (defined(SYSTEME_SGIND808_IRIX_CC)) \ || (defined(SYSTEME_SGIND824_IRIX_CC)) \ || (defined(SYSTEME_SGIND8GA_IRIX_CC)) \ || (defined(SYSTEME_SGINDA08_IRIX_CC)) \ || (defined(SYSTEME_SGINDA24_IRIX_CC)) \ || (defined(SYSTEME_SGINDAGA_IRIX_CC)) \ || (defined(SYSTEME_SGO200A1_IRIX_CC)) \ || (defined(SYSTEME_SGO200A2_IRIX_CC)) \ || (defined(SYSTEME_SGO200A4_IRIX_CC)) \ || (defined(SYSTEME_SGO25224_IRIX_CC)) \ || (defined(SYSTEME_SGO252VA_IRIX_CC)) \ || (defined(SYSTEME_SGO252VN_IRIX_CC)) \ || (defined(SYSTEME_SGPCM801_IRIX_CC)) \ || (defined(SYSTEME_SGPCMA01_IRIX_CC)) \ ) #if ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) # define store_point_valide(valeur,imageR,X,Y,Vf) \ Bblock \ storeQ_point_valide(GENP(valeur),imageR,X,Y,load_point,Vf,Ncalibrage); \ Eblock # define Astore_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_valide(GENP(valeur),albumR,X,Y,Z); \ Eblock #Aif ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) # define store_point_valide(valeur,imageR,X,Y,Vf) \ Bblock \ DEFV(genere_p,INIT(Gvaleur,GENP(valeur))); \ /* Cet intermediaire permet d'alleger le travail du compilateur... */ \ storeQ_point_valide(Gvaleur,imageR,X,Y,load_point,Vf,Ncalibrage); \ Eblock # define Astore_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ DEFV(genere_p,INIT(Gvaleur,GENP(valeur))); \ /* Cet intermediaire permet d'alleger le travail du compilateur... */ \ AstoreQ_point_valide(Gvaleur,albumR,X,Y,Z); \ Eblock #Eif ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) #define store_point_valide_simplifie(valeur,imageR,X,Y) \ Bblock \ store_point_valide(valeur,imageR,X,Y,FVARIABLE); \ Eblock \ /* Introduit le 20131231164141 afin que cette procedure possede le meme nombre d'arguments */ \ /* que les autres (l'argument 'Vf' y est donc implicite et vaut 'FVARIABLE'...). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " C H A R " / " I N T " / " F L O A T " : */ /* */ /* */ /* Nota : */ /* */ /* Pour les "store" de types differents */ /* de 'genere_p', on ne peut appliquer la */ /* fonction 'Vf', car en effet le type de */ /* ses arguments est variable, alors que */ /* dans son corps, il est fixe... */ /* */ /*************************************************************************************************************************************/ #define storeQV_point_valide(valeur,imageR,X,Y) \ Bblock \ Test(TEST_DANS_L_IMAGE(X,Y)) \ Bblock \ storeQV_point(valeur,imageR,X,Y); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define storeC_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CAST_CHAR(valeur),imageR,X,Y); \ /* La procedure 'CAST_CHAR(...)' a remplace un 'CAST(genere_CHAR,...)' le 20090331101826. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define storeIB_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_vrai_Int_de_base(valeur),imageR,X,Y); \ Eblock #define AstoreIB_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_valide(CASP_vrai_Int_de_base(valeur),albumR,X,Y,Z); \ Eblock \ /* Introduit le 20100326182837... */ #define storeI_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_Int(valeur),imageR,X,Y); \ /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103710. */ \ Eblock #define AstoreI_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_valide(CASP_Int(valeur),albumR,X,Y,Z); \ /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103710. */ \ Eblock \ /* Introduit le 20050909144029... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " P O S I T I V E " : */ /* */ /*************************************************************************************************************************************/ #define storeUB_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_vrai_Positive_de_base(valeur),imageR,X,Y); \ Eblock #define storeU_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_LPositive(valeur),imageR,X,Y); \ /* La procedure 'CASP_LPositive(...)' remplace un 'CASP(genere_posi,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define storeF_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_Float(valeur),imageR,X,Y); \ /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103710. */ \ Eblock #define AstoreF_point_valide(valeur,albumR,X,Y,Z) \ Bblock \ AstoreQ_point_valide(CASP_Float(valeur),albumR,X,Y,Z); \ /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L I D A T I O N P U I S R A N G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define storeD_point_valide(valeur,imageR,X,Y) \ Bblock \ storeQV_point_valide(CASP_Double(valeur),imageR,X,Y); \ /* La procedure 'CASP_Double(...)' remplace un 'CASP(genere_Double,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T Q U E L C O N Q U E : */ /* */ /*************************************************************************************************************************************/ #define storeQ_point_modulo(valeur,imageR,X,Y,loadX_point,Vf,Calibrage) \ Bblock \ storeQ_point(valeur,imageR,MODX(X),MODY(Y),loadX_point,Vf,Calibrage); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ #if ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) # define store_point_modulo(valeur,imageR,X,Y,Vf) \ Bblock \ storeQ_point_modulo(GENP(valeur),imageR,X,Y,load_point,Vf,Ncalibrage); \ Eblock #Aif ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) # define store_point_modulo(valeur,imageR,X,Y,Vf) \ Bblock \ DEFV(genere_p,INIT(Gvaleur,GENP(valeur))); \ /* Cet intermediaire permet d'alleger le travail du compilateur... */ \ storeQ_point_modulo(Gvaleur,imageR,X,Y,load_point,Vf,Ncalibrage); \ Eblock #Eif ( (! defined(BUG_SYSTEME_C_complexite_01)) \ ) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " C H A R " / " I N T " / " F L O A T " : */ /* */ /* */ /* Nota : */ /* */ /* Pour les "store" de types differents */ /* de 'genere_p', on ne peut appliquer la */ /* fonction 'Vf', car en effet le type de */ /* ses arguments est variable, alors que */ /* dans son corps, il est fixe... */ /* */ /*************************************************************************************************************************************/ #define storeQV_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point(valeur,imageR,MODX(X),MODY(Y)); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " C H A R " : */ /* */ /*************************************************************************************************************************************/ #define storeC_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CAST_CHAR(valeur),imageR,X,Y); \ /* La procedure 'CAST_CHAR(...)' a remplace un 'CAST(genere_CHAR,...)' le 20090331101826. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " I N T " : */ /* */ /*************************************************************************************************************************************/ #define storeIB_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_vrai_Int_de_base(valeur),imageR,X,Y); \ Eblock #define storeI_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_Int(valeur),imageR,X,Y); \ /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " P O S I T I V E " : */ /* */ /*************************************************************************************************************************************/ #define storeUB_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_vrai_Positive_de_base(valeur),imageR,X,Y); \ Eblock #define storeU_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_LPositive(valeur),imageR,X,Y); \ /* La procedure 'CASP_LPositive(...)' remplace un 'CASP(genere_posi,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " F L O A T " : */ /* */ /*************************************************************************************************************************************/ #define storeF_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_Float(valeur),imageR,X,Y); \ /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M O D U L O P U I S R A N G E M E N T D ' U N P O I N T " D O U B L E " : */ /* */ /*************************************************************************************************************************************/ #define storeD_point_modulo(valeur,imageR,X,Y) \ Bblock \ storeQV_point_modulo(CASP_Double(valeur),imageR,X,Y); \ /* La procedure 'CASP_Double(...)' remplace un 'CASP(genere_Double,...)' le 20090331103710. */ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* V A L E U R A B S O L U E D ' U N P O I N T : */ /* */ /*************************************************************************************************************************************/ #define PABS(X,Y,imageA,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(VABS(niveau_imageA) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P L E M E N T A T I O N D ' U N P O I N T : */ /* */ /*************************************************************************************************************************************/ #define PCOMP(X,Y,imageA,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(VCOMP(niveau_imageA) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A D D I T I O N D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PADD(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(GENP(TRNP(VADD(niveau_imageA1,niveau_imageA2))) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock \ /* ATTENTION, avant l'introduction du 'TRNP(...)', il y avait : */ \ /* */ \ /* store_point(NIVA(VADD(NIVR(load_point(imageA1,X,Y)) \ */ \ /* ,NIVR(load_point(imageA2,X,Y)) \ */ \ /* ) \ */ \ /* ) \ */ \ /* ,imageR,X,Y,FVARIABLE \ */ \ /* ); \ */ \ /* */ \ /* mais dans le but d'alleger le travail des compilateurs, deux variables intermediaires */ \ /* ont ete introduites... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R P O L A T I O N E N T R E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PINTER(X,Y,alpha,imageA1,beta,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(GENP(TRNP(VADD(NIVA(VMULF(alpha,NIVR(niveau_imageA1))) \ ,NIVA(VMULF(beta,NIVR(niveau_imageA2))) \ ) \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock \ /* ATTENTION, avant l'introduction du 'TRNP(...)', il y avait : */ \ /* */ \ /* store_point(NIVA(VADD(VMULF(alpha,NIVR(load_point(imageA1,X,Y))) \ */ \ /* ,VMULF(beta,NIVR(load_point(imageA2,X,Y))) \ */ \ /* ) \ */ \ /* ) \ */ \ /* ,imageR,X,Y,FVARIABLE \ */ \ /* ); \ */ \ /* */ \ /* mais dans le but d'alleger le travail des compilateurs, deux variables intermediaires */ \ /* ont ete introduites... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N C R E M E N T A T I O N D ' U N P O I N T : */ /* */ /*************************************************************************************************************************************/ #define PINC(X,Y,imageA,increment,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(VADD(niveau_imageA,NIVA(increment)) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S O U S T R A C T I O N D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PSUB(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VSUB(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M U L T I P L I C A T I O N D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PMUL(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(NIVA(VDIV(VMUL(FLOT(NIVR(niveau_imageA1)) \ ,FLOT(NIVR(niveau_imageA2)) \ ) \ ,FLOT(NIVR(BLANC)) \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M U L T I P L I C A T I O N D E D E U X P O I N T S A V E C A R R O N D I : */ /* */ /*************************************************************************************************************************************/ #define PMULA(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(NIVA(ARRI(VDIV(VMUL(FLOT(NIVR(niveau_imageA1)) \ ,FLOT(NIVR(niveau_imageA2)) \ ) \ ,FLOT(NIVR(BLANC)) \ ) \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M U L T I P L I C A T I O N D ' U N P O I N T P A R U N F L O T T A N T : */ /* */ /*************************************************************************************************************************************/ #define PMULF(X,Y,facteur,imageA,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(TRNF(VMULF(facteur \ ,NIVR(niveau_imageA) \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O R M E L I N E A I R E F L O T T A N T E S U R U N P O I N T : */ /* */ /*************************************************************************************************************************************/ #define PAXPB(X,Y,facteur,translation,imageA,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(TRNF(AXPB(facteur \ ,FLOT(NIVR(niveau_imageA)) \ ,translation \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I V I S I O N D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PDIV(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ /* ATTENTION, jusqu'au 20190927170834, ces deux definitions etaient avant le 'Bblock', */ \ /* mais il est evident qu'il s'agit-la d'une erreur... */ \ \ store_point(NIVA(VDIV(FLOT(NIVR(niveau_imageA1)) \ ,FLOT(NIVR(niveau_imageA2)) \ ) \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A X I M U M D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PMAX(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VMAX(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M I N I M U M D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PMIN(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VMIN(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " O U " E X C L U S I F F L O U D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #define PMINMAX(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VMINMAX(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock #define PMAXMIN(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VMAXMIN(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock \ /* Introduit le 20061023092103 par "symetrie" avec 'PMINMAX(...)'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N V E R S I O N D ' U N P O I N T : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define PINVERT(X,Y,imageA,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA,load_point(imageA,X,Y))); \ \ store_point(VINVERT(niveau_imageA) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' O R ' D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define POR(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VOR(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' A N D ' D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define PAND(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VAND(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* ' E O R ' D E D E U X P O I N T S : */ /* */ /*************************************************************************************************************************************/ #if ((Format_p==Format_char)||(Format_p==Format_int)) # define PEOR(X,Y,imageA1,imageA2,imageR) \ Bblock \ DEFV(genere_p,INIT(niveau_imageA1,load_point(imageA1,X,Y))); \ DEFV(genere_p,INIT(niveau_imageA2,load_point(imageA2,X,Y))); \ \ store_point(VEOR(niveau_imageA1 \ ,niveau_imageA2 \ ) \ ,imageR,X,Y,FVARIABLE \ ); \ Eblock #Aif ((Format_p==Format_char)||(Format_p==Format_int)) #Eif ((Format_p==Format_char)||(Format_p==Format_int)) /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' A C C E S C O N T I N U A U N E I M A G E F L O T T A N T E : */ /* */ /*************************************************************************************************************************************/ #define loadF_storeF_point_continu_lineaire_cubique_donnees_1(Xf,Yf) \ DEFV(Int,INIT(X_local,UNDEF)); \ /* Definition de l'abscisse decrivant l'axe 'OX', */ \ DEFV(Int,INIT(Y_local,UNDEF)); \ /* Definition de l'ordonnee decrivant l'axe 'OY'. */ \ DEFV(pointF_2D,barycentre); \ /* Pour calculer les coordonnees barycentriques d'un point dans une maille. */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=0,v=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+1,v=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=0,v=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+1,v=+1). */ #define loadF_storeF_point_continu_lineaire_cubique_donnees_2 \ DEFV(genere_Float,INIT(fonction___au_point_uUv0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=U,v=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUv1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=U,v=+1). */ #define loadF_storeF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvV,image,Xf,Yf) \ Bblock \ EGAL(X_local,INTX(Xf)); \ /* Definition de l'abscisse entiere decrivant l'axe 'OX', */ \ EGAL(Y_local,INTY(Yf)); \ /* Definition de l'ordonnee entiere decrivant l'axe 'OY'. */ \ \ INITIALISATION_POINT_2D(barycentre \ ,DIVI(SOUS(Xf,FLOT(X_local)) \ ,FLOT(pasX) \ ) \ ,DIVI(SOUS(Yf,FLOT(Y_local)) \ ,FLOT(pasY) \ ) \ ); \ \ Test(IFEXff(ASD1(barycentre,x),COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \ /* Jusqu'au 20060515102100, c'etait 'NINCff(...)' qui etait utilisee ci-dessus, mais */ \ /* dans le cas present 'IFEXff(...)' peut etre utilisee sans probleme... */ \ Bblock \ PRINT_ERREUR("la coordonnee barycentrique 'x' est hors [0,1]"); \ CAL1(Prer3("elle vaut %g (Xf=%g,X=%d)\n",ASD1(barycentre,x),Xf,X)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ Test(IFEXff(ASD1(barycentre,y),COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \ /* Jusqu'au 20060515102100, c'etait 'NINCff(...)' qui etait utilisee ci-dessus, mais */ \ /* dans le cas present 'IFEXff(...)' peut etre utilisee sans probleme... */ \ Bblock \ PRINT_ERREUR("la coordonnee barycentrique 'y' est hors [0,1]"); \ CAL1(Prer3("elle vaut %g (Yf=%g,Y=%d)\n",ASD1(barycentre,y),Yf,Y)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ /* Calcul des coordonnees barycentriques (u,v) alias (ASD1(barycentre,x),ASD1(barycentre,y)) */ \ /* du point {X,Y} courant par rapport a la maille courante (pasX,pasY). */ \ Eblock #define loadF_storeF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvV,image,Xf,Yf,load,store) \ Bblock \ EGAL(fonction___au_point_u0v0,load(image,NEUT(NEUT(X_local)),NEUT(NEUT(Y_local)))); \ /* Valeur de la fonction au noeud (u=0,v=0), */ \ EGAL(fonction___au_point_u1v0,load(image,NEUT(SUCX(X_local)),NEUT(NEUT(Y_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=0), */ \ EGAL(fonction___au_point_u0v1,load(image,NEUT(NEUT(X_local)),NEUT(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=0,v=+1), */ \ EGAL(fonction___au_point_u1v1,load(image,NEUT(SUCX(X_local)),NEUT(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=+1). */ \ Eblock #define Gload_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf,load,store,type,cast) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf} E [Xmin,Xmax]x[Ymin,Ymax] */ \ /* */ \ Bblock \ loadF_storeF_point_continu_lineaire_cubique_donnees_1(Xf,Yf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ loadF_storeF_point_continu_lineaire_cubique_donnees_2; \ /* Donnees communes 2 aux interpolations lineaire et cubique. */ \ loadF_storeF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvV,image,Xf,Yf); \ loadF_storeF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvV \ ,image \ ,INTX(Xf),INTY(Yf) \ ,load,store \ ); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_uUv0 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v0 \ ,fonction___au_point_u1v0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v1 \ ,fonction___au_point_u1v1 \ ,ASD1(barycentre,x) \ ) \ ); \ /* Calcul de la valeur de la fonction sur les aretes horizontales du carre de base... */ \ EGAL(fonction___au_point_uUvV \ ,cast(INTERPOLATION_LINEAIRE(fonction___au_point_uUv0 \ ,fonction___au_point_uUv1 \ ,ASD1(barycentre,y) \ ) \ ) \ ); \ Eblock \ /* Acces continu lineaire a une image flottante (introduit le 20131230111749). */ #define load_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf) \ Bblock \ Gload_point_continu_lineaire(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,load_point_valide,store_point_valide_simplifie \ ,genere_p \ ,GENP \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define loadF_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf) \ Bblock \ Gload_point_continu_lineaire(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,loadF_point_valide,storeF_point_valide \ ,genere_Float \ ,NEUT \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define Gload_point_continu_cubique(fonction___au_point_uUvV,image,Xf,Yf,load,store,type,cast) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf} E [Xmin,Xmax]x[Ymin,Ymax] */ \ /* */ \ Bblock \ loadF_storeF_point_continu_lineaire_cubique_donnees_1(Xf,Yf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ \ DEFV(genere_Float,INIT(fonction___au_point_u9v0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=-1,v=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+2,v=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u9v1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=-1,v=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+2,v=+1). */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=0,v=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+1,v=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=0,v=+2), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction au noeud (u=+1,v=+2). */ \ \ loadF_storeF_point_continu_lineaire_cubique_donnees_2; \ /* Donnees communes 2 aux interpolations lineaire et cubique. */ \ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction au noeud (u=0,v=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction au noeud (u=+1,v=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction au noeud (u=0,v=+1), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction au noeud (u=+1,v=+1). */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au noeud (u=0,v=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au noeud (u=+1,v=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au noeud (u=0,v=+1), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au noeud (u=+1,v=+1). */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=0), */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction au point (u=U,v=+1). */ \ \ loadF_storeF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvV,image,Xf,Yf); \ loadF_storeF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvV \ ,image \ ,INTX(Xf),INTY(Yf) \ ,load,store \ ); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_u9v0,load(image,NEUT(PREX(X_local)),NEUT(NEUT(Y_local)))); \ /* Valeur de la fonction au noeud (u=-1,v=0), */ \ EGAL(fonction___au_point_u2v0,load(image,SUCX(SUCX(X_local)),NEUT(NEUT(Y_local)))); \ /* Valeur de la fonction au noeud (u=+2,v=0), */ \ EGAL(fonction___au_point_u9v1,load(image,NEUT(PREX(X_local)),NEUT(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=-1,v=+1), */ \ EGAL(fonction___au_point_u2v1,load(image,SUCX(SUCX(X_local)),NEUT(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=+2,v=+1). */ \ EGAL(fonction___au_point_u0v9,load(image,NEUT(NEUT(X_local)),NEUT(PREY(Y_local)))); \ /* Valeur de la fonction au noeud (u=0,v=-1), */ \ EGAL(fonction___au_point_u1v9,load(image,NEUT(SUCX(X_local)),NEUT(PREY(Y_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=-1), */ \ EGAL(fonction___au_point_u0v2,load(image,NEUT(NEUT(X_local)),SUCY(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=0,v=+2), */ \ EGAL(fonction___au_point_u1v2,load(image,NEUT(SUCX(X_local)),SUCY(SUCY(Y_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=+2). */ \ EGAL(derivee_Du_au_noeud_u0v0 \ ,DERIVATION_PARTIELLE(fonction___au_point_u9v0 \ ,fonction___au_point_u1v0 \ ,DOUB(pasX) \ ) \ ); \ EGAL(derivee_Du_au_noeud_u1v0 \ ,DERIVATION_PARTIELLE(fonction___au_point_u0v0 \ ,fonction___au_point_u2v0 \ ,DOUB(pasX) \ ) \ ); \ EGAL(derivee_Du_au_noeud_u1v1 \ ,DERIVATION_PARTIELLE(fonction___au_point_u0v1 \ ,fonction___au_point_u2v1 \ ,DOUB(pasX) \ ) \ ); \ EGAL(derivee_Du_au_noeud_u0v1 \ ,DERIVATION_PARTIELLE(fonction___au_point_u9v1 \ ,fonction___au_point_u1v1 \ ,DOUB(pasX) \ ) \ ); \ EGAL(derivee_Dv_au_noeud_u0v0 \ ,DERIVATION_PARTIELLE(fonction___au_point_u0v9 \ ,fonction___au_point_u0v1 \ ,DOUB(pasY) \ ) \ ); \ EGAL(derivee_Dv_au_noeud_u1v0 \ ,DERIVATION_PARTIELLE(fonction___au_point_u1v9 \ ,fonction___au_point_u1v1 \ ,DOUB(pasY) \ ) \ ); \ EGAL(derivee_Dv_au_noeud_u1v1 \ ,DERIVATION_PARTIELLE(fonction___au_point_u1v0 \ ,fonction___au_point_u1v2 \ ,DOUB(pasY) \ ) \ ); \ EGAL(derivee_Dv_au_noeud_u0v1 \ ,DERIVATION_PARTIELLE(fonction___au_point_u0v0 \ ,fonction___au_point_u0v2 \ ,DOUB(pasY) \ ) \ ); \ /* Calcul des derivees partielles en 'u' et 'v' aux noeuds du carre de base par des */ \ /* differences finies a l'aide des differentes valeurs aux noeuds du maillage... */ \ EGAL(derivee_Dv_au_point_uUv0 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v0,derivee_Dv_au_noeud_u1v0,ASD1(barycentre,x)) \ ); \ EGAL(derivee_Dv_au_point_uUv1 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v1,derivee_Dv_au_noeud_u1v1,ASD1(barycentre,x)) \ ); \ /* Calcul des derivees partielles en 'u' et 'v' sur les aretes horizontales du carre de */ \ /* base par des interpolations lineaires a partir des sommets voisins (on notera que l'on */ \ /* ne peut utiliser d'interpolation cubique, puisqu'on ne connait pas encore les derivees). */ \ EGAL(fonction___au_point_uUv0 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v0 \ ,derivee_Du_au_noeud_u0v0 \ ,fonction___au_point_u1v0 \ ,derivee_Du_au_noeud_u1v0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v1 \ ,derivee_Du_au_noeud_u0v1 \ ,fonction___au_point_u1v1 \ ,derivee_Du_au_noeud_u1v1 \ ,ASD1(barycentre,x) \ ) \ ); \ /* Calcul de la valeur de la fonction sur les aretes horizontales du carre de base... */ \ EGAL(fonction___au_point_uUvV \ ,cast(INTERPOLATION_CUBIQUE(fonction___au_point_uUv0 \ ,derivee_Dv_au_point_uUv0 \ ,fonction___au_point_uUv1 \ ,derivee_Dv_au_point_uUv1 \ ,ASD1(barycentre,y) \ ) \ ) \ ); \ Eblock \ /* Ordre des interpolations cubiques ('-1' est note '9') : */ \ /* */ \ /* */ \ /* v=2 - - - - - - - -0 2- - - - - - - -1 2- - - - - - - - */ \ /* | /| |\ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / [1] \ */ \ /* |/ | | \| */ \ /* v=1 9 1- - - - - - - -0 1---------U 1---1 1- - - - - - - -2 1 */ \ /* | | . | | */ \ /* | . | */ \ /* | | . | | */ \ /* | . | */ \ /* | | . | | */ \ /* | [2] U V | */ \ /* | | . | | */ \ /* | . | */ \ /* | | . | | */ \ /* v=0 9 0- - - -<- - - -0 0---------U 0---1 0- - - - - - - -2 0 */ \ /* |\ | | /| */ \ /* \ [1] / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \| |/ | */ \ /* v=-1 - - - - - - - -0 9- - - - - - - -1 9- - - - - - - - */ \ /* */ \ /* u=-1 u=0 u=1 u=2 */ \ /* */ \ /* */ \ /* v ^ */ \ /* | */ \ /* | */ \ /* |----> */ \ /* u */ \ /* */ \ /* */ \ /* Acces continu cubique a une image flottante... */ #define load_point_continu_cubique(fonction___au_point_uUvV,image,Xf,Yf) \ Bblock \ Gload_point_continu_cubique(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,load_point_valide,store_point_valide_simplifie \ ,genere_p \ ,GENP \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define loadF_point_continu_cubique(fonction___au_point_uUvV,image,Xf,Yf) \ Bblock \ Gload_point_continu_cubique(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,loadF_point_valide,storeF_point_valide \ ,genere_Float \ ,NEUT \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define load_point_continu(fonction___au_point_uUvV,image,Xf,Yf,interpolation_cubique) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf} E [Xmin,Xmax]x[Ymin,Ymax] */ \ /* */ \ Bblock \ Test(IL_FAUT(interpolation_cubique)) \ Bblock \ load_point_continu_cubique(fonction___au_point_uUvV,image,Xf,Yf); \ Eblock \ ATes \ Bblock \ load_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf); \ Eblock \ ETes \ Eblock \ /* Acces continu a une image "standard" (introduit le 20131231164141). */ #define loadF_point_continu(fonction___au_point_uUvV,image,Xf,Yf,interpolation_cubique) \ /* La possibilite de choisir l'interpolation a ete introduite le 20131230124002... */ \ /* */ \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf} E [Xmin,Xmax]x[Ymin,Ymax] */ \ /* */ \ Bblock \ Test(IL_FAUT(interpolation_cubique)) \ Bblock \ loadF_point_continu_cubique(fonction___au_point_uUvV,image,Xf,Yf); \ Eblock \ ATes \ Bblock \ loadF_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf); \ Eblock \ ETes \ Eblock \ /* Acces continu a une image flottante (introduit sous cette forme le 20131230111455). */ #define StoreLoad(niveau,image,X,Y,load,store,type,cast,ecraser) \ Bblock \ Test(IL_FAUT(ecraser)) \ Bblock \ store(cast(niveau),image,X,Y); \ Eblock \ ATes \ Bblock \ DEFV(type,INIT(niveau_anterieur,load(image,X,Y))); \ store(ADD2(cast(niveau),niveau_anterieur),image,X,Y); \ Eblock \ ETes \ Eblock \ /* Procedure introduite le 20140101094041 afin de permettre (en option) de ranger un */ \ /* niveau, mais sans perdre ce qui etait la anterieurement... */ #define Gstore_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf,load,store,type,cast,ecraser) \ /* L'argument 'fonction___au_point_uUvV' est donc le niveau a "etaler" sur les quatre */ \ /* sommets entiers du carre courant... */ \ /* */ \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf} E [Xmin,Xmax]x[Ymin,Ymax] */ \ /* */ \ Bblock \ loadF_storeF_point_continu_lineaire_cubique_donnees_1(Xf,Yf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ loadF_storeF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvV,image,Xf,Yf); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_u0v0,MUL3(fonction___au_point_uUvV,COMP(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)))); \ EGAL(fonction___au_point_u1v0,MUL3(fonction___au_point_uUvV,NEUT(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)))); \ EGAL(fonction___au_point_u0v1,MUL3(fonction___au_point_uUvV,COMP(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)))); \ EGAL(fonction___au_point_u1v1,MUL3(fonction___au_point_uUvV,NEUT(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)))); \ /* Calcul de la fonction aux quatre coins entiers du carre... */ \ \ StoreLoad(fonction___au_point_u0v0,image,NEUT(INTX(Xf)),NEUT(INTY(Yf)),load,store,type,cast,ecraser); \ StoreLoad(fonction___au_point_u1v0,image,SUCX(INTX(Xf)),NEUT(INTY(Yf)),load,store,type,cast,ecraser); \ StoreLoad(fonction___au_point_u0v1,image,NEUT(INTX(Xf)),SUCY(INTY(Yf)),load,store,type,cast,ecraser); \ StoreLoad(fonction___au_point_u1v1,image,SUCX(INTX(Xf)),SUCY(INTY(Yf)),load,store,type,cast,ecraser); \ /* Rangement des quatre coins entiers du carre par etalement de 'fonction___au_point_uUvV'. */ \ Eblock \ /* Acces continu lineaire a une image flottante (introduit le 20131230111749). */ \ /* */ \ /* ATTENTION, on notera que les procedures 'Gstore_point_continu_lineaire(...)' et */ \ /* 'Gload_point_continu_lineaire(...)' ne sont pas "inverses l'une de l'auutre. En */ \ /* effet 'Gload_point_continu_lineaire(...)' procede a une interpolation lineaire entre les */ \ /* quatre sommets du carre courant ; le niveau 'fonction___au_point_uUvV' resultant */ \ /* est donc une COMBINAISON LINEAIRE des valeurs aux quatre sommets du carre. Alors qu'avec */ \ /* 'Gstore_point_continu_lineaire(...)' la SOMME des valeurs aux quatre sommets du carre */ \ /* est egale "directement" a 'fonction___au_point_uUvV'... */ \ /* */ \ /* Soit donc pour 'Gstore_point_continu_lineaire(...)' : */ \ /* */ \ /* uUvV --> (u0v0)+(u1v0)+(u0v1)+(u1v1) */ \ /* */ \ /* alors que pour 'Gload_point_continu_lineaire(...)' : */ \ /* */ \ /* uUvV <-- a.(u0v0)+b.(u1v0)+c.(u0v1)+d.(u1v1) */ \ /* */ \ /* ou {a,b,c,d} sont dans [0,1]. */ #define store_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf,ecraser) \ Bblock \ Gstore_point_continu_lineaire(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,load_point_valide,store_point_valide_simplifie \ ,genere_p \ ,GENP \ ,ecraser \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define storeF_point_continu_lineaire(fonction___au_point_uUvV,image,Xf,Yf,ecraser) \ Bblock \ Gstore_point_continu_lineaire(fonction___au_point_uUvV \ ,image \ ,Xf,Yf \ ,loadF_point_valide,storeF_point_valide \ ,genere_Float \ ,NEUT \ ,ecraser \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L ' A C C E S C O N T I N U A U N A L B U M F L O T T A N T : */ /* */ /*************************************************************************************************************************************/ #define AloadF_AstoreF_point_continu_lineaire_cubique_donnees_1(Xf,Yf,Zf) \ DEFV(Int,INIT(X_local,UNDEF)); \ /* Definition de l'abscisse decrivant l'axe 'OX', */ \ DEFV(Int,INIT(Y_local,UNDEF)); \ /* Definition de l'ordonnee decrivant l'axe 'OY'. */ \ DEFV(Int,INIT(Z_local,UNDEF)); \ /* Definition de l'ordonnee decrivant l'axe 'OZ'. */ \ DEFV(pointF_3D,barycentre); \ /* Pour calculer les coordonnees barycentriques d'un point dans une maille. */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v0w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v0w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v1w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v1w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v0w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v0w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v1w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v1w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=+1). */ #define AloadF_AstoreF_point_continu_lineaire_cubique_donnees_2 \ DEFV(genere_Float,INIT(fonction___au_point_uUv0w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=0,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUv1w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=+1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUv0w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=0,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUv1w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=+1,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUvVw0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=V,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_uUvVw1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=U,v=V,w=+1). */ #define AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvVwW,album,Xf,Yf,Zf) \ Bblock \ EGAL(X_local,INTX(Xf)); \ /* Definition de l'abscisse entiere decrivant l'axe 'OX', */ \ EGAL(Y_local,INTY(Yf)); \ /* Definition de l'ordonnee entiere decrivant l'axe 'OY'. */ \ EGAL(Z_local,INTZ(Zf)); \ /* Definition de l'ordonnee entiere decrivant l'axe 'OZ'. */ \ \ INITIALISATION_POINT_3D(barycentre \ ,DIVI(SOUS(Xf,FLOT(X_local)) \ ,FLOT(pasX) \ ) \ ,DIVI(SOUS(Yf,FLOT(Y_local)) \ ,FLOT(pasY) \ ) \ ,DIVI(SOUS(Zf,FLOT(Z_local)) \ ,FLOT(pasZ) \ ) \ ); \ \ Test(IFEXff(ASD1(barycentre,x),COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \ Bblock \ PRINT_ERREUR("la coordonnee barycentrique 'x' est hors [0,1]"); \ CAL1(Prer3("elle vaut %g (Xf=%g,X=%d)\n",ASD1(barycentre,x),Xf,X)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ Test(IFEXff(ASD1(barycentre,y),COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \ Bblock \ PRINT_ERREUR("la coordonnee barycentrique 'y' est hors [0,1]"); \ CAL1(Prer3("elle vaut %g (Yf=%g,Y=%d)\n",ASD1(barycentre,y),Yf,Y)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ Test(IFEXff(ASD1(barycentre,z),COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE)) \ Bblock \ PRINT_ERREUR("la coordonnee barycentrique 'z' est hors [0,1]"); \ CAL1(Prer3("elle vaut %g (Zf=%g,Z=%d)\n",ASD1(barycentre,z),Zf,Z)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ /* Calcul des coordonnees barycentriques (u,v,w) du point {X,Y,Z}... */ \ Eblock #define AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,Aload,Astore) \ Bblock \ EGAL(fonction___au_point_u0v0w0,Aload(album,NEUT(NEUT(X_local)),NEUT(NEUT(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction au noeud (u=0,v=0,w=0), */ \ EGAL(fonction___au_point_u1v0w0,Aload(album,NEUT(SUCX(X_local)),NEUT(NEUT(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=0,w=0), */ \ EGAL(fonction___au_point_u0v1w0,Aload(album,NEUT(NEUT(X_local)),NEUT(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction au noeud (u=0,v=+1,w=0), */ \ EGAL(fonction___au_point_u1v1w0,Aload(album,NEUT(SUCX(X_local)),NEUT(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=+1,w=0). */ \ EGAL(fonction___au_point_u0v0w1,Aload(album,NEUT(NEUT(X_local)),NEUT(NEUT(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction au noeud (u=0,v=0,w=1), */ \ EGAL(fonction___au_point_u1v0w1,Aload(album,NEUT(SUCX(X_local)),NEUT(NEUT(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=0,w=1), */ \ EGAL(fonction___au_point_u0v1w1,Aload(album,NEUT(NEUT(X_local)),NEUT(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction au noeud (u=0,v=+1,w=1), */ \ EGAL(fonction___au_point_u1v1w1,Aload(album,NEUT(SUCX(X_local)),NEUT(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction au noeud (u=+1,v=+1,w=1). */ \ Eblock #define GAload_point_continu_lineaire(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,Aload,Astore,type,cast) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf,Zf} E [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] */ \ /* */ \ Bblock \ AloadF_AstoreF_point_continu_lineaire_cubique_donnees_1(Xf,Yf,Zf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ AloadF_AstoreF_point_continu_lineaire_cubique_donnees_2; \ /* Donnees communes 2 aux interpolations lineaire et cubique. */ \ AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvVwW \ ,album \ ,INTX(Xf),INTY(Yf),INTZ(Zf) \ ,Aload,Astore \ ); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_uUv0w0 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v0w0 \ ,fonction___au_point_u1v0w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1w0 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v1w0 \ ,fonction___au_point_u1v1w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv0w1 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v0w1 \ ,fonction___au_point_u1v0w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1w1 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_u0v1w1 \ ,fonction___au_point_u1v1w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUvVw0 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_uUv0w0 \ ,fonction___au_point_uUv1w0 \ ,ASD1(barycentre,y) \ ) \ ); \ EGAL(fonction___au_point_uUvVw1 \ ,INTERPOLATION_LINEAIRE(fonction___au_point_uUv0w1 \ ,fonction___au_point_uUv1w1 \ ,ASD1(barycentre,y) \ ) \ ); \ /* Calcul de la valeur de la fonction sur les aretes horizontales du cube de base... */ \ EGAL(fonction___au_point_uUvVwW \ ,cast(INTERPOLATION_LINEAIRE(fonction___au_point_uUvVw0 \ ,fonction___au_point_uUvVw1 \ ,ASD1(barycentre,z) \ ) \ ) \ ); \ Eblock \ /* Acces continu lineaire a un album flottant (introduit le 20131231122301). */ #define Aload_point_continu_lineaire(fonction___au_point_uUvV,album,Xf,Yf,Zf) \ Bblock \ GAload_point_continu_lineaire(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,Aload_point_valide,Astore_point_valide \ ,genere_p \ ,GENP \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define AloadF_point_continu_lineaire(fonction___au_point_uUvV,album,Xf,Yf,Zf) \ Bblock \ GAload_point_continu_lineaire(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,AloadF_point_valide,AstoreF_point_valide \ ,genere_Float \ ,NEUT \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee,fonction_origine,fonction_extremite,pas_du_maillage) \ Bblock \ EGAL(derivee \ ,DERIVATION_PARTIELLE(fonction_origine \ ,fonction_extremite \ ,DOUB(pas_du_maillage) \ ) \ ); \ Eblock #define GAload_point_continu_cubique(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,Aload,Astore,type,cast) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf,Zf} E [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] */ \ /* */ \ Bblock \ AloadF_AstoreF_point_continu_lineaire_cubique_donnees_1(Xf,Yf,Zf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ \ DEFV(genere_Float,INIT(fonction___au_point_u9v0w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=0,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v0w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=0,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u9v1w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=+1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v1w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=+1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u9v0w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=0,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v0w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=0,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u9v1w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=+1,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u2v1w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=+1,w=+1). */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v9w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=-1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v9w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=-1,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v2w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+2,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v2w0,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+2,w=0), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v9w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=-1,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v9w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=-1,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v2w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+2,w=+1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v2w1,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+2,w=+1). */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v0w9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v0w9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v1w9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v1w9,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=-1), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v0w2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=+2), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v0w2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=+2), */ \ DEFV(genere_Float,INIT(fonction___au_point_u0v1w2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=+2), */ \ DEFV(genere_Float,INIT(fonction___au_point_u1v1w2,FLOT__NIVEAU_UNDEF)); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=+2). */ \ \ AloadF_AstoreF_point_continu_lineaire_cubique_donnees_2; \ /* Donnees communes 2 aux interpolations lineaire et cubique. */ \ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=0,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=+1,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=0,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=+1,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=0,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=+1,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u0v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=0,v=+1,w=+1), */ \ DEFV(Float,INIT(derivee_Du_au_noeud_u1v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'u' de la fonction aleatoire au noeud (u=+1,v=+1,w=+1). */ \ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=0,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=+1,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=0,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=+1,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=0,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=+1,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u0v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=0,v=+1,w=+1), */ \ DEFV(Float,INIT(derivee_Dv_au_noeud_u1v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au noeud (u=+1,v=+1,w=+1). */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au point (u=U,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au point (u=U,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au point (u=U,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dv_au_point_uUv1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'v' de la fonction aleatoire au point (u=U,v=+1,w=+1). */ \ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u0v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=0,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u1v0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=+1,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u0v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=0,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u1v1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=+1,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u0v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=0,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u1v0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=+1,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u0v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=0,v=+1,w=+1), */ \ DEFV(Float,INIT(derivee_Dw_au_noeud_u1v1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au noeud (u=+1,v=+1,w=+1). */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUv0w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=0,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUv1w0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=+1,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUv0w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=0,w=+1), */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUv1w1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=+1,w=+1). */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUvVw0,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=V,w=0), */ \ DEFV(Float,INIT(derivee_Dw_au_point_uUvVw1,FLOT__UNDEF)); \ /* Valeur de la derivee partielle en 'w' de la fonction aleatoire au point (u=U,v=V,w=+1). */ \ \ AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_2(fonction___au_point_uUvVwW \ ,album \ ,INTX(Xf),INTY(Yf),INTZ(Zf) \ ,Aload,Astore \ ); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_u9v0w0,Aload(album,NEUT(PREX(X_local)),NEUT(NEUT(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=0,w=0), */ \ EGAL(fonction___au_point_u2v0w0,Aload(album,SUCX(SUCX(X_local)),NEUT(NEUT(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=0,w=0), */ \ EGAL(fonction___au_point_u9v1w0,Aload(album,NEUT(PREX(X_local)),NEUT(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=+1,w=0), */ \ EGAL(fonction___au_point_u2v1w0,Aload(album,SUCX(SUCX(X_local)),NEUT(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=+1,w=0), */ \ EGAL(fonction___au_point_u9v0w1,Aload(album,NEUT(PREX(X_local)),NEUT(NEUT(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=0,w=+1), */ \ EGAL(fonction___au_point_u2v0w1,Aload(album,SUCX(SUCX(X_local)),NEUT(NEUT(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=0,w=+1), */ \ EGAL(fonction___au_point_u9v1w1,Aload(album,NEUT(PREX(X_local)),NEUT(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=-1,v=+1,w=+1), */ \ EGAL(fonction___au_point_u2v1w1,Aload(album,SUCX(SUCX(X_local)),NEUT(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+2,v=+1,w=+1). */ \ EGAL(fonction___au_point_u0v9w0,Aload(album,NEUT(NEUT(X_local)),NEUT(PREY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=-1,w=0), */ \ EGAL(fonction___au_point_u1v9w0,Aload(album,NEUT(SUCX(X_local)),NEUT(PREY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=-1,w=0), */ \ EGAL(fonction___au_point_u0v2w0,Aload(album,NEUT(NEUT(X_local)),SUCY(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+2,w=0), */ \ EGAL(fonction___au_point_u1v2w0,Aload(album,NEUT(SUCX(X_local)),SUCY(SUCY(Y_local)),NEUT(NEUT(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+2,w=0), */ \ EGAL(fonction___au_point_u0v9w1,Aload(album,NEUT(NEUT(X_local)),NEUT(PREY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=-1,w=+1), */ \ EGAL(fonction___au_point_u1v9w1,Aload(album,NEUT(SUCX(X_local)),NEUT(PREY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=-1,w=+1), */ \ EGAL(fonction___au_point_u0v2w1,Aload(album,NEUT(NEUT(X_local)),SUCY(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+2,w=+1), */ \ EGAL(fonction___au_point_u1v2w1,Aload(album,NEUT(SUCX(X_local)),SUCY(SUCY(Y_local)),NEUT(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+2,w=+1). */ \ EGAL(fonction___au_point_u0v0w9,Aload(album,NEUT(NEUT(X_local)),NEUT(NEUT(Y_local)),NEUT(PREZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=-1), */ \ EGAL(fonction___au_point_u1v0w9,Aload(album,NEUT(SUCX(X_local)),NEUT(NEUT(Y_local)),NEUT(PREZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=-1), */ \ EGAL(fonction___au_point_u0v1w9,Aload(album,NEUT(NEUT(X_local)),NEUT(SUCY(Y_local)),NEUT(PREZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=-1), */ \ EGAL(fonction___au_point_u1v1w9,Aload(album,NEUT(SUCX(X_local)),NEUT(SUCY(Y_local)),NEUT(PREZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=-1), */ \ EGAL(fonction___au_point_u0v0w2,Aload(album,NEUT(NEUT(X_local)),NEUT(NEUT(Y_local)),SUCZ(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=0,w=+2), */ \ EGAL(fonction___au_point_u1v0w2,Aload(album,NEUT(SUCX(X_local)),NEUT(NEUT(Y_local)),SUCZ(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=0,w=+2), */ \ EGAL(fonction___au_point_u0v1w2,Aload(album,NEUT(NEUT(X_local)),NEUT(SUCY(Y_local)),SUCZ(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=0,v=+1,w=+2), */ \ EGAL(fonction___au_point_u1v1w2,Aload(album,NEUT(SUCX(X_local)),NEUT(SUCY(Y_local)),SUCZ(SUCZ(Z_local)))); \ /* Valeur de la fonction aleatoire au noeud (u=+1,v=+1,w=+2). */ \ \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u0v0w0 \ ,fonction___au_point_u9v0w0 \ ,fonction___au_point_u1v0w0 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u1v0w0 \ ,fonction___au_point_u0v0w0 \ ,fonction___au_point_u2v0w0 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u1v1w0 \ ,fonction___au_point_u0v1w0 \ ,fonction___au_point_u2v1w0 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u0v1w0 \ ,fonction___au_point_u9v1w0 \ ,fonction___au_point_u1v1w0 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u0v0w1 \ ,fonction___au_point_u9v0w1 \ ,fonction___au_point_u1v0w1 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u1v0w1 \ ,fonction___au_point_u0v0w1 \ ,fonction___au_point_u2v0w1 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u1v1w1 \ ,fonction___au_point_u0v1w1 \ ,fonction___au_point_u2v1w1 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Du_au_noeud_u0v1w1 \ ,fonction___au_point_u9v1w1 \ ,fonction___au_point_u1v1w1 \ ,pasX \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u0v0w0 \ ,fonction___au_point_u0v9w0 \ ,fonction___au_point_u0v1w0 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u1v0w0 \ ,fonction___au_point_u1v9w0 \ ,fonction___au_point_u1v1w0 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u1v1w0 \ ,fonction___au_point_u1v0w0 \ ,fonction___au_point_u1v2w0 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u0v1w0 \ ,fonction___au_point_u0v0w0 \ ,fonction___au_point_u0v2w0 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u0v0w1 \ ,fonction___au_point_u0v9w1 \ ,fonction___au_point_u0v1w1 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u1v0w1 \ ,fonction___au_point_u1v9w1 \ ,fonction___au_point_u1v1w1 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u1v1w1 \ ,fonction___au_point_u1v0w1 \ ,fonction___au_point_u1v2w1 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dv_au_noeud_u0v1w1 \ ,fonction___au_point_u0v0w1 \ ,fonction___au_point_u0v2w1 \ ,pasY \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u0v0w0 \ ,fonction___au_point_u0v0w9 \ ,fonction___au_point_u0v0w1 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u1v0w0 \ ,fonction___au_point_u1v0w9 \ ,fonction___au_point_u1v0w1 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u1v1w0 \ ,fonction___au_point_u1v1w9 \ ,fonction___au_point_u1v1w1 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u0v1w0 \ ,fonction___au_point_u0v1w9 \ ,fonction___au_point_u0v1w1 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u0v0w1 \ ,fonction___au_point_u0v0w0 \ ,fonction___au_point_u0v0w2 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u1v0w1 \ ,fonction___au_point_u1v0w0 \ ,fonction___au_point_u1v0w2 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u1v1w1 \ ,fonction___au_point_u1v1w0 \ ,fonction___au_point_u1v1w2 \ ,pasZ \ ); \ CALCUL_DE_LA_DERIVEE_EN_UN_POINT(derivee_Dw_au_noeud_u0v1w1 \ ,fonction___au_point_u0v1w0 \ ,fonction___au_point_u0v1w2 \ ,pasZ \ ); \ /* Calcul des derivees partielles en 'u', 'v' et 'w' aux noeuds du cube de base par des */ \ /* differences finies a l'aide des differentes valeurs aux noeuds du maillage... */ \ \ EGAL(derivee_Dv_au_point_uUv0w0 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v0w0 \ ,derivee_Dv_au_noeud_u1v0w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dv_au_point_uUv1w0 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v1w0 \ ,derivee_Dv_au_noeud_u1v1w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dv_au_point_uUv0w1 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v0w1 \ ,derivee_Dv_au_noeud_u1v0w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dv_au_point_uUv1w1 \ ,INTERPOLATION_LINEAIRE(derivee_Dv_au_noeud_u0v1w1 \ ,derivee_Dv_au_noeud_u1v1w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dw_au_point_uUv0w0 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_noeud_u0v0w0 \ ,derivee_Dw_au_noeud_u1v0w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dw_au_point_uUv1w0 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_noeud_u0v1w0 \ ,derivee_Dw_au_noeud_u1v1w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dw_au_point_uUv0w1 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_noeud_u0v0w1 \ ,derivee_Dw_au_noeud_u1v0w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(derivee_Dw_au_point_uUv1w1 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_noeud_u0v1w1 \ ,derivee_Dw_au_noeud_u1v1w1 \ ,ASD1(barycentre,x) \ ) \ ); \ /* Calcul des derivees partielles en 'u', 'v' et 'w' sur des aretes horizontales du cube de */ \ /* base par des interpolations lineaires a partir des sommets voisins (on notera que l'on */ \ /* ne peut utiliser d'interpolation cubique, puisqu'on ne connait pas encore les derivees). */ \ EGAL(derivee_Dw_au_point_uUvVw0 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_uUv0w0 \ ,derivee_Dw_au_point_uUv1w0 \ ,ASD1(barycentre,y) \ ) \ ); \ EGAL(derivee_Dw_au_point_uUvVw1 \ ,INTERPOLATION_LINEAIRE(derivee_Dw_au_point_uUv0w1 \ ,derivee_Dw_au_point_uUv1w1 \ ,ASD1(barycentre,y) \ ) \ ); \ /* Calcul des derivees partielles en 'u', 'v' et 'w' sur des segments verticaux du cube de */ \ /* base par des interpolations lineaires a partir des sommets voisins (on notera que l'on */ \ /* ne peut utiliser d'interpolation cubique, puisqu'on ne connait pas encore les derivees). */ \ \ EGAL(fonction___au_point_uUv0w0 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v0w0 \ ,derivee_Du_au_noeud_u0v0w0 \ ,fonction___au_point_u1v0w0 \ ,derivee_Du_au_noeud_u1v0w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1w0 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v1w0 \ ,derivee_Du_au_noeud_u0v1w0 \ ,fonction___au_point_u1v1w0 \ ,derivee_Du_au_noeud_u1v1w0 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv0w1 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v0w1 \ ,derivee_Du_au_noeud_u0v0w1 \ ,fonction___au_point_u1v0w1 \ ,derivee_Du_au_noeud_u1v0w1 \ ,ASD1(barycentre,x) \ ) \ ); \ EGAL(fonction___au_point_uUv1w1 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_u0v1w1 \ ,derivee_Du_au_noeud_u0v1w1 \ ,fonction___au_point_u1v1w1 \ ,derivee_Du_au_noeud_u1v1w1 \ ,ASD1(barycentre,x) \ ) \ ); \ /* Calcul de la valeur de la fonction sur des aretes horizontales du cube de base... */ \ EGAL(fonction___au_point_uUvVw0 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_uUv0w0 \ ,derivee_Dv_au_point_uUv0w0 \ ,fonction___au_point_uUv1w0 \ ,derivee_Dv_au_point_uUv1w0 \ ,ASD1(barycentre,y) \ ) \ ); \ EGAL(fonction___au_point_uUvVw1 \ ,INTERPOLATION_CUBIQUE(fonction___au_point_uUv0w1 \ ,derivee_Dv_au_point_uUv0w1 \ ,fonction___au_point_uUv1w1 \ ,derivee_Dv_au_point_uUv1w1 \ ,ASD1(barycentre,y) \ ) \ ); \ /* Calcul de la valeur de la fonction sur des segments verticaux du cube de base... */ \ EGAL(fonction___au_point_uUvVwW \ ,cast(INTERPOLATION_CUBIQUE(fonction___au_point_uUvVw0 \ ,derivee_Dw_au_point_uUvVw0 \ ,fonction___au_point_uUvVw1 \ ,derivee_Dw_au_point_uUvVw1 \ ,ASD1(barycentre,z) \ ) \ ) \ ); \ /* Ordre des interpolations cubiques ('-1' est note '9') : */ \ /* */ \ /* */ \ /* v=1 012- - - - - - - -112 */ \ /* | (31) (30) | */ \ /* | | */ \ /* | | */ \ /* | | */ \ /* w=2 | | */ \ /* | | */ \ /* | | */ \ /* | | */ \ /* | (28) (29) | */ \ /* v=0 002- - - - - - - -102 */ \ /* */ \ /* u=0 u=1 */ \ /* */ \ /* */ \ /* v=2 - - - - - - - -021- - - - - - - -121- - - - - - - - */ \ /* | /| (26) (25) |\ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / \ */ \ /* | / | | \ | */ \ /* / [1] \ */ \ /* |/ | | \| */ \ /* v=1 911- - - - - - - -011---------U11---111- - - - - - - -211 */ \ /* | (27) | (07) .(06) | (24) | */ \ /* | . | */ \ /* | | . | | */ \ /* | . | */ \ /* w=1 | | . | | */ \ /* | [2] UV1 | --> UV1 */ \ /* | | . | | . */ \ /* | . | . */ \ /* | (20) | (04) .(05) | (23) | . */ \ /* v=0 901- - - - - - - -001---------U01---101- - - - - - - -201 . */ \ /* |\ | | /| . */ \ /* \ [1] / . */ \ /* | \ | | / | . */ \ /* \ / . */ \ /* | \ | | / | . */ \ /* \ / . */ \ /* | \ | | / | . */ \ /* \ / . */ \ /* | \| (21) (22) |/ | . */ \ /* v=-1 - - - - - - - -091- - - - - - - -191- - - - - - - - . */ \ /* . */ \ /* u=-1 u=0 u=1 u=2 . */ \ /* . */ \ /* . */ \ /* v=2 - - - - - - - -020- - - - - - - -120- - - - - - - - . */ \ /* | /| (18) (17) |\ | . */ \ /* / \ . */ \ /* | / | | \ | [3] UVW */ \ /* / \ . */ \ /* | / | | \ | . */ \ /* / \ . */ \ /* | / | | \ | . */ \ /* / [1] \ . */ \ /* |/ | | \| . */ \ /* v=1 910- - - - - - - -010---------U10---110- - - - - - - -210 . */ \ /* | (19) | (03) .(02) | (16) | . */ \ /* | . | . */ \ /* | | . | | . */ \ /* | . | . */ \ /* w=0 | | . | | . */ \ /* | [2] UV0 | --> UV0 */ \ /* | | . | | */ \ /* | . | */ \ /* | (12) | (00) .(01) | (15) | */ \ /* v=0 900- - - - - - - -000---------U00---100- - - - - - - -200 */ \ /* |\ | | /| */ \ /* \ [1] / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \ | | / | */ \ /* \ / */ \ /* | \| (13) (14) |/ | */ \ /* v=-1 - - - - - - - -090- - - - - - - -190- - - - - - - - */ \ /* */ \ /* u=-1 u=0 u=1 u=2 */ \ /* */ \ /* */ \ /* v=1 019- - - - - - - -119 */ \ /* | (11) (10) | */ \ /* | | */ \ /* | | */ \ /* | | */ \ /* w=-1 | | */ \ /* | | */ \ /* | | */ \ /* | | */ \ /* | (08) (09) | */ \ /* v=0 009- - - - - - - -109 */ \ /* */ \ /* u=0 u=1 */ \ /* */ \ /* */ \ /* v ^ w */ \ /* | / */ \ /* |/ */ \ /* O----> */ \ /* u */ \ /* */ \ /* (on trouve entre parentheses sous la forme 'mn' le numero d'acces a ce noeud de '00' */ \ /* -le premier traite- a '31' -le dernier-). */ \ Eblock \ /* Acces continu cubique a un album flottant... */ #define Aload_point_continu_cubique(fonction___au_point_uUvV,album,Xf,Yf,Zf) \ Bblock \ GAload_point_continu_cubique(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,Aload_point_valide,Astore_point_valide \ ,genere_p \ ,GENP \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define AloadF_point_continu_cubique(fonction___au_point_uUvV,album,Xf,Yf,Zf) \ Bblock \ GAload_point_continu_cubique(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,AloadF_point_valide,AstoreF_point_valide \ ,genere_Float \ ,NEUT \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define Aload_point_continu(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,interpolation_cubique) \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf,Zf} E [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] */ \ /* */ \ Bblock \ Test(IL_FAUT(interpolation_cubique)) \ Bblock \ Aload_point_continu_cubique(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ Eblock \ ATes \ Bblock \ Aload_point_continu_lineaire(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ Eblock \ ETes \ Eblock \ /* Acces continu a un album "standard" (introduit le 20131231164141). */ #define AloadF_point_continu(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,interpolation_cubique) \ /* La possibilite de choisir l'interpolation a ete introduite le 20131231122301... */ \ /* */ \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf,Zf} E [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] */ \ /* */ \ Bblock \ Test(IL_FAUT(interpolation_cubique)) \ Bblock \ AloadF_point_continu_cubique(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ Eblock \ ATes \ Bblock \ AloadF_point_continu_lineaire(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ Eblock \ ETes \ Eblock \ /* Acces continu a un album flottant (introduit sous cette forme le 20131231122301). */ #define AStoreLoad(niveau,album,X,Y,Z,Aload,Astore,type,cast,ecraser) \ Bblock \ Test(IL_FAUT(ecraser)) \ Bblock \ Astore(cast(niveau),album,X,Y,Z); \ Eblock \ ATes \ Bblock \ DEFV(type,INIT(niveau_anterieur,Aload(album,X,Y,Z))); \ Astore(ADD2(cast(niveau),niveau_anterieur),album,X,Y,Z); \ Eblock \ ETes \ Eblock \ /* Procedure introduite le 20140101094041 afin de permettre (en option) de ranger un */ \ /* niveau, mais sans perdre ce qui etait la anterieurement... */ #define GAstore_point_continu_lineaire(fonction___au_point_uUvVwW,album,Xf,Yf,Zf,Aload,Astore,type,cast,ecraser) \ /* L'argument 'fonction___au_point_uUvVwW' est donc le niveau a "etaler" sur les huit */ \ /* sommets entiers du cube courant... */ \ /* */ \ /* ATTENTION : */ \ /* */ \ /* {Xf,Yf,Zf} E [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax] */ \ /* */ \ Bblock \ AloadF_AstoreF_point_continu_lineaire_cubique_donnees_1(Xf,Yf,Zf); \ /* Donnees communes 1 aux interpolations lineaire et cubique. */ \ AloadF_AstoreF_point_continu_lineaire_cubique_initialisation_1(fonction___au_point_uUvVwW,album,Xf,Yf,Zf); \ /* Initialisation de l'interpolation. */ \ \ EGAL(fonction___au_point_u0v0w0 \ ,MUL4(fonction___au_point_uUvVwW,COMP(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)),COMP(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u1v0w0 \ ,MUL4(fonction___au_point_uUvVwW,NEUT(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)),COMP(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u0v1w0 \ ,MUL4(fonction___au_point_uUvVwW,COMP(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)),COMP(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u1v1w0 \ ,MUL4(fonction___au_point_uUvVwW,NEUT(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)),COMP(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u0v0w1 \ ,MUL4(fonction___au_point_uUvVwW,COMP(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)),NEUT(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u1v0w1 \ ,MUL4(fonction___au_point_uUvVwW,NEUT(ASD1(barycentre,x)),COMP(ASD1(barycentre,y)),NEUT(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u0v1w1 \ ,MUL4(fonction___au_point_uUvVwW,COMP(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)),NEUT(ASD1(barycentre,z))) \ ); \ EGAL(fonction___au_point_u1v1w1 \ ,MUL4(fonction___au_point_uUvVwW,NEUT(ASD1(barycentre,x)),NEUT(ASD1(barycentre,y)),NEUT(ASD1(barycentre,z))) \ ); \ /* Calcul de la fonction aux huit coins entiers du cube... */ \ \ AStoreLoad(fonction___au_point_u0v0w0 \ ,album \ ,NEUT(INTX(Xf)),NEUT(INTY(Yf)),NEUT(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u1v0w0 \ ,album \ ,SUCX(INTX(Xf)),NEUT(INTY(Yf)),NEUT(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u0v1w0 \ ,album \ ,NEUT(INTX(Xf)),SUCY(INTY(Yf)),NEUT(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u1v1w0 \ ,album \ ,SUCX(INTX(Xf)),SUCY(INTY(Yf)),NEUT(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u0v0w1 \ ,album \ ,NEUT(INTX(Xf)),NEUT(INTY(Yf)),SUCZ(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u1v0w1 \ ,album \ ,SUCX(INTX(Xf)),NEUT(INTY(Yf)),SUCZ(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u0v1w1 \ ,album \ ,NEUT(INTX(Xf)),SUCY(INTY(Yf)),SUCZ(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ AStoreLoad(fonction___au_point_u1v1w1 \ ,album,SUCX(INTX(Xf)),SUCY(INTY(Yf)),SUCZ(INTZ(Zf)) \ ,Aload,Astore \ ,type,cast \ ,ecraser \ ); \ /* Rangement des huit coins entiers du cube par etalement de 'fonction___au_point_uUvVwW'. */ \ Eblock \ /* Acces continu lineaire a un album flottant (introduit le 20131231122301). */ \ /* */ \ /* ATTENTION, on notera que les procedures 'GAstore_point_continu_lineaire(...)' et */ \ /* 'GAload_point_continu_lineaire(...)' ne sont pas "inverses l'une de l'auutre. En */ \ /* effet 'GAload_point_continu_lineaire(...)' procede a une interpolation lineaire entre les */ \ /* huit sommets du cube courant ; le niveau 'fonction___au_point_uUvV' resultant */ \ /* est donc une COMBINAISON LINEAIRE des valeurs aux huit sommets du cube. Alors qu'avec */ \ /* 'GAstore_point_continu_lineaire(...)' la SOMME des valeurs aux huit sommets du cube */ \ /* est egale "directement" a 'fonction___au_point_uUvV'... */ \ /* */ \ /* Soit donc pour 'GAstore_point_continu_lineaire(...)' : */ \ /* */ \ /* uUvVwW --> (u0v0w0)+(u1v0w0)+(u0v1w0)+(u1v1w0) */ \ /* +(u0v0w1)+(u1v0w1)+(u0v1w1)+(u1v1w1) */ \ /* */ \ /* alors que pour 'GAload_point_continu_lineaire(...)' : */ \ /* */ \ /* uUvVwW <-- a.(u0v0w0)+b.(u1v0w0)+c.(u0v1w0)+d.(u1v1w0) */ \ /* +e.(u0v0w1)+f.(u1v0w1)+g.(u0v1w1)+h.(u1v1w1) */ \ /* */ \ /* */ \ /* ou {a,b,c,d,e,f,g,h} sont dans [0,1]. */ #define Astore_point_continu_lineaire(fonction___au_point_uUvV,album,Xf,Yf,Zf,ecraser) \ Bblock \ GAstore_point_continu_lineaire(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,Aload_point_valide,Astore_point_valide \ ,genere_p \ ,GENP \ ,ecraser \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */ #define AstoreF_point_continu_lineaire(fonction___au_point_uUvV,album,Xf,Yf,Zf,ecraser) \ Bblock \ GAstore_point_continu_lineaire(fonction___au_point_uUvV \ ,album \ ,Xf,Yf,Zf \ ,AloadF_point_valide,AstoreF_point_valide \ ,genere_Float \ ,NEUT \ ,ecraser \ ); \ Eblock \ /* Procedure introduite le 20131231164141... */