_______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* R E S E R V A T I O N D E S I M A G E S E N M E M O I R E : */ /* */ /* */ /* Definitions des termes utilises : */ /* */ /* On utilisera en general trois images, appelees */ /* "imageA1", "imageA2" et "imageR" (le "A" signifiant */ /* 'Argument' et le "R", 'Resultat') ; en effet, les */ /* operations effectuees seront du type : */ /* */ /* imageR <-- (imageA1).OP.(imageA2) */ /* */ /* ou '.OP.' designe un operateur. */ /* */ /* On appelera image "standard", une image dont */ /* les pixels sont generes par "genere_p" via "image", */ /* et image "CHAR"/"Int"/"Float" une image dont les */ /* pixels sont generes par "CHAR"/"Int"/"Float" */ /* via "imageC"/"imageI"/"imageF". */ /* */ /* Rangement en memoire : */ /* */ /* Les images image(X,Y) sont rangees sequentiellement */ /* dans la memoire de la facon suivante image[Y][X] : c'est la */ /* coordonnee "X" qui varie la plus vite ; on trouve donc */ /* ainsi dans l'ordre les points {X,Y} : */ /* */ /* (0,0),(1,0),(2,0),... */ /* (0,1),(1,1),(2,1),... */ /* (0,2),(1,2),(2,2),... */ /* . */ /* . */ /* . */ /* */ /* Ainsi, lors de la sortie d'images sur bande, */ /* elles sont pretes a etre visualisees sur un */ /* support raster ligne a ligne... */ /* */ /* */ /* Author of '$xiii/Images$STR' : */ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #ifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1)); #Aifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_ZONE_DE_SWAP_1 /* Common,DEFV(Fonction,) : bug... */ #ifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1)); #Aifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_NWS3000_NEWSOS_LACT23_EDFR11_HOME11_LIMIT_MEMORY_1 /* Common,DEFV(Fonction,) : bug... */ #ifdef BUG_SYSTEME_C_complexite_01 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_C_complexite_01)); /* ATTENTION : le 20061124142825 '_____BUG_SYSTEME_C_complexite_01' a ete installe ici */ /* depuis 'v $xiipd/fonction.1$FON 20061124142825' car, en effet, ce dernier fichier */ /* ('v $xiipd/fonction.1$FON') n'est pas compile (au passage le directory '$xbipd' */ /* n'existe pas...). */ #Aifdef BUG_SYSTEME_C_complexite_01 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_C_complexite_01 /* Common,DEFV(Fonction,) : bug... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E S E R V A T I O N D E S I M A G E S " S T A N D A R D S " E N F A U S S E S C O U L E U R S : */ /* */ /*************************************************************************************************************************************/ #ifndef NE_PAS_GENERER_ImageA /* Common : la generation de 'ImageA' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,ImageA))); /* Definition de l'image Argument unique. */ #Aifndef NE_PAS_GENERER_ImageA /* Common : la generation de 'ImageA' est facultative... */ #Eifndef NE_PAS_GENERER_ImageA /* Common : la generation de 'ImageA' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ #ifndef NE_PAS_GENERER_ImageA1 /* Common : la generation de 'ImageA1' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,ImageA1))); /* Definition de la premiere image Argument, */ #Aifndef NE_PAS_GENERER_ImageA1 /* Common : la generation de 'ImageA1' est facultative... */ #Eifndef NE_PAS_GENERER_ImageA1 /* Common : la generation de 'ImageA1' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ #ifndef NE_PAS_GENERER_ImageA2 /* Common : la generation de 'ImageA2' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,ImageA2))); /* Definition de la deuxieme image Argument. */ #Aifndef NE_PAS_GENERER_ImageA2 /* Common : la generation de 'ImageA2' est facultative... */ #Eifndef NE_PAS_GENERER_ImageA2 /* Common : la generation de 'ImageA2' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ #ifndef NE_PAS_GENERER_ImageR /* Common : la generation de 'ImageR' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,ImageR))); /* Definition de l'image Resultat unique. */ #Aifndef NE_PAS_GENERER_ImageR /* Common : la generation de 'ImageR' est facultative... */ #Eifndef NE_PAS_GENERER_ImageR /* Common : la generation de 'ImageR' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ #ifndef NE_PAS_GENERER_ImageG /* Common : la generation de 'ImageG' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,ImageG))); /* Definition de l'image Graphique. */ #Aifndef NE_PAS_GENERER_ImageG /* Common : la generation de 'ImageG' est facultative... */ #Eifndef NE_PAS_GENERER_ImageG /* Common : la generation de 'ImageG' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E S E R V A T I O N D E S I M A G E S " S T A N D A R D S " E N V R A I E S C O U L E U R S : */ /* */ /*************************************************************************************************************************************/ #ifndef NE_PAS_GENERER_Image_ROUGE /* Common : la generation de 'Image_ROUGE' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,Image_ROUGE))); /* Definition de l'image ROUGE, */ #Aifndef NE_PAS_GENERER_Image_ROUGE /* Common : la generation de 'Image_ROUGE' est facultative... */ #Eifndef NE_PAS_GENERER_Image_ROUGE /* Common : la generation de 'Image_ROUGE' est facultative... */ #ifndef NE_PAS_GENERER_Image_VERTE /* Common : la generation de 'Image_VERTE' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,Image_VERTE))); /* Definition de l'image VERTE, */ #Aifndef NE_PAS_GENERER_Image_VERTE /* Common : la generation de 'Image_VERTE' est facultative... */ #Eifndef NE_PAS_GENERER_Image_VERTE /* Common : la generation de 'Image_VERTE' est facultative... */ #ifndef NE_PAS_GENERER_Image_BLEUE /* Common : la generation de 'Image_BLEUE' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,Image_BLEUE))); /* Definition de l'image BLEUE. */ #Aifndef NE_PAS_GENERER_Image_BLEUE /* Common : la generation de 'Image_BLEUE' est facultative... */ #Eifndef NE_PAS_GENERER_Image_BLEUE /* Common : la generation de 'Image_BLEUE' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A C C E L E R A T E U R D E L A C O M P I L A T I O N : */ /* */ /* */ /* Definition : */ /* */ /* Afin d'acceler la compilation de */ /* certains modules (et par exemple */ /* 'aleatoires.fon'), certaines valeurs */ /* definies par des '#define' vont etre */ /* etre definies ici sous forme de */ /* variables en memoire... */ /* */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E L ' I N D E X A T I O N D E S I M A G E S : */ /* */ /*************************************************************************************************************************************/ #ifdef __VERSION__INDEXATION_SIMPLIFIEE_A_PRIORI /* Common,DEFV(Fonction,) : avec '__VERSION__'. */ DEFV(Common,DEFV(Logical,_______VERSION__INDEXATION_SIMPLIFIEE_A_PRIORI)); #Aifdef __VERSION__INDEXATION_SIMPLIFIEE_A_PRIORI /* Common,DEFV(Fonction,) : avec '__VERSION__'. */ #Eifdef __VERSION__INDEXATION_SIMPLIFIEE_A_PRIORI /* Common,DEFV(Fonction,) : avec '__VERSION__'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D U F O R M A T D E S I M A G E S : */ /* */ /* */ /* Definition : */ /* */ /* Il y a deux possibilites : soit le */ /* format des images est fige et defini par */ /* (dimX,dimY,dimZ), soit il est variable et */ /* defini par [Xmin,Xmax]x[Ymin,Ymax]x[Zmin,Zmax]. */ /* */ /* */ /*************************************************************************************************************************************/ #if ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ DEFV(Common,DEFV(Logical,ZINT(cHOMOTHETIE_Std_AXES_____compatibilite_20120210,FAUX))); DEFV(Common,DEFV(Logical,ZINT(lHOMOTHETIE_Std_AXES_____compatibilite_20120210,FAUX))); /* Introduit le 20120210184353... */ #Aif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ #Eif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ DEFV(Common,DEFV(Int,ZINT(X,k___Xmin))); DEFV(Common,DEFV(Int,ZINT(Y,k___Ymin))); DEFV(Common,DEFV(Int,ZINT(Z,k___Zmin))); DEFV(Common,DEFV(Int,ZINT(T,k___Tmin))); /* Ces trois definitions, en apparence inutiles, ont ete introduites le 1995021600 a cause */ /* du programme 'v $xrv/champs_5.30$K' ; en effet, dans les procedures 'begin_fuiteQ(...)', */ /* 'begin_colonneQ(...)' et 'begin_ligneQ(...)' a ete introduite la sauvegarde de la */ /* valeur d'hypothetiques coordonnees {X,Y,Z} anterieures, et ce afin de permettre la */ /* recursivite de ces trois procedures. Ainsi, il a fallu creer des valeurs {X,Y,Z} au */ /* niveau le plus bas, c'est-a-dire ici... */ #ifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,ZINT(valider_les_axes_OX_OY_OZ,NE_PAS_VALIDER_LES_AXES_OX_OY_OZ))); /* Cet indicateur precise s'il faut ('VRAI') ou pas ('FAUX') valider les trois axes. Ceci */ /* a ete ajoute le 19980324104621 afin de permettre de manipuler des fichiers "textes" */ /* comme des images definies par : */ /* */ /* Xmin = 0 */ /* Xmax = LongueurFichierTexte-1 */ /* */ /* Ymin = 0 */ /* Ymax = 0 */ /* */ /* ainsi, on pourra, par exemple, faire une sorte de "ou" entre deux textes a l'aide de la */ /* commande 'v $xci/maximum$K'. On notera au passage que le code du '$K_BLANC' est le plus */ /* faible des codes utiles, ce qui fait que ce caractere joue en quelque sorte le role du */ /* zero... */ /* */ /* Le 19980409181211, j'ai aussi pris conscience que tout en conservant la dimension d'une */ /* image (soit 'dimXY'), on pouvait changer en fait les deux couples {Xmin,Xmax} et */ /* {Ymin,Ymax} (en notant encore une fois que 'dimXY' doit etre conserve). Cette operation */ /* permet par exemple de changer la definition du voisinage d'un point (dans les operations */ /* de convolution par exemple) en faisant que ce voisinage ne soit plus fait des veritables */ /* voisins dans l'une des deux directions... */ /* */ /* Le 20120123131422, il y a eu passage de 'VALIDER_LES_AXES_OX_OY_OZ' a */ /* 'NE_PAS_VALIDER_LES_AXES_OX_OY_OZ' ce qui simplifie les choses... */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_forme_de_l_espace_tridimensionnel,COEFFICIENT_DE_FORME_DE_L_ESPACE_TRIDIMENSIONNEL))); /* Ce qui precede fut completer le 20140103185215 par le parametrage possible du coefficient */ /* de forme de l'espace tridimensionnel... */ #Aifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #if ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))) /* Common : */ #Aif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))) /* Common : */ #Eif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_01))) /* Common : */ #if ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ DEFV(Common,DEFV(Int,ZINT(Xmin,k___Xmin))); DEFV(Common,DEFV(Int,ZINT(Xmax,k___Xmax))); /* Definition de l'axe 'OX' a l'aide de l'intervalle [Xmin,Xmax] ; toutes les autres */ /* definitions ('dimX', 'dimX2', 'Xmax2', 'Xcentre', 'MdimXY', 'MdimXYZ', 'dimXY', 'dimXYZ', */ /* 'PLUS_GRANDE_IMAGE_CARREE_INSCRITE' et 'PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE') en */ /* decoulent (voir le fichier 'v $xiiD/definit.1$DEF'). */ DEFV(Common,DEFV(Int,ZINT(Ymin,k___Ymin))); DEFV(Common,DEFV(Int,ZINT(Ymax,k___Ymax))); /* Definition de l'axe 'OY' a l'aide de l'intervalle [Ymin,Ymax] ; toutes les autres */ /* definitions ('dimY', 'dimY2', 'Ymax2', 'Ycentre', 'MdimXY', 'MdimXYZ', 'dimXY', 'dimXYZ', */ /* 'PLUS_GRANDE_IMAGE_CARREE_INSCRITE' et 'PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE') en */ /* decoulent (voir le fichier 'v $xiiD/definit.1$DEF'). */ DEFV(Common,DEFV(Int,ZINT(Zmin,k___Zmin))); DEFV(Common,DEFV(Int,ZINT(Zmax,k___Zmax))); /* Definition de l'axe 'OZ' a l'aide de l'intervalle [Zmin,Zmax] ; toutes les autres */ /* definitions ('dimZ', 'dimZ2', 'Zmax2', 'Zcentre', 'MdimXY', 'MdimXYZ', 'dimXY', 'dimXYZ', */ /* 'PLUS_GRANDE_IMAGE_CARREE_INSCRITE' et 'PLUS_PETITE_IMAGE_CARREE_CIRCONSCRITE') en */ /* decoulent (voir le fichier 'v $xiiD/definit.1$DEF'). */ DEFV(Common,DEFV(Int,ZINT(Tmin,k___Tmin))); DEFV(Common,DEFV(Int,ZINT(Tmax,k___Tmax))); /* Definition de l'axe 'OT' a l'aide de l'intervalle [Tmin,Tmax] (introduit le */ /* 20171219110444). */ #Aif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ #Eif ((defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_02)) || (defined(GESTION_DU_FORMAT_DES_IMAGES_VERSION_03))) /* Common : */ DEFV(Common,DEFV(Int,ZINT(Xmin_reference,k___Xmin))); DEFV(Common,DEFV(Int,ZINT(Xmax_reference,k___Xmax))); DEFV(Common,DEFV(Int,ZINT(Ymin_reference,k___Ymin))); DEFV(Common,DEFV(Int,ZINT(Ymax_reference,k___Ymax))); DEFV(Common,DEFV(Int,ZINT(Zmin_reference,k___Zmin))); DEFV(Common,DEFV(Int,ZINT(Zmax_reference,k___Zmax))); /* Definition des axes 'OX', 'OY' et 'OZ' de reference (introduits le 20170322091625 afin */ /* de pouvoir definir des grandeurs "homothetiques" et par exemple des tailles de paves). */ /* */ /* ATTENTION : je note le 20170322102212 l'existence de plusieurs variables dans */ /* 'v $ximcf/conformes$FON _reference.k___'. Mais, on ne peut pas les faire disparaitre */ /* au profit des six variables ci-dessus car, en effet, si l'on changeait leur definition */ /* (par exemple au profit du format 'Pal' il ne faudrait pas, pour des raisons de */ /* compatibilite, changer celles de 'v $ximcf/conformes$FON _reference.k___'... */ DEFV(Common,DEFV(Float,ZINT(DENORMALISE_AXES_____epsilon,nEPSILON___DENORMALISE_AXES))); /* Petite quantite utilisee dans les fonctions de type '_?DENORMALISE_AXES(...)'. */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_dans_un_carre,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_dans_un_carre,VRAI))); /* Introduit le 20041107140655 afin de pouvoir garantir, par exemple, de generer une periode */ /* d'un sinus le long de 'dimX' et 'dimY' dans 'v $xci/sinus$K GENERATION_DU_CHAMP_DEMANDE'. */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20061128,FAUX))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20061128,FAUX))); /* Introduit le 20061128143233 afin de pouvoir garantir la compatibilite anterieure, si */ /* besoin est... */ /* */ /* Le 20061128160349 je note que la difference entre le mode normal et le mode "compatible" */ /* ne se manifeste que si l'echelle ('v $xiii/mono_image$FON coeffF_2D.POINTERs.echelle.') */ /* relative a la coordonnee concernee ('X' et/ou 'Y') differe de 1... */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____compatibilite_20100210,FAUX))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____compatibilite_20100210,FAUX))); /* Introduit le 20100210104232 afin de pouvoir garantir la compatibilite anterieure, si */ /* besoin est... */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_____coordonnees_normalisees,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_____coordonnees_normalisees,VRAI))); /* Introduit le 20060607174931 afin de pouvoir utiliser directement les coordonnees {X,Y} */ /* des images et ainsi, par exemple, pouvoir generer des tramages via 'v $xci/lineaire$K'. */ /* Ainsi, le 20060608114008, je note que : */ /* */ /* $xci/lineaire$X A=0 B=1 C=0 \ */ /* carre_X_CHAMP_3D=FAUX X_CHAMP_3D_denormalisee=VRAI \ */ /* carre_Y_CHAMP_3D=FAUX Y_CHAMP_3D_denormalisee=VRAI \ */ /* amplificateur=1 translateur=0 \ */ /* Tx=0 Ty=0 \ */ /* modulo=VRAI \ */ /* (...) */ /* */ /* donne une trame horizontale faite d'une alternance de lignes blanches et de lignes */ /* noires a condition de visualiser celle-ci avec la palette '$xiP/plan.01'... */ /* */ /* ATTENTION : 'ACCES_A_LA_COORDONNEE_?_D_UN_CHAMP_3D_____coordonnees_normalisees' demande */ /* 'EST_FAUX(ACCES_A_LA_COORDONNEE_?_D_UN_CHAMP_3D_____coordonnees_dans_un_carre') pour */ /* pouvoir etre activable... */ DEFV(Common,DEFV(Logical,ZINT(AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929,FAUX))); /* Introduit le 20090929092932 afin de pouvoir garantir la compatibilite anterieure, si */ /* besoin est... */ /* */ /* Le 20091203085638 je note un besoin pressant de cette compatibilite avec certains */ /* entrelacs (tous ?) et en particulier 'v $xiirv/STRV.J2' qui si cette image est recalculee */ /* via sa description ('xlistN Debut_listG_STRV_J2 Fin_listG_STRV_J2' dans '$xiirv') voit */ /* apparaitre un grand trefle (a trois feuilles) sous la forme de deux traits sombres et */ /* steompes. Ce phenomene disparait en faisant : */ /* */ /* COORDONNEES_____compatibilite_20090929=FAUX */ /* */ /* pour toutes les occurences de '$xci/trefle$X' (et pas les autres '$X'...). */ /* */ /* Le 20101005093319, en calculant 'v $xiirs/PROK.41', je note le probleme que cette */ /* option pose dans les programmes 'v $xrs/project2D.11$K 20101005092845' et */ /* 'v $xrs/project3D.11$K 20101005092842' pour les images generees anterieurement au */ /* 20090929092932, d'ou les modifications faites alors a ces deux programmes pour y */ /* autoriser par defaut cette compatibilite... */ DEFV(Common,DEFV(Logical,ZINT(AXE_NIVEAUX_OUVERT_FERME_____compatibilite_19951221,FAUX))); /* Introduit le 20091015111754 afin de pouvoir garantir la compatibilite anterieure, si */ /* besoin est... */ /* */ /* Le 20091015114844 la valeur de 'AXE_NIVEAUX_OUVERT_FERME_____compatibilite_20091015' */ /* par defaut est passee de 'FAUX' a 'VRAI' ('v $xiiD/definit.2$DEF 20091015114101')... */ /* */ /* Le 20091015174102, "compatibilite_20091015" a ete change en "compatibilite_19951221" */ /* la date "19951221" etant approximative et resultat d'un 'retrouva $xiiD/definit.2$DEF' */ /* en choisissant la plus ancienne archive utilisant 'BLANC' et non plus 'COULEURS', */ /* c'est-a-dire finalement la premiere. Simultanement, la signification de cet indicateur */ /* a ete inversee, d'ou le retour a la valeur 'FAUX' par defaut... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N I V E A U X D E S I M A G E S E T D E S A L B U M S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(genere_p,ZINT(Niveau____hors_image,NIVEAU_HORS_ECRAN))); DEFV(Common,DEFV(genere_p,ZINT(Niveau____hors_album,NIVEAU_HORS_ECRAN))); /* Introduits le 20070213144659... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E S O U S - E C H A N T I L L O N N A G E D E S I M A G E S : */ /* */ /* */ /* Definition : */ /* */ /* Afin de permettre a toutes les */ /* fonctions de manipuler et traiter */ /* des images de dimensions apparentes */ /* inferieures a [dimX,dimY], les pas */ /* d'echantillonnage des images, soit */ /* [pasX,pasY], sont des donnees pro- */ /* grammables. La dimension apparente */ /* d'une image est alors [dimX/pasX,dimY/pasY]. */ /* De plus, il est possible de transla- */ /* ter ce maillage ; ainsi on pourra */ /* multiplexer plusieurs images sous- */ /* echantillonnees, et creer ainsi des */ /* images "spatio-temporelles", c'est- */ /* a-dire finalement une animation... */ /* */ /* */ /* Utilisation : */ /* */ /* PUSH_ECHANTILLONNAGE; */ /* PULL_ECHANTILLONNAGE; */ /* */ /* permettent de sauvegarder, puis */ /* de restaurer (pasX,pasY,pasZ), et enfin, */ /* */ /* SET_ECHANTILLONNAGE(pas_sur_l_axe_OX,pas_sur_l_axe_OY); */ /* SET_ECHANTILLONNAGE_DE_PROFONDEUR(pas_sur_l_axe_OZ); */ /* */ /* permet de positionner (pasX,pasY) et 'pasZ' (seul). */ /* */ /* PUSH_TRANSLATION; */ /* PULL_TRANSLATION; */ /* */ /* permettent de sauvegarder, puis */ /* de restaurer (translationX,translationY), et enfin, */ /* */ /* SET_TRANSLATION(translation_sur_l_axe_OX,translation_sur_l_axe_OY); */ /* */ /* permet de positionner (translationX,translationY). */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(echantillonnage,FAUX))); /* Cet indicateur precise s'il y a ('VRAI') ou pas ('FAUX') */ /* echantillonnage ; il n'y a pas d'echantillonnage a */ /* chaque fois que : */ /* */ /* pasX==PasX, et */ /* pasY==PasY, et */ /* translationX==TraX, et */ /* translationY==TraY, */ /* */ /* ce qui correspond a l'etat initial, mais, on notera l'absence ici de 'pasZ'... */ DEFV(Common,DEFV(Int,ZINT(pasX,PasX))); /* Pas d'echantillonnage horizontal, */ DEFV(Common,DEFV(Int,ZINT(pasY,PasY))); /* Pas d'echantillonnage vertical, */ DEFV(Common,DEFV(Int,ZINT(pasZ,PasZ))); /* Et enfin, pas d'echantillonnage suivant le troisieme axe, mais traite tout a fait a */ /* part, par rapport a 'pasX' et 'pasY'... */ DEFV(Common,DEFV(Int,ZINT(pasT,PasT))); /* Introduit le 20171219110444... */ DEFV(Common,DEFV(Int,INIT(POINTERi(ApasX),ADRESSE(pasX)))); DEFV(Common,DEFV(Int,INIT(POINTERi(ApasY),ADRESSE(pasY)))); DEFV(Common,DEFV(Int,INIT(POINTERi(ApasZ),ADRESSE(pasZ)))); DEFV(Common,DEFV(Int,INIT(POINTERi(ApasT),ADRESSE(pasT)))); /* Ces trois relais sont destines a permettre un acces aux "vrais" (pasX,pasY,pasZ) meme */ /* lorsque ceux-ci sont "caches" par des variables locales de meme non (par exemple a */ /* l'interieur d'un couple ('begin_image','end_image')... */ DEFV(Common,DEFV(Int,ZINT(translationX,TraX))); /* Translation horizontal du maillage de sous-echantillonnage, */ DEFV(Common,DEFV(Int,ZINT(translationY,TraY))); /* Translation vertical du maillage de sous-echantillonnage, */ DEFV(Common,DEFV(Int,ZINT(translationZ,TraZ))); /* Translation de profondeur du maillage de sous-echantillonnage. */ DEFV(Common,DEFV(Int,ZINT(translationT,TraT))); /* Translation du temps du maillage de sous-echantillonnage. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R C O U R S E N S P I R A L E D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Int,ZINT(SPIRALE_DEFINITION_____facteur_delta_horizontal,FACTEUR_DE_SPIRALE_DELTA_HORIZONTAL))); DEFV(Common,DEFV(Int,ZINT(SPIRALE_DEFINITION_____facteur_delta_vertical,FACTEUR_DE_SPIRALE_DELTA_VERTICAL))); /* Pour choisir la direction initiale d'une spirale. */ /* */ /* ATTENTION, on notera les differents conseils suivants : */ /* */ /* 1-pour un fonctionnement mathematiquement correct, il est imperatif que l'un de ces */ /* deux facteurs soit nul ; implicitement : */ /* */ /* SPIRALE_DEFINITION_____facteur_delta_horizontal = 1 */ /* SPIRALE_DEFINITION_____facteur_delta_vertical = 0 */ /* */ /* */ /* 2-lorsque l'un de ces deux facteurs est plus grand que 1, pour une utilisation dans */ /* l'une des fonctions 'Pconvolution(...)' et 'PFconvolution(...)', on aura interet a */ /* utiliser le cumul total des ponderations pour renormaliser (et non pas le cumul des */ /* ponderations utilisees). Il y a pour ce faire l'indicateur suivant : */ /* */ /* Pconvolution_____normaliser_uniquement_avec_les_ponderations_utilisees */ /* */ /* qui controle ce choix (sachant qu'il est implicitement 'VRAI'). Dans le cas contraire, */ /* on risque de voir apparaitre des discontinuites dans l'image resultante ; en particulier */ /* cela peut etre vu avec l'image '$xiio/MIRE' convoluee avec '$xci/convol.01$X' avec, par */ /* exemple, les parametres suivants : */ /* */ /* points=81 */ /* spirale_horizontal=32 */ /* ponderations_utiles=VRAI */ /* */ /* ce qui donne une luminance non monotone de la gauche vers la droite... */ DEFV(Common,DEFV(Int,ZINT(SPIRALE_PARCOURS_____sinus_de_l_angle_de_la_rotation,UN))); /* Pour definir la rotation de parcours d'une spirale : */ /* */ /* +1 : +pi/2 */ /* -1 : -pi/2 */ /* */ DEFV(Common,DEFV(Int,ZINT(SPIRALE_DEPLACEMENT_____amplitude_horizontale,UN))); DEFV(Common,DEFV(Int,ZINT(SPIRALE_DEPLACEMENT_____amplitude_verticale__,UN))); DEFV(Common,DEFV(Int,ZINT(SPIRALE_CIRCULAIRE_DEPLACEMENT_ET_PARCOURS_____amplitude_horizontale,UN))); DEFV(Common,DEFV(Int,ZINT(SPIRALE_CIRCULAIRE_DEPLACEMENT_ET_PARCOURS_____amplitude_verticale__,UN))); /* Parametres introduits le 20151109145126 afin de simuler un pas de parcours des spirales */ /* dans 'SPIRALE_DEPLACEMENT(...)' et 'SPIRALE_CIRCULAIRE_DEPLACEMENT_ET_PARCOURS(...)' */ /* respectivement... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E F I L T R A G E D E S N I V E A U X : */ /* */ /* */ /* Definition : */ /* */ /* Un certain nombre de traitements */ /* pourront affecter un niveau apres */ /* son calcul : */ /* */ /* 1 - le "masque", */ /* 2 - l'"ecrasement", */ /* 3 - la "substitution", */ /* 4 - le "calibrage", */ /* 5 - une fonction variable "Vf". */ /* */ /* Toutes ces operations pourront */ /* etre activees ou desactivees glo- */ /* balement grace a l'indicateur */ /* introduit ici. */ /* */ /* */ /* Utilisation : */ /* */ /* PUSH_FILTRAGE; */ /* PULL_FILTRAGE; */ /* */ /* permettent de sauvegarder, puis */ /* de restaurer l'etat courant du */ /* filtrage des niveaux, et enfin, */ /* */ /* SET_FILTRAGE(ACTIF ou INACTIF); */ /* */ /* puis : */ /* */ /* PUSH_OPTIMISATION; */ /* PULL_OPTIMISATION; */ /* */ /* permettent de sauvegarder, puis */ /* de restaurer l'etat courant de */ /* l'optimisation portant sur l'uti- */ /* lisation des substitutions seules, */ /* et enfin : */ /* */ /* SET_OPTIMISATION(VRAI ou FAUX); */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(etat_Filtrage_niveaux,INACTIF))); /* L'indicateur 'etat_Filtrage_niveaux' controle globalement les transformations */ /* portant sur un niveau ; il prend deux valeurs 'ACTIF' et 'INACTIF' (cet */ /* etat initial inhibe globalement l'ensemble des transformations). */ DEFV(Common,DEFV(Logical,ZINT(ne_faire_que_les_substitutions,FAUX))); /* L'indicateur 'ne_faire_que_les_substitutions' n'a de sens que si l'indicateur */ /* 'etat_Filtrage_niveaux' est 'ACTIF' ; il indique alors si le filtrage doit etre */ /* complet (il vaut alors 'FAUX') ou partiel, et ne porter alors que sur les */ /* substitutions (il vaut alors 'VRAI'). L'etat implicite donne acces a l'ensemble */ /* des filtrages ; dans l'etat contraire, le fonctionnement est plus rapide... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E M A S Q U E : */ /* */ /* */ /* Definition : */ /* */ /* Les acces aux images par les fonctions */ /* du type "load" ('load_point()',...), */ /* "store" ('store_point()',...) et de */ /* "parcours" ('traite_image_...') sont */ /* partiellement (point par point) inhibables */ /* a l'aide de ce que l'on appelera un */ /* "masque". Il s'agit d'une image parti- */ /* culiere ; lorsque l'on accede a un */ /* point {X,Y} d'une image quelconque, */ /* on teste la valeur du point {X,Y} du */ /* "masque", et suivant sa valeur et la */ /* fonction demandee ("load", "store" ou */ /* "acces"), l'acces a lieu ou pas... */ /* */ /* */ /* Utilisation : */ /* */ /* DEMASQUE_IMAGES; */ /* MASQUE_IMAGES(seuil); */ /* MASQUE_IMAGES_PORTEE(seuil,portee); */ /* */ /* permettent de mettre hors fonction */ /* ou bien d'activer le masquage avec */ /* un certain seuil (les points {X,Y} */ /* dont Masque(X,Y) associe est supe- */ /* rieur ou egal a "seuil" ne sont pas */ /* masques) et une certaine "portee" */ /* (c'est-a-dire suivant la fonction */ /* -"load", "store" ou "parcours"- */ /* demandee ; 'MASQUE_IMAGES a implicitement */ /* une portee limitee a la fonction de */ /* "parcours"), et enfin, */ /* */ /* PUSH_MASQUE; */ /* PULL_MASQUE; */ /* */ /* permettent de sauvegarder et de */ /* restaurer (respectivement) l'etat */ /* du masque. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Statique,DEFV(image,Masque))); /* Le "masque" est une image "standard" comme une autre... */ DEFV(Common,DEFV(Logical,ZINT(Masque_____etat,INACTIF))); /* L'indicateur 'Masque_____etat' controle l'activite du "masque" ; il peut */ /* donc prendre deux valeurs 'ACTIF' et 'INACTIF'. */ DEFV(Common,DEFV(genere_p,ZINT(Masque_____seuil,NOIR))); DEFV(Common,DEFV(binaire,ZINT(Masque_____portee,MASQUER_PARCOURS))); /* Lorsque le "masque" est actif (Masque_____etat=ACTIF), l'acces au point {X,Y} */ /* n'a lieu que si : Masque(X,Y) >= seuil et si le masque de "portee" contient */ /* le bit (a 1) de la fonction demandee ("load", "store" ou "parcours"). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E M A R Q U E U R : */ /* */ /* */ /* Definition : */ /* */ /* Pour certains algorithmes, tels le */ /* remplissage de contour, il est neces- */ /* saire de marquer les points par les- */ /* quels on est passe. C'est le role */ /* des donnees et definition qui suivent. */ /* */ /* */ /* Utilisation : */ /* */ /* MARQUAGE_VALIDATION_ET_INITIALISATION; */ /* */ /* permet de verifier que la liste de */ /* substitution courante si elle est */ /* active est compatible avec les */ /* niveaux de marquage. */ /* */ /* MARQUAGE_POINT(x,y); */ /* */ /* permet de memoriser le passage par */ /* le point {x,y}. */ /* */ /* TEST_POINT_MARQUE(x,y); */ /* TEST_POINT_NON_MARQUE(x,y); */ /* */ /* qui permettent de savoir si le point */ /* {x,y} a deja ete atteint ou pas... */ /* */ /* */ /*************************************************************************************************************************************/ #ifndef NE_PAS_GENERER_Marqueur /* Common : la generation de 'Marqueur' est facultative... */ DEFV(Common,DEFV(Statique,DEFV(image,Marqueur))); /* Le "marqueur" est une image "standard" comme une autre... */ #Aifndef NE_PAS_GENERER_Marqueur /* Common : la generation de 'Marqueur' est facultative... */ #Eifndef NE_PAS_GENERER_Marqueur /* Common : la generation de 'Marqueur' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E Z - B U F F E R : */ /* */ /* */ /* Definition : */ /* */ /* Une image de type 'imageF' va */ /* etre definie ici. Elle contiendra */ /* lorsque cela sera necessaire la */ /* troisieme coordonnee ('Z') de */ /* chaque point {X,Y}. Ainsi, elle */ /* donnera a tout instant en chaque */ /* point {X,Y}, la profondeur du point */ /* le plus proche de l'observateur */ /* marque. Un 'bypath' existe : s'il */ /* vaut +INFINI, on trace toujours, */ /* alors que pour -INFINI, on fait le */ /* test complet, et on ne trace que si */ /* Z >= Z-Buffer... */ /* */ /* On notera que l'axe 'OZ' va */ /* d'arriere en avant. */ /* */ /* */ /* Nota : */ /* */ /* Lorsque le 'Z-Buffer est inactif, */ /* au lieu de le mettre a jour, on procede */ /* au comptage des "pseudo-collisions", */ /* c'est-a-dire des cas tels que : */ /* */ /* Z_Buffer(X,Y) + Zavant > Z > Z_Buffer(X,Y) - Zarriere */ /* */ /* ou P(X,Y,Z) est point a tester et a condition */ /* que le point {X,Y} ne soit pas masque. */ /* */ /* */ /*************************************************************************************************************************************/ #ifndef NE_PAS_GENERER_Z_Buffer /* Common : la generation de 'Z_Buffer' est facultative... */ DEFV(Common,DEFV(Logical,ZINT(Z_Buffer_____actif,VRAI))); /* Cet indicateur indique si le 'Z-Buffer' est actif ('VRAI'), auquel cas on le met */ /* a jour lorsqu'il est accede, ou bien inactif ('FAUX'), auquel cas il n'est pas */ /* mis a jour, et seules sont comptees les pseudo-collisions, c'est-a-dire les cas */ /* tels que, soit P(X,Y,Z) le point a marquer : il y a pseudo-collision si : */ /* Z_Buffer(X,Y) + Zavant > Z > Z_Buffer(X,Y) - Zarriere. */ DEFV(Common,DEFV(Logical,ZINT(Z_Buffer_____mettre_a_jour,VRAI))); /* Lorsque le 'Z-Buffer' est actif (voir l'indicateur 'Z_Buffer_____actif' ci-dessus), cet */ /* indicateur precise si malgre tout le 'Z-Buffer' doit etre mis a jour ('VRAI'), ou bien */ /* laisse en l'etat ('FAUX'). Ceci peut etre utilise, par exemple, lorsque l'on manipule */ /* sequentiellement les trois composantes 'ROUGE', 'VERTE' et 'BLEUE' d'une image en vraies */ /* couleurs ; on fera : */ /* */ /* NE_PAS_METTRE_A_JOUR_LE_Z_Buffer; */ /* TRAITER_LA_COMPOSANTE(ROUGE); */ /* TRAITER_LA_COMPOSANTE(VERTE); */ /* METTRE_A_JOUR_LE_Z_Buffer; */ /* TRAITER_LA_COMPOSANTE(BLEUE); */ /* */ /* ainsi le 'Z-Buffer' ne sera mis a jour qu'une seule fois pour un meme point des trois */ /* composantes, et la coordonnee 'Z' testee le sera toujours par rapport a l'etat anterieur */ /* du 'Z-Buffer' (c'est-a-dire tel qu'il etait avant 'TRAITER_LA_COMPOSANTE(ROUGE)'). */ /* */ /* Mais ATTENTION : la procedure 'NE_PAS_METTRE_A_JOUR_LE_Z_Buffer' doit etre utilisee avec */ /* la plus grande precaution. En effet, s'il y a par exemple plusieurs objets 'ROUGE' qui se */ /* cachent les uns les autres, le 'Z-Buffer' n'etant pas mis a jour pour le 'ROUGE', il n'y */ /* aura pas elimination des lignes cachees, et cette meme composante 'ROUGE' sera donc */ /* incorrecte, et incoherente vis a vis de la composante 'BLEUE'. Enfin, ce qui a ete dit */ /* pour le 'ROUGE' vaut aussi pour le 'VERTE'... */ DEFV(Common,DEFV(Statique,DEFV(imageF,Z_Buffer))); /* Definition du 'Z-buffer'. */ DEFV(Common,DEFV(Logical,INIT(Z_Buffer_____etat,INVALIDE))); /* Cet indicateur indique si le contenu du 'Z-Buffer' est significatif ('VALIDE') */ /* ou pas ('INVALIDE') ; il est positionne par 'IloadF_image' */ /* et 'IFinitialisation'. */ DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_____minimum,F_INFINI))); DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_____maximum,F_MOINS_L_INFINI))); /* Definition du minimum et du maximum du 'Z-Buffer' au cours de son exploitation... */ /* On notera que ces ceux variables ont ete introduites parce que dans le cas du 'Z-Buffer' */ /* il est impossible d'utiliser la fonction 'IFnivo_extrema(...)' qui donnerait en ce qui */ /* concerne 'niveau_minimum' la valeur d'initialisation (ce qui serait de peu d'interet...). */ DEFV(Common,DEFV(Logical,INIT(Z_Buffer_____test_strict,FAUX))); /* Cet indicateur introduit le 20100223172401 permet de choisir entre 'IFGT(...)' ('VRAI') */ /* et 'IFGE(...)' ('FAUX'), ce dernier etant le test par defaut pour des raisons de */ /* compatibilite anterieure... */ DEFV(Common,DEFV(Statique,DEFV(imageF,Z_Buffer_accumule))); /* Definition du 'Z-buffer accumule'. Celui-ci a ete introduit le 20010722100154 ; il */ /* correspond au 'Z-buffer', mais a la difference de celui-ci, il n'est jamais reinitialise. */ /* Cela permet donc une accumulation du 'Z-buffer' au cours de l'execution d'un progarmme, */ /* ce qui permet, par exemple, de generer une "geometrie tridimensionnelle" a l'aide d'une */ /* sorte de principe ergodique concernant les objets manipules ; un exemple de ceci peut */ /* etre vu dans 'v $xrk/rdn_walk.52$K Z_Buffer_accumule'. */ DEFV(Common,DEFV(Logical,INIT(Z_Buffer_accumule_____etat,INVALIDE))); /* Cet indicateur indique si le contenu du 'Z-Bufferaccumule ' est significatif ('VALIDE') */ /* ou pas ('INVALIDE') ; il est positionne par 'IFinitialisation'. */ DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_accumule_____minimum,F_INFINI))); DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_accumule_____maximum,F_MOINS_L_INFINI))); /* Definition du minimum et du maximum du 'Z-Buffer accumule' au cours de son exploitation. */ /* On notera que ces ceux variables ont ete introduites parce que dans le cas du 'Z-Buffer' */ /* il est impossible d'utiliser la fonction 'IFnivo_extrema(...)' qui donnerait en ce qui */ /* concerne 'niveau_minimum' la valeur d'initialisation (ce qui serait de peu d'interet...). */ DEFV(Common,DEFV(Float,ZINT(Z_Buffer_____bypath,F_MOINS_L_INFINI))); /* 'bypath' du 'Z-Buffer' initialise de facon a l'invalider, et donc a faire le */ /* test complet... */ DEFV(Common,DEFV(Float,ZINT(Z_Buffer_____avant,FLOT(MOIT(KK___dimZ))))); /* Borne relative "avant" de detection des pseudo-collisions. */ DEFV(Common,DEFV(Float,ZINT(Z_Buffer_____arriere,FLOT(MOIT(KK___dimZ))))); /* Borne relative "arriere" de detection des pseudo-collisions. */ DEFV(Common,DEFV(Positive,INIT(Z_Buffer_____compteur_des_pseudo_collisions,ZERO))); /* Compteur des pseudo-collisions dans le Z_Buffer ; ces trois variables n'ont de sens */ /* que lorsque le 'Z-Buffer' n'est pas actif... */ #Aifndef NE_PAS_GENERER_Z_Buffer /* Common : la generation de 'Z_Buffer' est facultative... */ #Eifndef NE_PAS_GENERER_Z_Buffer /* Common : la generation de 'Z_Buffer' est facultative... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* " A R R O N D I " D ' U N N I V E A U F L O T T A N T : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(GENP_____epsilon_des_fonctions_de_ce_type,nEPSILON_GENP))); /* Petite quantite utilisee dans les fonctions de type 'GENP(...)'. */ DEFV(Common,DEFV(Float,ZINT(epsilon_de_LISSAGE_LISTE_DE_SUBSTITUTION,nEPSILON_GENP))); /* Petite quantite utilisee dans 'v $xiii/Images$DEF LISSAGE_LISTE_DE_SUBSTITUTION' et */ /* introduit le 20040910140509. Une valeur nulle permet d'assurer la compatibilite */ /* anterieure ('v $xigP/.INTERPOLE$Y EpsilonLissage'). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E C A L I B R A G E : */ /* */ /* */ /* Definition : */ /* */ /* Lors des rangements des points dans */ /* les matrices "images", leurs niveaux, */ /* suivant la valeur des indicateurs qui */ /* suivront, sont calibres. Trois calibra- */ /* ges sont prevus : */ /* */ /* 1 - "modulo" : le niveau est ramene */ /* dans le segment [noir,blanc], */ /* */ /* 2 - "seuillage bas" : tous les niveaux */ /* inferieurs au "noir" sont mis a "noir", */ /* */ /* 3 - "seuillage haut" : tous les niveaux */ /* superieurs au "blanc" sont mis a "blanc". */ /* */ /* */ /* Utilisation : */ /* */ /* SEUILLAGE_BAS_INACTIF; */ /* SEUILLAGE_BAS_ACTIF(GENP(seuil)); */ /* SEUILLAGE_HAUT_INACTIF; */ /* SEUILLAGE_HAUT_ACTIF(GENP(seuil)); */ /* SEUILLAGE_MODULO_INACTIF; */ /* SEUILLAGE_MODULO_ACTIF(GENP(origine),GENP(extremite)); */ /* */ /* permettent d'inactiver ou d'activer */ /* respectivement les trois seuillages */ /* disponibles. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(etat_Cmodulo,INACTIF))); /* Cet indicateur controle le fonctionement du calibrage "modulo". */ DEFV(Common,DEFV(genere_p,ZINT(seuil_Corigine,NOIR))); /* Valeur du niveau origine du "modulo". */ DEFV(Common,DEFV(genere_p,ZINT(seuil_Cextremite,BLANC))); /* Valeur du niveau extremite du "modulo". */ DEFV(Common,DEFV(Logical,ZINT(etat_Cbas,INACTIF))); /* Cet indicateur controle le fonctionnement du calibrage "seuil bas". */ DEFV(Common,DEFV(genere_p,ZINT(seuil_Cbas,NOIR))); /* Valeur du niveau de "seuillage bas". */ DEFV(Common,DEFV(Logical,ZINT(etat_Chaut,INACTIF))); /* Cet indicateur controle le fonctionnement du calibrage "seuil haut". */ DEFV(Common,DEFV(genere_p,ZINT(seuil_Chaut,BLANC))); /* Valeur du niveau de "seuillage haut". */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E P L A N C H E R : */ /* */ /* */ /* Definition : */ /* */ /* Nous allons definir la notion de */ /* "plancher" ; en effet, lorsque l'on */ /* marque un point dans une image a fond */ /* NOIR, si ce point est lui-meme NOIR, il */ /* n'apparaitra pas. D'ou ici cette definition */ /* d'un NOIR_PLANCHER utilise pour le marquage */ /* des points. Celui-ci est variable, et fonction */ /* des listes de SUBSTITUTION utilisees... */ /* */ /* */ /* Utilisation : */ /* */ /* SET_NOIR_PLANCHER(niveau); */ /* */ /* permettent de positionner le NOIR_PLANCHER */ /* courant... */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(genere_p,ZINT(noir_plancher_substitution,NOIR_PLANCHER))); /* Valeur du niveau a ne pas franchir bien souvent ; on notera qu'un '#define' en */ /* majuscule 'NOIR_PLANCHER_SUBSTITUTION' a ete defini afin de ne pas avoir a modifier */ /* les fichiers le referencant... */ DEFV(Common,DEFV(genere_p,ZINT(noir_plancher_des_vecteurs,NOIR_PLANCHER))); /* Niveau minimal (excepte le vrai 'NOIR') utilise lors du marquage des points d'un */ /* vecteur ; cette variable est introduite pour permettre une generation correcte des */ /* mires de barres. On notera que 'noir_plancher_des_vecteurs' se situe dans le fichier */ /* '$xiii/Images$STR' et non pas dans '$xiii/vecteurs$FON' car en effet elle est referencee */ /* d'une part par 'SET_FILTRAGE(INACTIF)' et d'autre part par la fonction "incontournable" */ /* 'Nsubstitution(...)' via la procedure 'CAS_ACCES_LISTE_DE_SUBSTITUTION(...)' ; ainsi */ /* cette variable est positionnee meme si les fonctions vectorielles ne sont par utilisees. */ DEFV(Common,DEFV(Int,ZINT(pas_entre_CLIPPING_INTENSITE_et_MIN_INTENSITE,PAS_COULEURS))); /* Pas entre 'CLIPPING_INTENSITE' et 'MIN_INTENSITE'. Ce parametre a ete introduit le */ /* 19961007164935 afin de permettre de forcer completement a 'NOIR' les points d'une */ /* montagne correspondant a des points 'NOIR's de sa texture ('v $xiii/montagnes$FON'). */ /* On notera que cette definition est situee dans ce fichier parce qu'elle est utile aux */ /* differents modules separes de '$xiii/montagnes$FON'... */ DEFV(Common,DEFV(Float,ZINT(minimum_normalise_du_cosinus_d_une_normale,COORDONNEE_BARYCENTRIQUE_MINIMALE))); DEFV(Common,DEFV(Float,ZINT(maximum_normalise_du_cosinus_d_une_normale,COORDONNEE_BARYCENTRIQUE_MAXIMALE))); /* Definit le segment (a priori [0,1]) dans lequel un cosinus de normale est renormalise. */ /* On notera que ces definitions sont situees dans ce fichier parce qu'elles sont utiles aux */ /* differents modules separes de '$xiii/montagnes$FON'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E S U B S T I T U T I O N : */ /* */ /* */ /* Definition : */ /* */ /* Nous allons definir la notion de */ /* substitution ; lorsqu'un niveau a ete */ /* fixe pour un point d'une image, et ce */ /* apres les fonctions 'Vf' et le "cali- */ /* brage", il passe par une phase de */ /* substitution, ou ce niveau calcule */ /* est un indice dans un vecteur qui donne */ /* le niveau a attribuer au point. */ /* Ce vecteur, est lui-meme range dans */ /* une matrice, ce qui permet d'avoir */ /* plusieurs listes de substitution */ /* accessibles simultanement. Enfin, une */ /* matrice "inverse" est utilisee lors */ /* des 'loadS_point's. */ /* */ /* */ /* Utilisation : */ /* */ /* PUSH_SUBSTITUTION; */ /* PULL_SUBSTITUTION; */ /* */ /* permettent de sauvegarder, puis */ /* de restaurer la substitution */ /* courante, et enfin, */ /* */ /* SUBSTITUTION(L_SUBSTITUTION_XX); */ /* */ /* permet de choisir la substitu- */ /* tion courante parmi la liste */ /* suivante : */ /* */ /* L_SUBSTITUTION_NEUTRE, */ /* L_SUBSTITUTION_01, */ /* L_SUBSTITUTION_02, */ /* L_SUBSTITUTION_11, */ /* L_SUBSTITUTION_12, */ /* L_SUBSTITUTION_13, */ /* L_SUBSTITUTION_14, */ /* L_SUBSTITUTION_21, */ /* L_SUBSTITUTION_22, */ /* L_SUBSTITUTION_23, */ /* L_SUBSTITUTION_24, */ /* L_SUBSTITUTION_25, */ /* L_SUBSTITUTION_26, */ /* L_SUBSTITUTION_27, */ /* L_SUBSTITUTION_28, */ /* L_SUBSTITUTION_31, */ /* L_SUBSTITUTION_32, */ /* L_SUBSTITUTION_33, */ /* L_SUBSTITUTION_34, */ /* L_SUBSTITUTION_35, */ /* L_SUBSTITUTION_36, */ /* L_SUBSTITUTION_37, */ /* L_SUBSTITUTION_38, */ /* L_SUBSTITUTION_39, */ /* L_SUBSTITUTION_3A, */ /* L_SUBSTITUTION_3B, */ /* L_SUBSTITUTION_3C, */ /* L_SUBSTITUTION_3D, */ /* L_SUBSTITUTION_3E, */ /* L_SUBSTITUTION_3F, */ /* L_SUBSTITUTION_3G, */ /* L_SUBSTITUTION_FF, */ /* L_SUBSTITUTION_FE, */ /* L_SUBSTITUTION_FC, */ /* L_SUBSTITUTION_F8, */ /* L_SUBSTITUTION_F0, */ /* L_SUBSTITUTION_E0, */ /* L_SUBSTITUTION_C0, */ /* L_SUBSTITUTION_80, */ /* L_SUBSTITUTION_ROUGE, */ /* L_SUBSTITUTION_VERTE, */ /* L_SUBSTITUTION_BLEUE, */ /* L_SUBSTITUTION_VARIABLE, */ /* L_SUBSTITUTION_HISTOGRAMME, */ /* L_SUBSTITUTION_SOLAR, */ /* L_SUBSTITUTION_X_WINDOW. */ /* */ /* et, */ /* */ /* MODIFICATION_LISTE_DE_COLORIAGE_X_WINDOW(niveau,niveau_substitue); */ /* MODIFICATION_LISTE_DE_SUBSTITUTION(niveau,niveau_substitue); */ /* MODIFICATION_LISTE_DE_COLORIAGE(niveau,niveau_substitue_R,niveau_substitue_V,niveau_substitue_B); */ /* */ /* permettent de modifier la liste */ /* "VARIABLE" element par element, */ /* ainsi que la liste dite de */ /* "COLORIAGE" ou triplet (ROUGE,VERTE,BLEUE) */ /* qui fait office de "look-up tables".. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,INIT(init_substitution,FAUX))); /* Cet indicateur est rendu necessaire, par le fait que la matrice des */ /* substitution ne peut etre initialisee a la compilation... Tant qu'il */ /* est a l'etat 'FAUX', cela signifie que les listes de substitution */ /* n'ont pas ete initialisees. */ DEFV(Common,DEFV(Int,ZINT(num_liste_de_substitution,L_SUBSTITUTION_NEUTRE))); /* Cette variable donne le numero de la liste de substitution courante ; en */ /* standard, on utilise la liste qui ne fait rien... */ DEFV(Common,DEFV(Int,ZINT(num_liste_de_substitution_ROUGE,L_SUBSTITUTION_ROUGE_BASIC))); DEFV(Common,DEFV(Int,ZINT(num_liste_de_substitution_VERTE,L_SUBSTITUTION_VERTE_BASIC))); DEFV(Common,DEFV(Int,ZINT(num_liste_de_substitution_BLEUE,L_SUBSTITUTION_BLEUE_BASIC))); /* Ces trois variables permettent de definir une permutation (et meme quelque chose de */ /* beucoup plus general) des trois listes de COLORIAGE. */ DEFV(Common,DEFV(Logical,DTb1(liste_d_autorisation_de_substitution_des_niveaux,COULEURS))); /* Ce vecteur permet d'autoriser la substitution ('AUTORISE') d'un niveau quelconque, ou */ /* de l'interdire ('INTERDIT'), meme quand le mecanisme de substitution est actif. */ DEFV(Common,DEFV(genere_p,DTb2(listes_de_substitution,NOMBRE_DE_SUBSTITUTIONS,COULEURS))); /* Matrice des substitutions : */ /* le premier indice donne le numero de la liste de substitutions, */ /* le second indice donne le niveau a substituer. */ DEFV(Common,DEFV(genere_p,DTb2(listes_inverses_de_substitution,NOMBRE_DE_SUBSTITUTIONS,COULEURS))); /* Matrice "inverse" des substitutions : */ /* elle donne l'inverse de la matrice de substitution, et est donc */ /* utilise lors des 'load_point'. */ DEFV(Common,DEFV(Logical,DTb2(blocage_des_listes_de_substitution,NOMBRE_DE_SUBSTITUTIONS,COULEURS))); /* Matrice des blocage des listes de substitutions ; elle est "parallele" a la */ /* matrice des substitutions, et chaque entree peut prendre les deux valeurs */ /* 'AUTORISE' (etat initial) et 'INTERDIT' qui indique si l'on peut ou pas */ /* modifier l'entree correspondante... */ DEFV(Common,DEFV(Int,ZINT(pas_COULEURS,PAS_COULEURS))); /* Pas de parcours des listes de substitution ; mais attention, contrairement au sous- */ /* echantillonnage spatial (pasX,pasY), 'pas_COULEURS' n'est pas utilises systematiquement, */ /* et d'ailleurs plutot exceptionnellement... */ DEFV(Common,DEFV(Logical,ZINT(interpoler_les_listes_de_substitution_entre_D2_et_A3,VRAI))); /* Cet indicateur a ete introduit le 19970929115853 a cause de problemes rencontres dans */ /* 'v $xigP/.INTERPOLE$Y Fderivee'. En effet, etant donnee la methode calcul des derivees */ /* au points de depart 'D' et d'arrivee 'A' par difference de valeurs en 2 points, ces */ /* derivees sont tres frequemment nulles (par exemple, 'v $xigP/abso.45$Z') car les valeurs */ /* en ces points (appeles {1,2} et {3,4} respectivement sans '$xigP/.INTERPOLE$Y') sont la */ /* plupart du temps egales. Le facteur multiplicatifs des derivees 'facteur_des_derivees' */ /* utilise dans 'LISSAGE_LISTE_DE_SUBSTITUTION(...)' est donc alors d'aucune utilite, */ /* puisque quelle que soit sa valeur s'il multiplie une valeur nulle, elle le reste. La */ /* solution est donc la suivante : en plus d'interpoler entre 'D2' et 'A3' (etat par defaut) */ /* la possibilite de le faire entre 'D1' et 'A4' est offerte le 19970929115853. Ainsi, on */ /* garde le principe anterieur, mais dorenavant, il est possible de faire que les niveaux */ /* 'D2' et 'A3' ne soient utilises que pour le calcul des derivees sans figurer ensuite dans */ /* la liste de 'SUBSTITUTION' que l'on est en train d'interpoler puisque cette operation */ /* aura lieu entre 'D1' et 'A4', et que 'D2' et 'A3' sont inclus dans [D1,A4]. En resume, */ /* il y a donc deux modes d'interpolation disponibles : */ /* */ /* D2 --> A3 : les niveaux definis en {D1,D2,A3,A4} figurent tel quel dans */ /* la palette. */ /* */ /* D1 --> A4 : seuls les niveaux definis en {D1,A4} figurent tel quel dans */ /* la palette alors que ceux qui sont definis en {D2,A3} ne */ /* servent qu'a definir les derivees en {D1,D2} et {A3,A4} */ /* respectivement ; les niveaux figurant en {D2,A3} a la fin */ /* du processus resultant de l'interpolation. */ /* */ /* Enfin, pour des raisons de compatibilite anterieure, le mode 'D2 --> A3' est le mode */ /* par defaut... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D ' E C R A S E M E N T : */ /* */ /* */ /* Definition : */ /* */ /* Avant les operations 'Vf', */ /* "calibrage" et "substitution" */ /* d'un point de coordonnees {X,Y}, */ /* on regarde le niveau anterieur ; */ /* ce niveau anterieur est un index */ /* dans un vecteur d'autorisation */ /* indiquant si l'on a le droit */ /* de l'ecraser ou pas... */ /* */ /* */ /* Utilisation : */ /* */ /* ECRASEMENT_AUTORISE(niveau); */ /* ECRASEMENT_INTERDIT(niveau); */ /* */ /* qui permettent d'autoriser et */ /* d'interdire individuellement */ /* chaque niveau, et */ /* */ /* TOUS_ECRASEMENTS_AUTORISES; */ /* */ /* qui (re-)autorise l'ecrasement */ /* de tous les niveaux. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,DTb1(liste_d_ecrasement,COULEURS))); /* Vecteur des ecrasements : donne par niveau l'etat d'iterdiction */ /* ou d'autorisation de son ecrasement lors d'un 'store_point'. */ DEFV(Common,DEFV(Logical,INIT(init_ecrasement,FAUX))); /* Cet indicateur est rendu necessaire, par le fait que le vecteur des */ /* ecrasements ne peut etre initialisee a la compilation... Tant qu'il */ /* est a l'etat 'FAUX', cela signifie que la liste des ecrasements */ /* n'ont pas ete initialisees. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* L I S S A G E P A R A P P R O X I M A T I O N P A R A B O L I Q U E : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,INIT(LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m2 ,COEFFICIENT_DE_LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_DE_n_m2 ) ) ); DEFV(Common,DEFV(Float,INIT(LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m1 ,COEFFICIENT_DE_LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_DE_n_m1 ) ) ); DEFV(Common,DEFV(Float,INIT(LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_0 ,COEFFICIENT_DE_LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_DE_n_0 ) ) ); DEFV(Common,DEFV(Float,INIT(LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p1 ,COEFFICIENT_DE_LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_DE_n_p1 ) ) ); DEFV(Common,DEFV(Float,INIT(LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p2 ,COEFFICIENT_DE_LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_DE_n_p2 ) ) ); /* Introduit le 20160603151935 sous cette forme pour plus de generalite... */ /* */ /* Aux environs du 20160604093357, ils ont ete introduits dans des 'GET_ARGUMENT_F(...)' */ /* dans tous les programmes '$K' ou cela etait utile et facile. Cela a donc concerne : */ /* */ /* $xci/fract_2D.01$K IFfractal_2D_precises(...) */ /* $xci/fract_3D.01$K IFfractal_3D_precises(...) */ /* $xci/lissage$K IFlissage_parabolique(...) */ /* $xci/substitue$K IFmove_avec_substitution(...) */ /* */ /* Ce sont en fait les seuls '$K' ou 'LISSAGE_PAR_APPROXIMATION_PARABOLIQUE(...)' etait */ /* deja reellement utilisABLE via les fonctions et les procedures suivantes : */ /* */ /* IFlissage_parabolique(...) LISSAGE_PAR_APPROXIMATION_PARABOLIQUE */ /* IFmove_avec_substitution(...) CONVERSION_FLOTTANTE_D_UNE_LISTE_DE_SUBSTITUTION */ /* IFfractal_2D_precises(...) PREPARATION_DE_L_UTILISATION_D_UNE_LISTE_DE_SUBSTITUTION */ /* IFfractal_3D_precises(...) PREPARATION_DE_L_UTILISATION_D_UNE_LISTE_DE_SUBSTITUTION */ /* */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O N V E R S I O N " F L O T T A N T E " D E L A L I S T E D E S U B S T I T U T I O N */ /* C O U R A N T E " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,INIT(CONVERSION_FLOTTANTE_D_UNE_LISTE_DE_SUBSTITUTION_____renormaliser,VRAI))); /* Cet indicateur controle dans 'CONVERSION_FLOTTANTE_D_UNE_LISTE_DE_SUBSTITUTION(...)' */ /* la renormalisation des listes de substitution flottantes. Ceci a ete introduit le */ /* 20130114163336 pour 'v $xci/substitue$K _____renormaliser' principalement. La valeur */ /* par defaut garantit la compatibilite anterieure... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E T A B L E D E M U L T I P L I C A T I O N G E N E R A L I S E E : */ /* */ /* */ /* Definition : */ /* */ /* Nous allons definir la notion de */ /* produit generalise ; il s'agit la */ /* d'une operation binaire en general */ /* non commutative. On se donne deux */ /* images 'A1' et 'A2', et une matrice */ /* [COULEURS][COULEURS] qui donne pour */ /* chaque couple de niveaux (n(A1),n(A2)) */ /* le niveau n(R) de l'image resultante. */ /* */ /* On peut considerer cela comme une */ /* extension bi-dimensionnelle des */ /* listes de substitution. */ /* */ /* */ /* Utilisation : */ /* */ /* INITIALISATION_QUELCONQUE_TABLE_DE_MULTIPLICATION(table_de_multiplication,DEFINITION_DU_PRODUIT); */ /* */ /* permet d'initialiser une table de multiplication */ /* de facon tout a fait arbitraire, et : */ /* */ /* INITIALISATION_TABLE_DE_MULTIPLICATION(table_de_multiplication,DEFINITION_DU_PRODUIT); */ /* */ /* permet d'initialiser une table de multiplication */ /* a l'aide d'une certaine definition, et par */ /* exemple : 'PRODUIT_OU_FLOU',... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,INIT(initialisation_table_de_multiplication_standard,INVALIDE))); /* Indique si le contenu de la table de multiplication standard est */ /* 'VALIDE' ou encore 'INVALIDE'... */ DEFV(Common,DEFV(table_de_multiplication_generalisee,table_de_multiplication_standard)); /* Definition d'une table de multiplication standard. ATTENTION : a cause */ /* de 'Common', toutes les informations precedentes doivent etre sur la */ /* meme ligne... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D ' A U T O M A T E S C E L L U L A I R E S M O N O D I M E N S I O N N E L S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,INIT(initialisation_automate_cellulaire_standard,INVALIDE))); /* Indique si le contenu de l'automate cellulaire standard est */ /* 'VALIDE' ou encore 'INVALIDE'... */ DEFV(Common,DEFV(automate_cellulaire_monodimensionnel,automate_cellulaire_standard)); /* Definition de l'automate cellulaire standard. ATTENTION : a cause */ /* de 'Common', toutes les informations precedentes doivent etre sur la */ /* meme ligne... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D E S T A T I S T I Q U E S : */ /* */ /* */ /* Definition : */ /* */ /* Un certain nombre de donnees */ /* statistiques relatives a une */ /* image seront disponibles ici, et */ /* calculees par la fonction generale */ /* 'Ihistogramme'. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,INIT(Ihistogramme_____etat,INVALIDE))); /* Indicateur logique rendu necessaire par le fait qu'on ne peut initialiser */ /* l'histogramme a la compilation ; il prend donc soit l'etat 'VALIDE', */ /* soit l'etat 'INVALIDE'. */ DEFV(Common,DEFV(Int,DTb1(histogramme,COULEURS))); /* L'histogramme est un vecteur comportant autant d'entrees qu'il y a de */ /* niveaux possibles ; dans chacune de celles-ci, on trouvera le nombre de */ /* points possedant ce niveau dans une image donnee. */ DEFV(Common,DEFV(Int,DTb1(histogramme_cumule,COULEURS))); /* L'histogramme cumule donne pour chaque niveau la somme de tous les niveaux anterieurs */ /* y compris ce niveau courant. */ DEFV(Common,DEFV(Int,DTb1(classement_des_niveaux,COULEURS))); /* Cette liste donne du 'V_BLANC' au 'V_NOIR' l'ordre des niveaux, du plus rempli */ /* (dit 'V_BLANC') au moins rempli (dit 'V_NOIR') ; de plus, cette liste est */ /* generee par des 'Int' et non des 'genere_p' afin d'eviter des problemes */ /* de tests numeriques sur ces valeurs... */ DEFV(Common,DEFV(Int,INIT(Ihistogramme______nombre_de_points_minimal,UNDEF))); /* Donne le plus petit nombre de points possedant un meme niveau ; on */ /* notera qu'il s'agit d'un "Int" et non pas d'un "Positive", a cause */ /* d'eventuelles initialisations sur 'MOINS_L_INFINI'. */ DEFV(Common,DEFV(Int,INIT(Ihistogramme______nombre_de_points_maximal,UNDEF))); /* Donne le plus grand nombre de points possedant un meme niveau ; on */ /* notera qu'il s'agit d'un "Int" et non pas d'un "Positive", a cause */ /* d'eventuelles initialisations sur 'MOINS_L_INFINI'. */ DEFV(Common,DEFV(Positive,INIT(Ihistogramme______nombre_de_points,UNDEF))); /* Cette variable donne le nombre de points utilises par la fonction */ /* 'Ihistogramme' ; elle est rendue necessaire par la notion de "masque". */ DEFV(Common,DEFV(genere_p,INIT(Ihistogramme______niveau_minimal,NIVEAU_UNDEF))); /* Cette variable donne le niveau minimal rencontre dans une image. */ DEFV(Common,DEFV(genere_p,INIT(Ihistogramme______niveau_maximal,NIVEAU_UNDEF))); /* Cette variable donne le niveau maximal rencontre dans une image. */ DEFV(Common,DEFV(genere_p,INIT(Ihistogramme______niveau_moyen,NIVEAU_UNDEF))); /* Cette variable donne le niveau moyen rencontre dans une image. */ DEFV(Common,DEFV(Positive,ZINT(Ihistogramme______hauteur_de_la_mire_de_barres_situee_a_la_base_de_l_histogramme,ZERO))); /* Cette variable donne la hauteur de la mire de barres apparaissant systematiquement a la */ /* base des histogrammes (introduit le 20081006113508). */ /* */ /* Le 20081006152340, la valeur par defaut est passee de 'MIRE_Y_MINIMAL' a 'ZERO', cette */ /* derniere valeur etant plus logique puisque ne generant pas de barre lorsqu'un element de */ /* l'histogramme est nul... */ DEFV(Common,DEFV(Logical,ZINT(Ihistogramme______renormaliser_la_hauteur_de_la_mire_de_barres_par_rapport_au_maximum,VRAI))); DEFV(Common,DEFV(Float,ZINT(Ihistogramme______facteur_de_renormalisation_hauteur_mire_de_barres_par_rapport_au_maximum ,FRA10(FRA10(FU)) ) ) ); /* Introduit le 20151124134322 afin de permettre d'avoir, si besoin est, des mires de */ /* barres comparables entre-elles pour differentes images. La valeur par defaut garantit */ /* la compatibilite anterieure... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D O N N E E S D E P R O J E C T I O N D U 3 - E S P A C E V E R S L E 2 - E S P A C E : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(projecteur_OX,PROJECTEUR_OX))); /* Facteur de projection de l'axe des 'Z' sur l'axe des 'X', suivant la formule : */ /* */ /* X = X - (3/4).Z */ /* projete */ /* */ DEFV(Common,DEFV(Float,ZINT(projecteur_OY,PROJECTEUR_OY))); /* Facteur de projection de l'axe des 'Z' sur l'axe des 'Y, suivant la formule : */ /* */ /* Y = Y - (1/2).Z */ /* projete */ /* */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P A R A L L E L E D ' U N 4 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection parallele d'un */ /* point {x1,x2,x3,x4} appartenant a un espace */ /* a 4 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par : */ /* */ /* X = (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* X1 1 X2 2 X3 3 X4 4 */ /* */ /* Y = (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Y1 1 Y2 2 Y3 3 Y4 4 */ /* */ /* Z = (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Z1 1 Z2 2 Z3 3 Z4 4 */ /* */ /* la matrice 'A' etant initialisee implicitement */ /* avec les valeurs : */ /* */ /* | 1 0 0 1 | */ /* | 0 1 0 1 | */ /* | 0 0 1 1 | */ /* */ /* qui donnent de bons resultats... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x1_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x2_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x3_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x4_X,FU___))); /* Definition de la coordonnee 'X' apres projection 4D --> 3D (introduit le 20040331093927). */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x1_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x2_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x3_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x4_Y,FU___))); /* Definition de la coordonnee 'Y' apres projection 4D --> 3D (introduit le 20040331093927). */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x1_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x2_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x3_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_4D_3D_x4_Z,FU___))); /* Definition de la coordonnee 'Z' apres projection 4D --> 3D (introduit le 20040331093927). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P E R S P E C T I V E D ' U N 4 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection perspective d'un */ /* point {x1,x2,x3,x4} appartenant a un espace */ /* a 4 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par. La transformation */ /* perspective est calculee au prealable : */ /* */ /* */ /* A.O1 + B.O2 + C.O3 + D.O4 + E */ /* R = --------------------------------------------------- */ /* A.(x1-O1) + B.(x2-O2) + C.(x3-O3) + D.(x4-O4) + E */ /* */ /* */ /* x1' = O1 + (-R).(x1-O1) */ /* x2' = O2 + (-R).(x2-O2) */ /* x3' = O3 + (-R).(x3-O3) */ /* x4' = O4 + (-R).(x4-O4) */ /* */ /* {A,B,C,D,E} etant un hyper-plan et */ /* {O1,O2,O3,O4} un hyper-observateur. */ /* */ /* Et enfin, le point {x1',x2',x3',x4'} fait */ /* l'objet de la projection paralelle definie */ /* precedemment : */ /* */ /* {x1',x2',x3',x4'} --> {X,Y,Z} */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_4D_X1,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_4D_X2,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_4D_X3,FDEUX))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_4D_X4,FZERO))); /* Definition de l'hyper-Observateur (introduit le 20230310110208). */ DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_4D_A,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_4D_B,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_4D_C,FU___))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_4D_D,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_4D_E,FZERO))); /* Definition de l'hyper-Plan (introduit le 20230310110208). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P A R A L L E L E D ' U N 6 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection parallele d'un */ /* point {x1,x2,x3,x4,x5,x6} appartenant a un espace */ /* a 6 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par : */ /* */ /* X = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* X1 1 X2 2 X3 3 X4 4 X5 5 X6 6 */ /* */ /* Y = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Y1 1 Y2 2 Y3 3 Y4 4 Y5 5 Y6 6 */ /* */ /* Z = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Z1 1 Z2 2 Z3 3 Z4 4 Z5 5 Z6 6 */ /* */ /* la matrice 'A' etant initialisee implicitement */ /* avec les valeurs : */ /* */ /* | 1 0 0 1 0 0 | */ /* | 0 1 0 0 1 0 | */ /* | 0 0 1 0 0 1 | */ /* */ /* qui donnent de bons resultats... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x1_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x2_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x3_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x4_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x5_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x6_X,FZERO))); /* Definition de la coordonnee 'X' apres projection 6D --> 3D (introduit le 20040331093927). */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x1_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x2_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x3_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x4_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x5_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x6_Y,FZERO))); /* Definition de la coordonnee 'Y' apres projection 6D --> 3D (introduit le 20040331093927). */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x1_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x2_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x3_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x4_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x5_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_6D_3D_x6_Z,FU___))); /* Definition de la coordonnee 'Z' apres projection 6D --> 3D (introduit le 20040331093927). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P A R A L L E L E D ' U N 8 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection parallele d'un */ /* point {x1,x2,x3,x4,x5,x6,x7,x8} appartenant a un espace */ /* a 8 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par : */ /* */ /* X = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* X1 1 X2 2 X3 3 X4 4 X5 5 X6 6 X7 7 X8 8 */ /* */ /* Y = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Y1 1 Y2 2 Y3 3 Y4 4 Y5 5 Y6 6 Y7 7 Y8 8 */ /* */ /* Z = (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) + (A .x ) */ /* Z1 1 Z2 2 Z3 3 Z4 4 Z5 5 Z6 6 Z7 7 Z8 8 */ /* */ /* la matrice 'A' etant initialisee implicitement */ /* avec les valeurs : */ /* */ /* | 1 0 0 1 1 0 0 1 | */ /* | 0 1 0 1 0 1 0 1 | */ /* | 0 0 1 1 0 0 1 1 | */ /* */ /* qui donnent de bons resultats... */ /* */ /* L'initialisation implicite est devenue le */ /* 20230207114915 : */ /* */ /* | 1 0 0 0 0 1 0 0 | */ /* | 0 1 0 0 0 1 0 0 | */ /* | 0 0 0 0 1 1 0 0 | */ /* */ /* qui permet de retrouver 'v $xiirs/CAYA.A1.0129' */ /* avec 'v $xiirs/CAYA.W3'... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x1_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x2_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x3_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x4_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x5_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x6_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x7_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x8_X,FZERO))); /* Definition de la coordonnee 'X' apres projection 8D --> 3D (introduit le 20230202142117). */ /* */ /* Lors de la mise au point de 'v $xiirs/CAYA.O3', le 20230207114915, je suis passe de : */ /* */ /* {FU___,FZERO,FZERO,FU___,FU___,FZERO,FZERO,FU___} */ /* */ /* a une version compatible avec la projection 4D --> 3D... */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x1_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x2_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x3_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x4_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x5_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x6_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x7_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x8_Y,FZERO))); /* Definition de la coordonnee 'Y' apres projection 8D --> 3D (introduit le 20230202142117). */ /* */ /* Lors de la mise au point de 'v $xiirs/CAYA.O3', le 20230207114915, je suis passe de : */ /* */ /* {FZERO,FU___,FZERO,FU___,FZERO,FU___,FZERO,FU___} */ /* */ /* a une version compatible avec la projection 4D --> 3D... */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x1_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x2_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x3_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x4_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x5_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x6_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x7_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_8D_3D_x8_Z,FZERO))); /* Definition de la coordonnee 'Z' apres projection 8D --> 3D (introduit le 20230202142117). */ /* */ /* Lors de la mise au point de 'v $xiirs/CAYA.O3', le 20230207114915, je suis passe de : */ /* */ /* {FZERO,FZERO,FU___,FU___,FZERO,FZERO,FU___,FU___} */ /* */ /* a une version compatible avec la projection 4D --> 3D... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P E R S P E C T I V E D ' U N 8 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection perspective d'un */ /* point {x1,x2,x3,x4,x5,x6,x7,x8} appartenant a un espace */ /* a 8 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par. La transformation */ /* perspective est calculee au prealable : */ /* */ /* */ /* A.O1 + B.O2 + C.O3 + D.O4 + E.O5 + F.O6 +G.O7 + H.O8 + I */ /* R = --------------------------------------------------------------------------------------------------- */ /* A.(x1-O1) + B.(x2-O2) + C.(x3-O3) + D.(x4-O4) + D.(x5-O5) + D.(x6-O6) + D.(x7-O7) + D.(x8-O8) + I */ /* */ /* */ /* x1' = O1 + (-R).(x1-O1) */ /* x2' = O2 + (-R).(x2-O2) */ /* x3' = O3 + (-R).(x3-O3) */ /* x4' = O4 + (-R).(x4-O4) */ /* x5' = O5 + (-R).(x5-O5) */ /* x6' = O6 + (-R).(x6-O6) */ /* x7' = O7 + (-R).(x7-O7) */ /* x8' = O8 + (-R).(x8-O8) */ /* */ /* {A,B,C,D,E,F,G,H,I} etant un hyper-plan et */ /* {O1,O2,O3,O4,O5,O6,O7,O8} un hyper-observateur. */ /* */ /* Et enfin, le point {x1',x2',x3',x4',x5',x6',x7',x8'} fait */ /* l'objet de la projection paralelle definie */ /* precedemment : */ /* */ /* {x1',x2',x3',x4',x5',x6',x7',x8'} --> {X,Y,Z} */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X1,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X2,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X3,FDEUX))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X4,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X5,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X6,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X7,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_8D_X8,FZERO))); /* Definition de l'hyper-Observateur (introduit le 20230316142734). */ DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_A,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_B,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_C,FU___))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_D,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_E,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_F,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_G,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_H,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_8D_I,FZERO))); /* Definition de l'hyper-Plan (introduit le 20230316142734). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P A R A L L E L E D ' U N 1 6 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection parallele d'un */ /* point {x01,x02,...,x15,x16} appartenant a un espace */ /* a 16 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par : */ /* */ /* X = (A .x ) + (A .x ) + (...) + (A .x ) + (A .x ) */ /* X01 01 X02 02 X15 15 X16 16 */ /* */ /* Y = (A .x ) + (A .x ) + (...) + (A .x ) + (A .x ) */ /* Y01 01 Y02 02 Y15 15 Y16 16 */ /* */ /* Z = (A .x ) + (A .x ) + (...) + (A .x ) + (A .x ) */ /* Z01 01 Z02 02 Z15 15 Z16 16 */ /* */ /* la matrice 'A' etant initialisee implicitement */ /* avec les valeurs (introduites le 20230225100532) : */ /* */ /* | 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 | */ /* | 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 | */ /* | 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 | */ /* */ /* qui permet de retrouver 'v $xiirs/CAYA.A1.0129' */ /* avec 'v $xiirs/CAYA.O3'... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x01_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x02_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x03_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x04_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x05_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x06_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x07_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x08_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x09_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x10_X,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x11_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x12_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x13_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x14_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x15_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x16_X,FZERO))); /* Definition de la coordonnee 'X' apres projection 16D --> 3D. */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x01_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x02_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x03_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x04_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x05_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x06_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x07_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x08_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x09_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x10_Y,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x11_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x12_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x13_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x14_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x15_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x16_Y,FZERO))); /* Definition de la coordonnee 'Y' apres projection 16D --> 3D. */ DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x01_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x02_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x03_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x04_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x05_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x06_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x07_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x08_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x09_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x10_Z,FU___))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x11_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x12_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x13_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x14_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x15_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(coefficient_de_projection_parallele_01_16D_3D_x16_Z,FZERO))); /* Definition de la coordonnee 'Z' apres projection 16D --> 3D. */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O J E C T I O N P E R S P E C T I V E D ' U N 1 6 - E S P A C E V E R S L E 3 - E S P A C E : */ /* */ /* */ /* Definition : */ /* */ /* On definit la projection perspective d'un */ /* point {x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16} appartenant a un espace */ /* a 16 dimensions sur un point {X,Y,Z} appartenant */ /* a un espace a 3 dimensions par. Cette projection est */ /* tout a fait identique a celle definie pour un */ /* espace a 8 dimensions... */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X01,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X02,FDU))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X03,FDEUX))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X04,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X05,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X06,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X07,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X08,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X09,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X10,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X11,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X12,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X13,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X14,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X15,FZERO))); DEFV(Common,DEFV(Float,ZINT(observateur_de_projection_perspective_01_16D_X16,FZERO))); /* Definition de l'hyper-Observateur (introduit le 20230316142734). */ DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_A,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_B,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_C,FU___))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_D,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_E,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_F,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_G,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_H,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_I,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_J,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_K,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_L,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_M,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_N,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_O,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_P,FZERO))); DEFV(Common,DEFV(Float,ZINT(plan_de_projection_perspective_01_16D_Q,FZERO))); /* Definition de l'hyper-Plan (introduit le 20230316142734). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N D I C A T E U R S D E C O N T R O L E U T I L E S A C E R T A I N E S C O M M A N D E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(les_images_sont_standards,VRAI))); DEFV(Common,DEFV(Logical,ZINT(les_imagesA_sont_standards,VRAI))); DEFV(Common,DEFV(Logical,ZINT(les_imagesN_sont_standards,VRAI))); DEFV(Common,DEFV(Logical,ZINT(les_imagesR_sont_standards,VRAI))); DEFV(Common,DEFV(Logical,ZINT(les_images_standards_sont_a_renormaliser,FAUX))); /* Indicateurs references via les procedures 'gI...(...)' definies dans quelques fichiers */ /* de type '$DEF' et qui permettent de savoir si les images a manipuler sont de type */ /* 'genere_Float' ("FAUX") ou bien de type 'genere_p' ("VRAI"), et dans ce dernier cas si */ /* elles doivent etre renormalisees ("VRAI") ou pas ("FAUX")... */ /* */ /* Le 20060307135422 furent introduits les indicateurs 'les_imagesA_sont_standards' et */ /* 'les_imagesR_sont_standards' permettant de traiter separemment, si besoin est, les */ /* images Arguments et les images Resultats. Cela fut rendu necessaire a cette date pour */ /* 'v $xci/filtre.01$K les_imagesA_sont_standards'... */ /* */ /* Le 20240812122154 fut introduit 'les_imagesN_sont_standards' par "symetrie" avec */ /* 'les_imagesA_sont_standards' pour 'v $xci/filtre.01$K les_imagesN_sont_standards' . */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* S U P E R - E C H E L L E S G R A P H I Q U E S : */ /* */ /*************************************************************************************************************************************/ #ifdef super_echelle_OZ_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Logical,_____super_echelle_OZ_VERSION_01)); #Aifdef super_echelle_OZ_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef super_echelle_OZ_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef super_echelle_OZ_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,_____super_echelle_OZ_VERSION_02)); #Aifdef super_echelle_OZ_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef super_echelle_OZ_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ /* Ces parametres ont ete implementes ici le 20001222141952, alors que jusqu'a present, */ /* ils figuraient dans '$xiii/vecteurs$FON'. Ceci est du a l'utilisation des super-echelles */ /* dans 'v $xiii/di_image$FON SUPER_ECHELLE' pour la fonction 'IFdensite(...)'. */ DEFV(Common,DEFV(Float,ZINT(super_echelle_OX,SUPER_ECHELLE_DE_BASE))); DEFV(Common,DEFV(Float,ZINT(super_echelle_OY,SUPER_ECHELLE_DE_BASE))); DEFV(Common,DEFV(Float,ZINT(super_echelle_OZ,SUPER_ECHELLE_DE_BASE))); /* Definition des "super-echelles" sur les axes 'OX' et 'OY'. Ces deux "super-echelles" */ /* sont destinees a permettre plusieurs choses (notons-les 'seX' et 'seY') : */ /* */ /* 1-seX=seY=1 : dans ces conditions, un carre trace sur l'ecran aura les */ /* memes proportions que l'image elle-meme. Par exemple en */ /* format 'Pal', il donnera l'impression d'un rectangle */ /* horizontal. */ /* */ /* 2-seX=1, seY=(dimX/dimY) : dans ces conditions, un carre trace sur l'ecran aura bien */ /* l'air d'un "grand" carre. */ /* */ /* 3-seX=(dimY/dimX), seY=1 : dans ces conditions, un carre trace sur l'ecran aura bien */ /* l'air d'un "petit" carre (par rapport au format ci-dessus). */ /* */ /* La "super-echelle" sur l'axe 'OZ' a ete ajoutee le 20001224174626 afin de resoudre */ /* un probleme recontre dans 'v $xiii/di_album$FON AFdensite'. */ DEFV(Common,DEFV(Logical,ZINT(super_echelle_____utiliser_le_mode_rectangulaire,VRAI))); DEFV(Common,DEFV(Logical,ZINT(super_echelle_____utiliser_le_mode_carre__grand_carre,VRAI))); /* Choix des modes par defaut introduit le 20051216100446. On rappelle qu'en utilisant */ /* 'super_echelle_OZ_VERSION_02' et en notant {SX,SY,SZ} les "super-echelles" sur les */ /* axes {OX,OY,OZ} respectivement, on a : */ /* */ /* RECTANGULAIRE : */ /* SX=1 */ /* SY=1 */ /* SZ=1 */ /* */ /* GRAND CARRE : */ /* SX=1 */ /* SY=dimX/dimY (=1.35 en mode 'Pal' par exemple) */ /* SZ=1 */ /* */ /* PETIT CARRE : */ /* SX=dimY/dimX (=0.73 en mode 'Pal' par exemple) */ /* SY=1 */ /* SZ=1 */ /* */ /* Ceci a ete deplace de '$xiii/vecteurs$FON' a ici le 20051216103915... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R R O N D I S D E C O N V E R S I O N P O U R ' Afloat_std(...) ' : */ /* */ /*************************************************************************************************************************************/ /* ATTENTION : cette definition ne peut etre dans 'v $xiii/conversion$FON 20020315122536' */ /* car, en effet, elle est referencee dans 'v $xig/fonct$vv$DEF 20020315122536' et donc */ /* dans toutes les commandes '$K'... */ DEFV(Common,DEFV(Float,ZINT(Afloat_std_____translation_d_arrondi_au_plus_proche_entier ,TRANSLATION_D_ARRONDI_AU_PLUS_PROCHE_ENTIER ) ) ); /* Le 20020315122536, cette constante a ete introduite de facon a introduire un 'ARRI(...)' */ /* lors de la conversion 'GENP(...)', mais de facon a assurer la compatibilite avec les */ /* generations anterieures (il suffit pour cela d'annuler ce parametre...). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A R R O N D I S D E C O N V E R S I O N P O U R ' Ifloat_std(...) ' : */ /* */ /*************************************************************************************************************************************/ /* ATTENTION : cette definition ne peut etre dans 'v $xiii/conversion$FON 20020315122536' */ /* car, en effet, elle est referencee dans 'v $xig/fonct$vv$DEF 20020315122536' et donc */ /* dans toutes les commandes '$K'... */ DEFV(Common,DEFV(Float,ZINT(Ifloat_std_____translation_d_arrondi_au_plus_proche_entier ,TRANSLATION_D_ARRONDI_AU_PLUS_PROCHE_ENTIER ) ) ); /* Le 20020315122536, cette constante a ete introduite de facon a introduire un 'ARRI(...)' */ /* lors de la conversion 'GENP(...)', mais de facon a assurer la compatibilite avec les */ /* generations anterieures (il suffit pour cela d'annuler ce parametre...). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E E C H A N T I L L O N N A G E D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ /* ATTENTION : cette definition ne peut etre dans 'v $xiii/di_image$FON' car, en effet, */ /* elle est referencee dans 'v $xiii/di_image$DEF gINITIALISATION_DES_INTERPOLATIONS...' */ /* qui est lui-meme reference dans differents '$FON' (en particulier 'v $xiii/di_image$FON' */ /* et 'v $xiipf/fonction.2$FON VOISINAGE_POINT_'). */ DEFV(Common,DEFV(Logical,ZINT(gINITIALISATION_DES_INTERPOLATIONS_BILINEAIRE_ET_BICUBIQUE_____compatibilite_20090225,FAUX))); /* Le 20090225133105, cet indicateur a ete introduit... */ DEFV(Common,DEFV(Int,ZINT(VOISINAGE_POINT_BILINEAIRE_____pasX,PasX))); DEFV(Common,DEFV(Int,ZINT(VOISINAGE_POINT_BILINEAIRE_____pasY,PasY))); /* Pas d'echantillonnage de 'VOISINAGE_POINT_BILINEAIRE(...)' (introduit le 20160329120812). */ DEFV(Common,DEFV(Int,ZINT(VOISINAGE_POINT_BICUBIQUE_____pasX,PasX))); DEFV(Common,DEFV(Int,ZINT(VOISINAGE_POINT_BICUBIQUE_____pasY,PasY))); /* Pas d'echantillonnage de 'VOISINAGE_POINT_BICUBIQUE(...)' (introduit le 20160329120812). */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N O T I O N D ' A S S O C I A T I O N D ' I M A G E S : */ /* */ /* */ /* Definition : */ /* */ /* On se donne ici la possibilite */ /* d'associer deux images point a */ /* point a l'aide de deux matrices */ /* qui donnent respectivement pour */ /* chaque point {X,Y}, les coordonnees */ /* X' et Y' du point qui lui est */ /* associe. */ /* */ /* Deux images de type 'I' sont ainsi */ /* definies : */ /* */ /* Iassociation_de_voisinage_____X : elle donne pour chaque point */ /* {X,Y} l'abscisse 'X' du point */ /* associe, */ /* Iassociation_de_voisinage_____Y : elle donne pour chaque point */ /* {X,Y} l'ordonnee 'Y' du point */ /* associe. */ /* */ /*************************************************************************************************************************************/ /* Deplace depuis 'v $xiii/tri_image$FON' le 20101011185144 car c'est en effet plus */ /* logique que cela soit ici et ce en particulier depuis l'introduction de la fonction */ /* 'v $xiii/pent_image$FON IFinterpolation_locale_de_voisinage'... */ DEFV(Common,DEFV(Statique,DEFV(imageI,Iassociation_de_voisinage_____X))); /* Definition de la partie 'X' des associations, */ DEFV(Common,DEFV(Statique,DEFV(imageI,Iassociation_de_voisinage_____Y))); /* Definition de la partie 'Y' des associations. */ DEFV(Common,DEFV(Logical,INIT(Iassociation_de_voisinage_____X_association__et__Y_association__sont_initialisees,FAUX))); /* Afin de savoir si {Iassociation_de_voisinage_____X,Iassociation_de_voisinage_____Y} */ /* sont initialisees, par exemple, en etant passe au moins une fois dans */ /* 'Iassociation_de_voisinage(...)'. */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O N V E R S I O N S " RVB " <--> " HLS " : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(PASSAGE_RVB_HLS_____compatibilite_20120911,FAUX))); /* Introduit le 20120911133745 pour garantir la compatibilite anterieure apres la correction */ /* d'une anomalie dans 'PASSAGE_RVB_HLS(...)'. */ DEFV(Common,DEFV(Logical,ZINT(PASSAGE_HLS_RVB_____compatibilite_20240327,FAUX))); /* Introduit le 20240327181436 pour garantir la compatibilite anterieure... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O N T R O L E D E C E R T A I N S M E S S A G E S D ' E R R E U R : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(PASSAGE_HLS_RVB_____editer_les_messages_d_erreur,VRAI))); /* Le 20111206112139, cet indicateur a ete introduit. On notera qu'il figure ici car, en */ /* effet, il ne peut etre dans 'v $xiii/conversion$FON PASSAGE_HLS_RVB', puisque cette */ /* procedure est aussi referencee dans 'v $xrv/HLS_RVB.01$K PASSAGE_HLS_RVB'... */ _______________________________________________________________________________________________________________________________________