/*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A D E N S I T E D ' U N A L B U M : */ /* */ /* */ /* Author of '$xci/densite_3D.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20001223090451). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE #include image_image_IMAGESF_EXT #include image_image_DI_ALBUM_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque */ /* c'est en effet 'Zmax' qui joue ce role... */ #define INVERSER_L_AXE_OZ \ FAUX \ /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a : */ \ /* */ \ /* FAUX : l'image d'arriere-plan est la premiere de la liste, */ \ /* VRAI : l'image d'arriere-plan est la derniere de la liste. */ \ /* */ \ /* Ceci fut introduit le 20100623084938... */ #define INCOMPLET_AXE_OZ \ FAUX \ /* Indique s'il peut manquer des images (ceci fut introduit le 20120322085615)... */ #define INCOMPLET_AXE_OZ_VALEUR_STANDARD \ NOIR #define INCOMPLET_AXE_OZ_VALEUR_NON_STANDARD \ FLOT__NOIR /* Donne la valeur des images manquantes (ceci fut introduit le 20120322092127)... */ #define DEMI_DIMENSION_X \ QUATRE #define DEMI_DIMENSION_Y \ QUATRE #define DEMI_DIMENSION_Z \ QUATRE /* Demi-dimension de la boite de calcul de la densite. */ #define FACTEUR_DU_NIVEAU \ FU \ /* Facteur du niveau. */ #define FACTEUR_DE_LA_DISTANCE \ FU \ /* Facteur de la distance. */ #define EXPOSANT_DE_LA_DISTANCE \ FDEUX \ /* Exposant de la distance. */ #define RENORMALISER_LES_EXPONENTIELLES \ VRAI \ /* Faut-il renormaliser ('VRAI') ou pas ('FAUX') les exponentielles ? */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L A D E N S I T E D ' U N A L B U M : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_albumR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_albumA),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE)); /* Nom d'un eventuel postfixe a placer derriere <nom_albumA><numero> (par exemple '$ROUGE'). */ DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES)); /* Nombre de chiffres codant le numero des images de la serie... */ DEFV(Logical,INIT(inverser_l_axe_OZ,INVERSER_L_AXE_OZ)); /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images. On a : */ /* */ /* FAUX : l'image d'arriere-plan est la premiere de la liste, */ /* VRAI : l'image d'arriere-plan est la derniere de la liste. */ /* */ /* Ceci fut introduit le 20100623084932... */ DEFV(Logical,INIT(incomplet_axe_OZ,INCOMPLET_AXE_OZ)); /* Indique s'il peut manquer des images (ceci fut introduit le 20120322085615)... */ DEFV(genere_p,INIT(incomplet_axe_OZ_valeur_standard,INCOMPLET_AXE_OZ_VALEUR_STANDARD)); DEFV(genere_Float,INIT(incomplet_axe_OZ_valeur_non_standard,INCOMPLET_AXE_OZ_VALEUR_NON_STANDARD)); /* Donne la valeur des images manquantes (ceci fut introduit le 20120322092127)... */ DEFV(Positive,INIT(demi_dimension_X,DEMI_DIMENSION_X)); DEFV(Positive,INIT(demi_dimension_Y,DEMI_DIMENSION_Y)); DEFV(Positive,INIT(demi_dimension_Z,DEMI_DIMENSION_Z)); /* Demi-dimension de la boite de calcul de la densite. */ DEFV(Float,INIT(facteur_du_niveau,FACTEUR_DU_NIVEAU)); /* Facteur du niveau. */ DEFV(Float,INIT(facteur_de_la_distance,FACTEUR_DE_LA_DISTANCE)); /* Facteur de la distance. */ DEFV(Float,INIT(exposant_de_la_distance,EXPOSANT_DE_LA_DISTANCE)); /* Exposant de la distance. */ DEFV(Logical,INIT(renormaliser_les_exponentielles,RENORMALISER_LES_EXPONENTIELLES)); /* Faut-il renormaliser ('VRAI') ou pas ('FAUX') les exponentielles ? */ /*..............................................................................................................................*/ BSaveModifyVariable(Logical,les_imagesR_sont_standards,FAUX); /* Introduit le 20170727110358 afin d'assurer la compatibilite anterieure... */ BSaveModifyVariable(Logical,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur,VRAI); /* Introduit le 20120620092356... */ EGAL(valider_les_axes_OX_OY_OZ,VRAI); EGAL(coefficient_de_forme_de_l_espace_tridimensionnel,COEFFICIENT_DE_FORME_DE_L_ESPACE_TRIDIMENSIONNEL); /* Introduit le 20140105182452 lors de la mise au point de 'v $xiirv/PIPO.F1.21' a cause */ /* du probleme 'v $xiii/di_album$FON 20120321113814' qui se manifeste, par exemple, si */ /* l'axe 'OZ' est beaucoup plus "court" que les axes 'OX' et/ou 'OY'. */ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENTS2_L("AFdensite_____compatibilite_20110908=""compatibilite_20110908=" ,AFdensite_standard_____compatibilite_20110908 ,AFdensite_non_standard_____compatibilite_20110908 ); /* Arguments introduits le 20110908082907... */ GET_ARGUMENTS2_L("AFdensite_____compatibilite_2014010308=""compatibilite_2014010308=" ,AFdensite_standard_____compatibilite_2014010308 ,AFdensite_non_standard_____compatibilite_2014010308 ); /* Arguments introduits le 20140103085308... */ GET_ARGUMENTS2_L("AFdensite_____compatibilite_2014010310=""compatibilite_2014010310=" ,AFdensite_standard_____compatibilite_2014010310 ,AFdensite_non_standard_____compatibilite_2014010310 ); /* Arguments introduits le 20140103104641... */ GET_ARGUMENTS2_L("AFdensite_____compatibilite_20170818=""compatibilite_20170818=" ,AFdensite_standard_____compatibilite_20170818 ,AFdensite_non_standard_____compatibilite_20170818 ); /* Arguments introduits le 20170818113633... */ GET_ARGUMENT_C("imageA=""A=",nom_albumA); GET_ARGUMENT_C("imageR=""R=",nom_albumR); GET_ARGUMENT_C("postfixe=",nom_postfixe); GET_ARGUMENT_I("premiere=",premiere_image); GET_ARGUMENTS2_I("pas=",pas_des_images,pasZ); /* L'argument 'pasZ' fut introduit le 20110119140724... */ GET_ARGUMENT_I("chiffres=",nombre_de_chiffres); GET_ARGUMENTS2_L("version_simplifiee=""simplifiee=""vs=" ,AFdensite_standard_____version_simplifiee ,AFdensite_non_standard_____version_simplifiee ); /* Arguments introduits le 20170730101127... */ GET_ARGUMENTS2_L("densite=" ,AFdensite_standard_____calculer_effectivement_une_densite ,AFdensite_non_standard_____calculer_effectivement_une_densite ); GET_ARGUMENTS2_N("neutre=" ,AFdensite_standard_____calculer_effectivement_une_densite ,AFdensite_non_standard_____calculer_effectivement_une_densite ); /* Arguments introduits le 20240829185946 afin de pouvoir accelerer */ /* 'v $xiirc/.MANE.41.2.$U .xci.densite_3D.11.X'... */ GET_ARGUMENTS2_F("ponderation_RdisF3D=""distance1=""d1=" ,AFdensite_standard_____ponderation_RdisF3D ,AFdensite_non_standard_____ponderation_RdisF3D ); GET_ARGUMENTS2_F("ponderation_ASdisF3D=""distance2=""d2=" ,AFdensite_standard_____ponderation_ASdisF3D ,AFdensite_non_standard_____ponderation_ASdisF3D ); /* Arguments introduits le 20170730101127... */ GET_ARGUMENT_L("inverser_Z=""inv_Z=",inverser_l_axe_OZ); /* Argument introduit le 20100623084938... */ GET_ARGUMENT_L("incomplet_Z=""inc_Z=",incomplet_axe_OZ); /* Argument introduit le 20120322085615... */ GET_ARGUMENT_P("valeur_standard_incomplet_Z=""vsinc_Z=",incomplet_axe_OZ_valeur_standard); GET_ARGUMENT_F("valeur_non_standard_incomplet_Z=""vnsinc_Z=",incomplet_axe_OZ_valeur_non_standard); /* Argument introduit le 20120322092127... */ GET_ARGUMENT_L("standardA=""standard=",les_imagesA_sont_standards); /* Argument introduit le 20091124093047 et complete le 20170727110005 avec "standardA="... */ GET_ARGUMENT_L("standardR=",les_imagesR_sont_standards); /* Argument introduit le 20170727110358... */ GET_ARGUMENTS2_F("facteur_normalisation_OX=""fnX=""fnx=" ,AFdensite_standard_____facteur_de_normalisation_OX ,AFdensite_non_standard_____facteur_de_normalisation_OX ); GET_ARGUMENTS2_F("facteur_normalisation_OY=""fnY=""fny=" ,AFdensite_standard_____facteur_de_normalisation_OY ,AFdensite_non_standard_____facteur_de_normalisation_OY ); GET_ARGUMENTS2_F("facteur_normalisation_OZ=""fnZ=""fnz=" ,AFdensite_standard_____facteur_de_normalisation_OZ ,AFdensite_non_standard_____facteur_de_normalisation_OZ ); /* Arguments introduits le 20140103115546... */ GET_ARGUMENTS2_L("super_echelle=""se=" ,AFdensite_standard_____utiliser_la_super_echelle ,AFdensite_non_standard_____utiliser_la_super_echelle ); /* Arguments introduits le 20101203155238... */ GET_ARGUMENTS2_L("rotation=""rot=" ,AFdensite_standard_____faire_une_rotation ,AFdensite_non_standard_____faire_une_rotation ); PROCESS_ARGUMENTS2_F("ROTATION_OX=" ,AFdensite_standard_____angle_de_ROTATION_OX ,AFdensite_non_standard_____angle_de_ROTATION_OX ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0X,nombre_d_arguments_recuperes); ) ); PROCESS_ARGUMENTS2_F("ROTATION_OY=" ,AFdensite_standard_____angle_de_ROTATION_OY ,AFdensite_non_standard_____angle_de_ROTATION_OY ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Y,nombre_d_arguments_recuperes); ) ); PROCESS_ARGUMENTS2_F("ROTATION_OZ=" ,AFdensite_standard_____angle_de_ROTATION_OZ ,AFdensite_non_standard_____angle_de_ROTATION_OZ ,BLOC(VIDE;) ,BLOC(EGAL(vecteurs_____ordre_de_la_ROTATION_0Z,nombre_d_arguments_recuperes); ) ); /* Arguments introduits le 20101203121552... */ GET_ARGUMENT_L("AccelerateurALoadPoint=""AccALP=" ,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur ); /* Arguments introduits le 20120310145627... */ GET_ARGUMENTS2_L("interpoler=""inter=" ,FAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement ,FFAload_point_coordonnees_01_____interpoler_bilineairement_ou_bicubiquement ); GET_ARGUMENTS2_F("interpolerX=""interX=" ,FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X ,FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_X ); GET_ARGUMENTS2_F("interpolerY=""interY=" ,FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y ,FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Y ); GET_ARGUMENTS2_F("interpolerZ=""interZ=" ,FAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Z ,FFAload_point_coordonnees_01_____ponderation_du_barycentre_d_interpolation_Z ); GET_ARGUMENTS2_L("lineaire=""bilineaire=" ,FAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ,FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ); GET_ARGUMENTS2_N("cubique=""bicubique=" ,FAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ,FFAload_point_coordonnees_01_____utiliser_l_interpolation_bilineaire ); /* Arguments introduits le 20101203130503... */ GET_ARGUMENTS2_L("periodiser_X=""periodX=" ,AFdensite_standard_____periodiser_X ,AFdensite_non_standard_____periodiser_X ); GET_ARGUMENTS2_L("periodiser_Y=""periodY=" ,AFdensite_standard_____periodiser_Y ,AFdensite_non_standard_____periodiser_Y ); GET_ARGUMENTS2_L("periodiser_Z=""periodZ=" ,AFdensite_standard_____periodiser_Z ,AFdensite_non_standard_____periodiser_Z ); GET_ARGUMENTS2_L("symetriser_X=""symetrX=" ,AFdensite_standard_____symetriser_X ,AFdensite_non_standard_____symetriser_X ); GET_ARGUMENTS2_L("symetriser_Y=""symetrY=" ,AFdensite_standard_____symetriser_Y ,AFdensite_non_standard_____symetriser_Y ); GET_ARGUMENTS2_L("symetriser_Z=""symetrZ=" ,AFdensite_standard_____symetriser_Z ,AFdensite_non_standard_____symetriser_Z ); GET_ARGUMENTS2_L("prolonger_X=""prolX=" ,AFdensite_standard_____prolonger_X ,AFdensite_non_standard_____prolonger_X ); GET_ARGUMENTS2_L("prolonger_Y=""prolY=" ,AFdensite_standard_____prolonger_Y ,AFdensite_non_standard_____prolonger_Y ); GET_ARGUMENTS2_L("prolonger_Z=""prolZ=" ,AFdensite_standard_____prolonger_Z ,AFdensite_non_standard_____prolonger_Z ); GET_ARGUMENTS2_F("niveau_hors_album=""nha=""niveau_hors_image=""nhi=""niveau=" ,AFdensite_standard_____niveau_hors_album ,AFdensite_non_standard_____niveau_hors_album ); GET_ARGUMENT_I("dx=""dX=",demi_dimension_X); GET_ARGUMENT_I("dy=""dY=",demi_dimension_Y); GET_ARGUMENT_I("dz=""dZ=",demi_dimension_Z); /* Je note le 20120227093911 qu'utiliser : */ /* */ /* dX=0 */ /* dY=0 */ /* dZ=0 */ /* AFdensite_____compatibilite_20110908=VRAI */ /* */ /* rend l'operation neutre et renvoie 'album_d_imagesR' identique a 'album_d_imagesA'... */ GET_ARGUMENTS3_I("dxyz=""dXYZ=",demi_dimension_X,demi_dimension_Y,demi_dimension_Z); /* Arguments introduits le 20170730094543... */ GET_ARGUMENT_F("facteurN=""fN=",facteur_du_niveau); GET_ARGUMENT_F("facteurD=""fD=",facteur_de_la_distance); GET_ARGUMENT_F("exposant=""e=",exposant_de_la_distance); GET_ARGUMENT_L("rn=""renormaliser=",renormaliser_les_exponentielles); ) ); begin_nouveau_block Bblock BDEFV(albumF,album_d_imagesR); /* Definition de l'album d'images Resultat... */ CALS(dAFinitialisation(album_d_imagesR,FZERO)); /* Initialisation de l'album Resultat. */ Test(EST_VRAI(les_imagesA_sont_standards)) /* Possibilite introduite le 20091124093047... */ Bblock BDEFV(album,album_d_imagesA); /* Definition de l'album d'images Argument "standard". */ CALi(idAload_album(album_d_imagesA ,nom_albumA ,nom_postfixe ,premiere_image ,pas_des_images ,nombre_de_chiffres ,FAUX ,UNDEF ,inverser_l_axe_OZ ,incomplet_axe_OZ ,incomplet_axe_OZ_valeur_standard ) ); /* Chargement de l'album Argument "standard". */ /* */ /* L'argument'Inv' ('FAUX') a ete introduit le 20091125133934 et le 20100623084938 */ /* il fut parametre par 'inverser_l_axe_OZ'... */ Test(PAS_D_ERREUR(CODE_ERREUR)) Bblock CALS(AFdensite_standard(album_d_imagesR ,album_d_imagesA ,demi_dimension_X ,demi_dimension_Y ,demi_dimension_Z ,facteur_du_niveau ,facteur_de_la_distance ,exposant_de_la_distance ,renormaliser_les_exponentielles ) ); /* Calcul de la densite... */ Eblock ATes Bblock Eblock ETes EDEFV(album,album_d_imagesA); /* Definition de l'album d'images Argument "standard". */ Eblock ATes Bblock BDEFV(albumF,album_d_imagesA); /* Definition de l'album d'images Argument "non standard". */ CALi(idAloadF_album(album_d_imagesA ,nom_albumA ,nom_postfixe ,premiere_image ,pas_des_images ,nombre_de_chiffres ,FAUX ,UNDEF ,inverser_l_axe_OZ ,incomplet_axe_OZ ,incomplet_axe_OZ_valeur_non_standard ) ); /* Chargement de l'album Argument... */ /* */ /* L'argument 'Inv' (='FAUX') a ete introduit le 20091125133934 et le 20100623084938 */ /* il fut parametre par 'inverser_l_axe_OZ'... */ Test(PAS_D_ERREUR(CODE_ERREUR)) Bblock CALS(AFdensite_non_standard(album_d_imagesR ,album_d_imagesA ,demi_dimension_X ,demi_dimension_Y ,demi_dimension_Z ,facteur_du_niveau ,facteur_de_la_distance ,exposant_de_la_distance ,renormaliser_les_exponentielles ) ); /* Calcul de la densite... */ Eblock ATes Bblock Eblock ETes EDEFV(albumF,album_d_imagesA); /* Definition de l'album d'images Argument "non standard". */ Eblock ETes Test(PAS_D_ERREUR(CODE_ERREUR)) /* Introduit le 20101207143707 (un peu tardivement...) car, en effet, il est plus logique */ /* de ne pas generer l'album 'nom_albumR' s'il y a eu erreur de chargement de l'album */ /* 'nom_albumA'... */ Bblock Test(EST_VRAI(les_imagesR_sont_standards)) /* Possibilite introduite le 20170727110358... */ Bblock BDEFV(albumF,album_d_imagesR_renormalise); BDEFV(album,album_d_imagesR_standard); /* Definition de l'album d'images Resultat avec pre-renormalisation. */ BSaveModifyVariable(genere_Float,AFnormalisation_____niveau_origine___de_normalisation,FLOT__NOIR); BSaveModifyVariable(genere_Float,AFnormalisation_____niveau_extremite_de_normalisation,FLOT__BLANC); DEFV(genere_Float,INIT(niveau_origine,FLOT__NIVEAU_UNDEF)); DEFV(genere_Float,INIT(niveau_extremite,FLOT__NIVEAU_UNDEF)); CALS(AFnivo_extrema(album_d_imagesR,ADRESSE(niveau_origine),ADRESSE(niveau_extremite))); CALS(AFnormalisation(album_d_imagesR_renormalise,album_d_imagesR,niveau_origine,niveau_extremite)); /* Renormalisation essentielle introduite tardivement le 20170817190045 car, en effet, il */ /* n'y a aucune raison pour que les extrema soient dans [NOIR,BLANC]. Cela s'est vu a cette */ /* date lors de la generation de 'v $xiirf/FRB3.z4.8.21'... */ ESaveModifyVariable(genere_Float,AFnormalisation_____niveau_extremite_de_normalisation); ESaveModifyVariable(genere_Float,AFnormalisation_____niveau_origine___de_normalisation); CALS(Afloat_std_brutal(album_d_imagesR_standard,album_d_imagesR_renormalise)); /* Conversion de l'album Resultat non standard en un album standard... */ CALi(dAupdate_album(nom_albumR ,nom_postfixe ,premiere_image ,pas_des_images ,album_d_imagesR_standard ,nombre_de_chiffres ,FAUX ) ); EDEFV(album,album_d_imagesR_standard); EDEFV(albumF,album_d_imagesR_renormalise); /* Definition de l'album d'images Resultat avec pre-renormalisation. */ Eblock ATes Bblock CALi(dAupdateF_album(nom_albumR ,nom_postfixe ,premiere_image ,pas_des_images ,album_d_imagesR ,nombre_de_chiffres ,FAUX ) ); /* L'argument 'Inv' (='FAUX') a ete introduit le 20100624091525... */ Eblock ETes Eblock ATes Bblock Eblock ETes EDEFV(albumF,album_d_imagesR); /* Definition de l'album d'images Resultat... */ Eblock end_nouveau_block ESaveModifyVariable(Logical,S_ACCELERATEUR__ALOAD_POINT_COORDONNEES_01_____utiliser_l_accelerateur); ESaveModifyVariable(Logical,les_imagesR_sont_standards); RETU_Commande; Eblock ECommande