_______________________________________________________________________________________________________________________________________ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N S D E B A S E A U N E I M A G E : */ /* */ /* */ /* Definition : */ /* */ /* Ce fichier contient toutes les fonctions */ /* de base de gestion et de manipulation d'une */ /* image raster, quelle que soit la definition. */ /* Ainsi, on pourra ainsi l'initialiser... */ /* */ /* */ /* Author of '$xiii/mono_image$FON' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 19870000000000). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E S " B U G S " P R E S E N T S : */ /* */ /*************************************************************************************************************************************/ #ifdef BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01)); #Aifdef BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_DPX5000_SPIX_CC_LACT11_ZONE_DE_SWAP_01 /* Common,DEFV(Fonction,) : bug... */ #ifdef BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01)); #Aifdef BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_NWS3000_NEWSOS_CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ #ifdef BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ DEFV(Common,DEFV(Logical,_____BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01)); #Aifdef BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ #Eifdef BUG_SYSTEME_NWS3000_NEWSOS_2CC_EDITION_DE_LIENS_01 /* Common,DEFV(Fonction,) : bug... */ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E " S T A N D A R D " : */ /* */ /*************************************************************************************************************************************/ BFonctionP DEFV(Common,DEFV(genere_p,SINT(Iinitialisation_____valeur_pour_gInettoyage,NOIR))); /* Introduit le 20090527110344 en particulier pour 'v $xci/scroll$K pour_gInettoyage'... */ DEFV(Common,DEFV(FonctionP,POINTERp(Iinitialisation(imageR,valeur)))) DEFV(Argument,DEFV(image,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(genere_p,valeur)); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock store_point(valeur,imageR,X,Y,FVARIABLE); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer1("niveau d'initialisation=%08X\n" ,valeur ) ); ) ); RETI(imageR); Eblock EFonctionP /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M I S E A " N O I R " D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ BFonctionP DEFV(Common,DEFV(genere_p,SINT(Inoir_____NOIR,NOIR))); /* Introduit le 20101025184057 a priori... */ DEFV(Common,DEFV(FonctionP,POINTERp(Inoir(imageR)))) DEFV(Argument,DEFV(image,imageR)); /* Image resultat a mettre a NOIR. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ CALS(Iinitialisation(imageR,Inoir_____NOIR)); RETI(imageR); Eblock EFonctionP /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M I S E A " B L A N C " D ' U N E I M A G E : */ /* */ /*************************************************************************************************************************************/ BFonctionP DEFV(Common,DEFV(genere_p,SINT(Iblanc_____BLANC,BLANC))); /* Introduit le 20101025184057 a priori... */ DEFV(Common,DEFV(FonctionP,POINTERp(Iblanc(imageR)))) DEFV(Argument,DEFV(image,imageR)); /* Image resultat a mettre a BLANC. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ CALS(Iinitialisation(imageR,Iblanc_____BLANC)); RETI(imageR); Eblock EFonctionP _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E E N T I E R E : */ /* */ /*************************************************************************************************************************************/ BFonctionI DEFV(Common,DEFV(FonctionI,POINTERI(IIinitialisation(imageR,valeur)))) DEFV(Argument,DEFV(imageI,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(genere_Int,valeur)); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock storeI_point(valeur,imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer1("niveau d'initialisation=%d\n" ,valeur ) ); ) ); RETII(imageR); Eblock EFonctionI _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E F L O T T A N T E */ /* E T P A R E X E M P L E L E Z - B U F F E R : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(IFinitialisation_____increment_de_la_valeur,FZERO))); /* Afin de permettre la progression de 'valeur' dans 'IFinitialisation(...)' (introduit le */ /* 20020524142206 pour aider aux tests du probleme 'v $xig/fonct$vv$FON 20020429105701') */ /* en permettant de generer un fichier dont toutes les valeurs sont differentes (et par */ /* exemple {1,2,3,...,N}). */ DEFV(Common,DEFV(Float,SINT(IFinitialisation_____valeur_pour_gInettoyage,FZERO))); /* Introduit le 20090527110344 en particulier pour 'v $xci/scroll$K pour_gInettoyage'... */ DEFV(Common,DEFV(FonctionF,POINTERF(IFinitialisation(imageR,valeur)))) DEFV(Argument,DEFV(imageF,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(genere_Float,valeur)); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(DEFV(genere_Float,INIT(valeur_courante,valeur)); /* Valeur courante d'initialisation de 'imageR'... */ begin_image Bblock storeF_point(valeur_courante,imageR,X,Y); /* Initialisation element par element. */ Test(IFET(IFDI(imageR,Z_Buffer) ,IFDI(imageR,Z_Buffer_accumule) ) ) Bblock INCR(valeur_courante ,IFinitialisation_____increment_de_la_valeur ); /* Dans le cas d'images differentes de 'Z_Buffer' et de 'Z_Buffer_accumule', il est */ /* possible (a compter du 20020524142206) de faire evoluer la valeur... */ Eblock ATes Bblock Eblock ETes Eblock end_image Test(IFID(imageR,Z_Buffer)) Bblock EGAL(Z_Buffer_____minimum,F_INFINI); EGAL(Z_Buffer_____maximum,F_MOINS_L_INFINI); /* Initialisation du calculateur des extrema du 'Z-Buffer'. ATTENTION, il ne faut pas */ /* utiliser 'Z_Buffer_____valeur_initiale' ici car, en effet, c'est une recherche d'extrema. */ EGAL(Z_Buffer_____etat,VALIDE); /* Lorsque l'initialisation est terminee, et s'il s'agit du 'Z-Buffer', */ /* on memorise que l'initialisation de ce dernier est faite. */ Eblock ATes Bblock Eblock ETes Test(IFID(imageR,Z_Buffer_accumule)) Bblock EGAL(Z_Buffer_accumule_____minimum,F_INFINI); EGAL(Z_Buffer_accumule_____maximum,F_MOINS_L_INFINI); /* Initialisation du calculateur des extrema du 'Z-Buffer accumule'. ATTENTION, il ne faut */ /* pas utiliser 'Z_Buffer_____valeur_initiale' ici car, en effet, c'est une recherche */ /* d'extrema. */ EGAL(Z_Buffer_accumule_____etat,VALIDE); /* Lorsque l'initialisation est terminee, et s'il s'agit du 'Z-Buffer accumule', */ /* on memorise que l'initialisation de ce dernier est faite. */ Eblock ATes Bblock Eblock ETes ) ,BLOC(CAL1(Prer1("niveau d'initialisation=%f\n" ,valeur ) ); ) ); RETIF(imageR); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D U Z - B U F F E R : */ /* */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * ** * * * * * ** * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * */ /* * * * * ** * * * * * ** */ /* * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* */ /* ATTENTION : */ /* */ /* On notera le 20240419142725 que le 'Z-Buffer' */ /* peut etre initialise par un autre moyen tel */ /* 'v $xrv/champs_5.12$I INITIALISATION_DU_Z_BUFFER_D_UNE_IMAGE' */ /* auquel cas ce n'est pas : */ /* */ /* ZBuffer_initial=... */ /* */ /* ('v $xrv/champs_5.1A$I Z_Buffer_____valeur_initiale') */ /* qu'il faut utiliser, mais : */ /* */ /* Z0=... */ /* */ /* ('v $xrv/champs_5.1A$I valeur_de_la_valeur_d_initialisation_du_Z_Buffer'). */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(genere_Float,ZINT(Z_Buffer_____valeur_initiale,F_MOINS_LE_PETIT_INFINI))); /* Valeur initiale de tous les points du 'Z-Buffer' ('v $xci/montagne.01$K'). On notera que */ /* l'on utilise 'F_MOINS_LE_PETIT_INFINI' et non pas 'F_MOINS_L_INFINI' afin de prevenir des */ /* debordements ulterieurs (par exemple dans '$xci/acces$K'). */ BFonctionI DEFV(Common,DEFV(FonctionI,Iinit_Z_Buffer())) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock INIT_ERROR; /*..............................................................................................................................*/ CALS(IFinitialisation(Z_Buffer,Z_Buffer_____valeur_initiale)); /* On fait comme si tous les points etaient tres tres tres loins... */ RETU_ERROR; Eblock EFonctionI BFonctionI DEFV(Common,DEFV(FonctionI,Iinit_Z_Buffer_accumule())) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock INIT_ERROR; /*..............................................................................................................................*/ CALS(IFinitialisation(Z_Buffer_accumule,Z_Buffer_____valeur_initiale)); /* On fait comme si tous les points etaient tres tres tres loins... */ RETU_ERROR; Eblock EFonctionI _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E D O U B L E - P R E C I S I O N : */ /* */ /*************************************************************************************************************************************/ BFonctionD DEFV(Common,DEFV(FonctionD,POINTERD(IDinitialisation(imageR,valeur)))) DEFV(Argument,DEFV(imageD,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(genere_Double,valeur)); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock storeD_point(valeur,imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer1("niveau d'initialisation=%f\n" ,valeur ) ); ) ); RETID(imageR); Eblock EFonctionD _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(FonctionJ,POINTERJ(IJinitialisation(imageR,ARGUMENT_POINTERs(valeur))))) DEFV(Argument,DEFV(imageJ,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(complexe,POINTERs(valeur))); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock storeJ_point(INDIRECT(valeur),imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer2("niveau d'initialisation=(%f,%f)\n" ,Reelle(INDIRECT(valeur)) ,Imaginaire(INDIRECT(valeur)) ) ); ) ); RETIJ(imageR); Eblock EFonctionJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHJ DEFV(Common,DEFV(FonctionHJ,POINTERHJ(IHJinitialisation(imageR,ARGUMENT_POINTERs(valeur))))) DEFV(Argument,DEFV(imageHJ,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(hyper_complexe,POINTERs(valeur))); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock storeHJ_point(INDIRECT(valeur),imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer4("niveau d'initialisation=(%f,%f,%f,%f)\n" ,HReelle(INDIRECT(valeur)) ,HImaginaire(INDIRECT(valeur)) ,HJmaginaire(INDIRECT(valeur)) ,HKmaginaire(INDIRECT(valeur)) ) ); ) ); RETIHJ(imageR); Eblock EFonctionHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E H Y P E R - H Y P E R - C O M P L E X E : */ /* */ /*************************************************************************************************************************************/ BFonctionHHJ DEFV(Common,DEFV(FonctionHHJ,POINTERHHJ(IHHJinitialisation(imageR,ARGUMENT_POINTERs(valeur))))) /* Fonction introduite le 20150227101603... */ DEFV(Argument,DEFV(imageHHJ,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(hyper_hyper_complexe,POINTERs(valeur))); /* Valeur initiale a donner a tous les elements de l'image resultat. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock storeHHJ_point(INDIRECT(valeur),imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer8("niveau d'initialisation=(%f,%f,%f,%f)\n" ,HHReelle(INDIRECT(valeur)) ,HHImaginaire(INDIRECT(valeur)) ,HHJmaginaire(INDIRECT(valeur)) ,HHKmaginaire(INDIRECT(valeur)) ,HHSmaginaire(INDIRECT(valeur)) ,HHTmaginaire(INDIRECT(valeur)) ,HHUmaginaire(INDIRECT(valeur)) ,HHVmaginaire(INDIRECT(valeur)) ) ); ) ); RETIHHJ(imageR); Eblock EFonctionHHJ _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E M A T R I C E " D E B R O U I L L A G E " : */ /* */ /*************************************************************************************************************************************/ BFonctionJ DEFV(Common,DEFV(FonctionJ,POINTERJ(IJinitialisation_matrice_de_brouillage(imageR)))) DEFV(Argument,DEFV(imageJ,imageR)); /* Image resultat a initialiser, telle que imageR[X][Y] = X+iY ('X' et 'Y' dans [0,1]). */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(complexe,valeur_courante); /* Valeur initiale a donner a l'element courant {X,Y} de l'image Resultat. */ /*..............................................................................................................................*/ INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES(imageR ,BLOC(begin_image Bblock Cinitialisation(valeur_courante ,_____cNORMALISE_OX(X) ,_____cNORMALISE_OY(Y) ); /* Initialisation element par element avec la valeur X+iY. */ storeJ_point(valeur_courante,imageR,X,Y); /* Initialisation element par element. */ Eblock end_image ) ,BLOC(CAL1(Prer0("niveau d'initialisation variable\n" ) ); ) ); RETIJ(imageR); Eblock EFonctionJ #ifdef GESTION_DES_IMAGES_STATIQUES_VERSION_01 # undef INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES #Aifdef GESTION_DES_IMAGES_STATIQUES_VERSION_01 #Eifdef GESTION_DES_IMAGES_STATIQUES_VERSION_01 #ifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 # undef INITIALISATION_D_UNE_IMAGE_ET_VALIDATION_DES_IMAGES_STATIQUES #Aifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 #Eifdef GESTION_DES_IMAGES_STATIQUES_VERSION_02 _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E L A T R A N S F O R M A T I O N D E S */ /* C O O R D O N N E E S T R I D I M E N S I O N N E L L L E S */ /* L O R S D E L ' I N I T I A L I S A T I O N D ' U N E I M A G E P A R U N E F O N C T I O N : */ /* */ /*************************************************************************************************************************************/ /* ATTENTION : le 20080408093157, j'ai voulu mettre ici le : */ /* */ /* BFonctionF */ /* */ /* de 'IFgenere_champ(...)'. Mais malheusement, cela n'est pas tres logique car, en effet */ /* les deux procedures 'begin_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' et */ /* 'end_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' ne sont pas utilisees uniquement par la */ /* fonction 'IFgenere_champ(...)', mais aussi par les deux fonctions 'Igenere_champ(...)' */ /* et 'IJgenere_champ(...)'. D'ou le retablissement de la localisation anterieure de ce */ /* 'BFonctionF'... */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____centrer_X,FAUX))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____OX,COORDONNEE_BARYCENTRIQUE_MINIMALE))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____EX,COORDONNEE_BARYCENTRIQUE_MAXIMALE))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____centrer_Y,FAUX))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____OY,COORDONNEE_BARYCENTRIQUE_MINIMALE))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____EY,COORDONNEE_BARYCENTRIQUE_MAXIMALE))); /* Definition d'une fenetre de renormalisation des coordonnees {{OX,OY},{EX,EY}} */ /* introduite le 20100210082859... */ /* . */ /* Les options de centrage ont ete introduites le 20170602125747... */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____rapport_courant_du_zoom,ABSENCE_D_EFFET_DE_ZOOM))); /* Definition du rapport courant de zoom (introduit le 20060622184543). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OX,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OY,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OZ,FZERO))); /* Definition de la matrice de rotation (introduite le 20060516091854). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OX,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OY,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____translation_OZ,FZERO))); /* Definition de la translation (introduite le 20060516091854). */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations,VRAI))); DEFV(Local,DEFV(Logical,INIT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation,VRAI))); /* Afin de permettre l'initialisation de la matrice de rotation... */ /* */ /* L'indicateur 'ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations' a ete */ /* introduit le 20060517105000... */ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S M O D U L O : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_modulo,FAUX))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_modulo,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_modulo,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_modulo,VRAI))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_modulo ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_modulo ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_modulo ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_modulo ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_modulo ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_modulo ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); #define TRANSFORMATION_DES_COORDONNEES_XYZ__modulo(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_modulo)) \ Bblock \ EGAL(Xf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_modulo) \ ,Xf_transformee \ ,MODF(Xf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_modulo \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_modulo \ ) \ ) \ ); \ EGAL(Yf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_modulo) \ ,Yf_transformee \ ,MODF(Yf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_modulo \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_modulo \ ) \ ) \ ); \ EGAL(Zf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_modulo) \ ,Zf_transformee \ ,MODF(Zf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_modulo \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_modulo \ ) \ ) \ ); \ /* Calcul modulo des coordonnees introduit le 20060626111858... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S P A R S Y M E T R I S A T I O N : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_symetriquement,FAUX))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_symetriquement,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_symetriquement,VRAI))); DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_symetriquement,VRAI))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_symetrique ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_symetrique ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_symetrique ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_symetrique ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_symetrique ,COORDONNEE_BARYCENTRIQUE_MINIMALE ) ) ); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_symetrique ,COORDONNEE_BARYCENTRIQUE_MAXIMALE ) ) ); /* Introduit le 20060626111858 pour permettre un calcul modulo des coordonnees {X,Y,Z} */ /* apres une eventuelle transformation geometrique... */ /* */ /* ATTENTION : en general, les coordonnees {X,Y} sont dans les segments suivants : */ /* */ /* X E [-1/2,+1/2] */ /* Y E [-1/2,+1/2] */ /* */ /* alors que les bornes inferieures et superieures ci-dessus sont a priori {0,1}. En fait */ /* les procedures 'ACCES_A_LA_COORDONNEE_?_D_UN_CHAMP_3D(...)' mettent evidemment dans un */ /* premier temps les coordonnees dans [0,1] via '_____cNORMALISE_O?(...)' ; mais dans un */ /* second temps ces valeurs dans [0,1] subissent une "anti-translation" (via un 'SOUS(...)') */ /* definie le vecteur 'trans_champ' dont les composantes sont en general egales a {1/2,1/2} */ /* ('v $xci/genere_ch.01$I ._TRANSLATION'). Ainsi, les coordonnees {X,Y} se retrouvent alors */ /* en general dans [-1/2,+1/2]... Pour les bornes inferieures et superieures definies ici, */ /* on pourrait passer a [-1/2,+1/2], mais il preferable de privilegier la compatibilite */ /* anterieure. Cela signifie donc que lors de l'utilisation du "modulo" et/ou de la */ /* "symetrie", il conviendra en general de modifier certaines de ces six bornes */ /* inferieures et superieures... */ /* */ /* La possibilite de ne pas faire le "modulo" sur les trois coordonnees {X,Y,Z} a ete */ /* introduite le 20071107134417, en garantissant la compatibilite anterieure... */ /* */ /* La possibilite de symetriser les coordonnees fut introduite le 20071107134417... */ /* */ /* On notera que lors de l'utilisation du "modulo" et/ou de la "symetrie", on pourra */ /* utiliser les options suivantes : */ /* */ /* carre_X_CHAMP_3D=FAUX */ /* carre_Y_CHAMP_3D=FAUX */ /* */ /* ('v $xig/fonct$vv$DEF carre_._CHAMP_3D='). */ /* */ /* Le 20071107172302, les bornes inferieures et superieures ont ete rendues specifiques */ /* du "modulo" et/ou de la "symetrie"... */ #define TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____calculer_les_coordonnees_symetriquement)) \ Bblock \ EGAL(Xf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_X_symetriquement) \ ,Xf_transformee \ ,SYME(Xf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_X_symetrique \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_X_symetrique \ ) \ ) \ ); \ EGAL(Yf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Y_symetriquement) \ ,Yf_transformee \ ,SYME(Yf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Y_symetrique \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Y_symetrique \ ) \ ) \ ); \ EGAL(Zf_transformee \ ,COND(IL_NE_FAUT_PAS(ACCES_A_UN_CHAMP_3D_____calculer_la_coordonnee_Z_symetriquement) \ ,Zf_transformee \ ,SYME(Zf_transformee \ ,ACCES_A_UN_CHAMP_3D_____borne_inferieure_de_la_coordonnee_Z_symetrique \ ,ACCES_A_UN_CHAMP_3D_____borne_superieure_de_la_coordonnee_Z_symetrique \ ) \ ) \ ); \ /* Calcul "symetrique" des coordonnees introduit le 20071107134417... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S P A R C O M B I N A I S O N L I N E A I R E : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____combiner_lineairement_les_coordonnees_XYZ,FAUX))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_X,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_translation,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Y,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_translation,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Z,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_translation,FZERO))); /* Introduit le 20090206100827 afin de permettre, par exemple, de permuter des coordonnees. */ /* Ainsi, par exemple : */ /* */ /* pXX=0 pXZ=1 */ /* pZZ=0 pZX=1 */ /* */ /* permettra de permuter les coordonnees 'X' et 'Z'. Evidemment, les valeurs par defaut */ /* garantissent la neutralite du processus et donc la compatibilite anterieure... */ /* */ /* Le 20090915100026 furent introduites les trois translations de {X,Y,Z} afin, par exemple, */ /* de pouvoir translater le resultat du modulo effectue juste avant... */ #define TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____combiner_lineairement_les_coordonnees_XYZ)) \ Bblock \ DEFV(Float,INIT(Xf_permute \ ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_X,Xf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Y,Yf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_Z,Zf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_X_translation \ ) \ ) \ ); \ DEFV(Float,INIT(Yf_permute \ ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_X,Xf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Y,Yf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_Z,Zf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Y_translation \ ) \ ) \ ); \ DEFV(Float,INIT(Zf_permute \ ,LIN3(ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_X,Xf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Y,Yf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_Z,Zf_transformee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_des_coordonnees_Z_translation \ ) \ ) \ ); \ \ EGAL(Xf_transformee,Xf_permute); \ EGAL(Yf_transformee,Yf_permute); \ EGAL(Zf_transformee,Zf_permute); \ /* Combinaison lineaire des {Xf,Yf,Zf} introduit le 20090206100827, par exemple, pour */ \ /* effectuer des permutations entre-elles... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S P A R */ /* A P P L I C A T I O N D E F O N C T I O N S E L E M E N T A I R E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,FAUX ) ) ); #ifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ /* Introduit le 20190203103030... */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____FfLIOH_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,FAUX ) ) ); #Aifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ #Eifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans */ /* 'FfLIO17(...)' (introduit le 20080327102433). */ /* */ /* Le 20190202114212 a ete introduit 'FfLIOH' en parallele a 'FfLIO17' afin d'assurer */ /* la compatibilite anterieure sans faire toutes les compilations necessaires (et cela */ /* en particulier sur '$LACT19'...). */ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_des_fonctions_elementaires,FAUX))); /* Afin de controler l'application de fonctions elementaires aux coordonnees {Xf,Yf,Zf} */ /* (introduit le 20080325151034). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_X,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_X,FZERO))); /* Ponderations des fonctions de la coordonnee 'X' initialise sur 'NEUT(...)' par defaut */ /* (introduit le 20080325151034). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_Y,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_Y,FZERO))); /* Ponderations des fonctions de la coordonnee 'Y' initialise sur 'NEUT(...)' par defaut */ /* (introduit le 20080325151034). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT_Z,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ACOX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_ASIX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COHX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_COSX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CSEX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTGX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_CTHX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_EXPX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_LOGX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_RACX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SECX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SICX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SIHX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_SINX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TAHX_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_TANX_Z,FZERO))); /* Ponderations des fonctions de la coordonnee 'Z' initialise sur 'NEUT(...)' par defaut */ /* (introduit le 20080325151034). */ #ifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ /* Introduit le 20190203103030... */ # define ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue \ IFOU(ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \ ,ACCES_A_UN_CHAMP_3D_____FfLIOH_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \ ) #Aifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ # define ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue \ ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base #Eifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ /* Afin de raccourcir une ligne a venir (introduit le 20090930115352...). */ /* */ /* Le 20190202114212 a ete introduit 'FfLIOH' en parallele a 'FfLIO17' afin d'assurer */ /* la compatibilite anterieure sans faire toutes les compilations necessaires (et cela */ /* en particulier sur '$LACT19'...). */ #define FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(coordonnee,nom_de_la_coordonnee) \ FfLIO17(ACCES_A_UN_CHAMP_3D_____ponderation_NEUT`nom_de_la_coordonnee,NEUT(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_ACOX`nom_de_la_coordonnee,ACOX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_ASIX`nom_de_la_coordonnee,ASIX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_COHX`nom_de_la_coordonnee,COHX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_COSX`nom_de_la_coordonnee,COSX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_CSEX`nom_de_la_coordonnee,CSEX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_CTGX`nom_de_la_coordonnee,CTGX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_CTHX`nom_de_la_coordonnee,CTHX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_EXPX`nom_de_la_coordonnee,EXPX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_LOGX`nom_de_la_coordonnee,LOGO(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_RACX`nom_de_la_coordonnee,RACO(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_SECX`nom_de_la_coordonnee,SECX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_SICX`nom_de_la_coordonnee,SICX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_SIHX`nom_de_la_coordonnee,SIHX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_SINX`nom_de_la_coordonnee,SINX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_TAHX`nom_de_la_coordonnee,TAHX(coordonnee) \ ,ACCES_A_UN_CHAMP_3D_____ponderation_TANX`nom_de_la_coordonnee,TANX(coordonnee) \ ,FZERO \ ) \ /* Afin de pouvoir transformer les coordonnees a l'aide de combinaisons lineaires de */ \ /* fonctions elementaires (introduit le 20080325151034). */ \ /* */ \ /* Le 20220130102633, 'LOGX(ADD2(ABSO(coordonnee),EXPX(FZERO))' et 'RACX(ABSO(coordonnee)' */ \ /* ont ete remplaces respectivement par 'LOGO(coordonnee)' et 'RACO(coordonnee)'... */ #define TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_des_fonctions_elementaires)) \ Bblock \ BSaveModifyVariable(Logical \ ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \ ,ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue \ ); \ /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans */ \ /* 'FfLIO17(...)' (introduit le 20080327102433). */ \ \ EGAL(Xf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Xf_transformee,X)); \ EGAL(Yf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Yf_transformee,Y)); \ EGAL(Zf_transformee,FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Zf_transformee,Z)); \ /* Dispositif introduit le 20080325151034... */ \ \ ESaveModifyVariable(Logical \ ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S */ /* P A R R A P P O R T D E T R A N S F O R M A T I O N S H O M O G R A P H I Q U E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_une_transformation_homographique,FAUX))); /* Afin de controler l'application d'un fonction homographique aux coordonnees {Xf,Yf,Zf} */ /* (introduit le 20180930111810). */ DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_X,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_X,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_X,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_Y,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_Y,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_Y,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100_Z,FU))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001_Z,FZERO))); DEFV(Common,DEFV(Float,ZINT(ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000_Z,FU))); #define FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(nom_de_la_coordonnee) \ DIVI(HORNER_3_01(Xf_avant_homographique,Yf_avant_homographique,Zf_avant_homographique \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a111`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a110`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a101`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a100`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a011`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a010`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a001`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Numerateur___a000`nom_de_la_coordonnee \ ) \ ,HORNER_3_01(Xf_avant_homographique,Yf_avant_homographique,Zf_avant_homographique \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a111`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a110`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a101`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a100`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a011`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a010`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a001`nom_de_la_coordonnee \ ,ACCES_A_UN_CHAMP_3D_____ponderation_Denominateur_a000`nom_de_la_coordonnee \ ) \ ) \ /* Afin de pouvoir transformer les coordonnees a l'aide de fonctions homographiques */ \ /* (introduit le 20180930111810). */ #define TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____appliquer_aux_coordonnees_une_transformation_homographique)) \ Bblock \ DEFV(Float,INIT(Xf_avant_homographique,Xf_transformee)); \ DEFV(Float,INIT(Yf_avant_homographique,Yf_transformee)); \ DEFV(Float,INIT(Zf_avant_homographique,Zf_transformee)); \ \ EGAL(Xf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(X)); \ EGAL(Yf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Y)); \ EGAL(Zf_transformee,FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ(Z)); \ /* Dispositif introduit le 20180930111810... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N D E S C O O R D O N N E E S */ /* P A R P E R M U T A T I O N C A R T E S I E N N E S - S P H E R I Q U E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Logical,ZINT(ACCES_A_UN_CHAMP_3D_____transformer_les_coordonnees_cartesiennes_en_coordonnees_spheriques,FAUX))); /* Afin de permettre la substitution arbitraire : {Xf,Yf,Zf} ==> {Rho_,Phi_,Theta}... */ /* (introduit le 20080922121610). */ #define TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques(x,y,z,t,ASID1,trans_champ,scale) \ /* Procedure introduite le 20181002114537... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____transformer_les_coordonnees_cartesiennes_en_coordonnees_spheriques)) \ /* Possibilite "folklorique" introduite le 20080922121610... */ \ Bblock \ DEFV(Float,INIT(Rho_,Rho_3D(Xf_transformee,Yf_transformee,Zf_transformee))); \ DEFV(Float,INIT(Phi_,Phi_3D(Xf_transformee,Yf_transformee,Zf_transformee))); \ DEFV(Float,INIT(Theta,Theta_3D(Xf_transformee,Yf_transformee,Zf_transformee))); \ /* Calcul de {Rho,Phi,Theta}... */ \ \ EGAL(Xf_transformee,SE13(Rho_,Phi_,Theta)); \ EGAL(Yf_transformee,SE23(Rho_,Phi_,Theta)); \ EGAL(Zf_transformee,SE33(Rho_,Phi_,Theta)); \ /* Correspondance arbitraire {Xf,Yf,Zf} == {Rho_,Phi_,Theta}... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N G E N E R A L E D E S C O O R D O N N E E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Minimal,F_MOINS_L_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Maximal,F_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Minimal,F_MOINS_L_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Maximal,F_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Minimal,F_MOINS_L_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Maximal,F_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Minimal,F_MOINS_L_INFINI))); DEFV(Common,DEFV(Float,ZINT(begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Maximal,F_INFINI))); /* Parametres introduits le 20240524144045 afin de pouvoir generer des "sous-champs"... */ /* */ /* On notera qu'en regle generale, si "carre_X_CHAMP_3D=FAUX" : */ /* */ /* x_normalisee E [-0.5x(dimX/dimY),+0.5x(dimX/dimY)] */ /* y_normalisee E [-0.5,+0.5] */ /* */ /* ce qui se simplifie en : */ /* */ /* x_normalisee E [-0.5,+0.5] */ /* y_normalisee E [-0.5,+0.5] */ /* */ /* si les images sont carrees... */ #define begin_TRANSFORMATION_DES_COORDONNEES_XYZ(x,y,z,t,ASID1,trans_champ,scale) \ /* Le parametre 't' fut introduit le 20100209100622 et n'est a priori pas modifie ci-apres. */ \ Bblock \ DEFV(Float,INIT(x_normalisee,ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D(x,y,z,t,ASID1,trans_champ,scale))); \ DEFV(Float,INIT(y_normalisee,ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D(x,y,z,t,ASID1,trans_champ,scale))); \ DEFV(Float,INIT(z_normalisee,z)); \ DEFV(Float,INIT(t_normalisee,t)); \ /* Definition des coordonnees {x,y,z} apres normalisation eventuelle... */ \ /* */ \ /* On rappelle le 20180930111217 qu'en general et par defaut, les coordonnees sont ici */ \ /* centrees ('v $xci/genere_ch.01$I _TRANSLATION'). L'origine des coordonnees {X,Y} est */ \ /* donc en general et par defaut le centre de l'image... */ \ /* */ \ /* ATTENTION, je note le 20150403184751 (lors de la generation d'images obtenues via */ \ /* 'v $xiirv/.SCOS.11.1.$U') que meme si : */ \ /* */ \ /* Tx=0 */ \ /* Ty=0 */ \ /* */ \ /* trans_champ={0,0} */ \ /* */ \ /* ('v $xci/genere_ch.11$I ASD1.translation.dx.') */ \ /* */ \ /* et si : */ \ /* */ \ /* TRANSLATION_OX=0 */ \ /* TRANSLATION_OY=0 */ \ /* */ \ /* {Xf_transformee,Yf_transformee}Zf_transformee} ci-apres */ \ /* */ \ /* ('v $xci/genere_ch.11$I ACCES_A_UN_CHAMP_3D_____translation_O.') */ \ /* */ \ /* on peut avoir translation des {x_normalisee,y_normalisee} et ce a cause de : */ \ /* */ \ /* xbg=... */ \ /* ybg=... */ \ /* xhd=... */ \ /* yhd=... */ \ /* */ \ /* {ACCES_A_UN_CHAMP_3D_____OX,ACCES_A_UN_CHAMP_3D_____EX} */ \ /* {ACCES_A_UN_CHAMP_3D_____OY,ACCES_A_UN_CHAMP_3D_____EY} */ \ /* ('v $xci/genere_ch.11$I ACCES_A_UN_CHAMP_3D_____O.') */ \ /* */ \ /* qui par defaut sont de part et d'autre de l'origine, soit par defaut : */ \ /* */ \ /* xbg=-0.5 */ \ /* ybg=-0.5 */ \ /* xhd=+0.5 */ \ /* yhd=+0.5 */ \ /* */ \ /* ce qui provoque par defaut des translations {-1/2,-1/2}... */ \ Test(I4ET(INCLff(x_normalisee \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Minimal \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____x_Maximal \ ) \ ,INCLff(y_normalisee \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Minimal \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____y_Maximal \ ) \ ,INCLff(z_normalisee \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Minimal \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____z_Maximal \ ) \ ,INCLff(t_normalisee \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Minimal \ ,begin_TRANSFORMATION_DES_COORDONNEES_XYZ_____t_Maximal \ ) \ ) \ ) \ /* Test introduit le 20240524144045 afin de pouvoir generer des "sous-champs"... */ \ Bblock \ DEFV(Float,INIT(Xf_transformee,FLOT__UNDEF)); \ DEFV(Float,INIT(Yf_transformee,FLOT__UNDEF)); \ DEFV(Float,INIT(Zf_transformee,FLOT__UNDEF)); \ DEFV(Float,INIT(Tf_transformee,FLOT__UNDEF)); \ /* Definition des coordonnees {Xf,Yf,Zf} apres transformation... */ \ \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_avec_les_rotations)) \ /* Ce test a ete introduit le 20060517105000 afin d'avoir le choix entre initialiser */ \ /* la matrice 'v $xiii/vecteurs$FON vecteurs_____matrix_3D' par un produit de rotations, */ \ /* ou bien la laisser intacte... */ \ Bblock \ Test(IL_FAUT(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation)) \ Bblock \ T_ZOOM(INVZ(ACCES_A_UN_CHAMP_3D_____rapport_courant_du_zoom)); \ /* Mise en place du rapport de zoom (introduit le 20060622184543). ATTENTION : on notera */ \ /* que c'est l'inverse du rapport de zoom argument qu'il faut utiliser. En effet, imaginons */ \ /* que l'on ait calcule un champ au point {X,Y} ; un zoom de rapport 2 (c'est-a-dire que */ \ /* l'on veut agrandir deux fois le champ) demandera que l'on calcule le champ au point */ \ /* {X/2,Y/2} ; c'est donc bien l'inverse du rapport de zoom qu'il faut utiliser... */ \ \ GENERATION_DE_LA_MATRICE_DE_ROTATION(vecteurs_____ordre_de_la_ROTATION_0X \ ,T_ROTATION_X(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OX); \ ,vecteurs_____ordre_de_la_ROTATION_0Y \ ,T_ROTATION_Y(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OY); \ ,vecteurs_____ordre_de_la_ROTATION_0Z \ ,T_ROTATION_Z(ACCES_A_UN_CHAMP_3D_____angle_de_ROTATION_OZ); \ ); \ /* Mise en place du produit des trois rotations relatives aux trois axes. */ \ \ EGAL(ACCES_A_UN_CHAMP_3D_____initialiser_la_matrice_de_rotation,FAUX); \ /* La matrice de rotation est initialisee... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Dans ce cas, la matrice de rotation 'v $xiii/vecteurs$FON vecteurs_____matrix_3D' reste */ \ /* inchangee (voir par exemple 'v $xci/genere_ch.11$I vecteurs_____matrix_3D')... */ \ Eblock \ ETes \ \ EGAL(Xf_transformee \ ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(x_normalisee \ ,y_normalisee \ ,z_normalisee \ ,ACCES_A_UN_CHAMP_3D_____translation_OX \ ) \ ); \ EGAL(Yf_transformee \ ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(x_normalisee \ ,y_normalisee \ ,z_normalisee \ ,ACCES_A_UN_CHAMP_3D_____translation_OY \ ) \ ); \ EGAL(Zf_transformee \ ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(x_normalisee \ ,y_normalisee \ ,z_normalisee \ ,ACCES_A_UN_CHAMP_3D_____translation_OZ \ ) \ ); \ /* Transformation des coordonnees... */ \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__modulo(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques(x,y,z,t \ ,ASID1 \ ,trans_champ,scale \ ); \ \ begin_nouveau_block \ Bblock \ EGAL(Tf_transformee,t_normalisee); \ /* La quatrieme coordonnee fut introduite le 20100209100622 et a priori n'est pas modifie */ \ /* puique les transformations possibles sont tridimensionnelles... */ \ Eblock \ end_nouveau_block \ /* Debut de la transformation des coordonnees {Xf,Yf,Zf}... */ #define end_TRANSFORMATION_DES_COORDONNEES_XYZ(x,y,z,t,ASID1,trans_champ,scale) \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Fin de la transformation des coordonnees {Xf,Yf,Zf}... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A I T E M E N T D E S P O I N T S D ' U N C H A M P : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Ftraitement_des_points_d_un_champ_____binariser_le_champ,FAUX))); /* Doit-on binariser le champ ('VRAI') ou pas ('FAUX'), la valeur par defaut garantissant */ /* la compatibilite anterieure... */ DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____seuil_de_binarisation,FDU))); DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____valeur_inferieure,FZERO))); DEFV(Common,DEFV(Float,SINT(Ftraitement_des_points_d_un_champ_____valeur_superieure,FU))); /* Parametres de la binarisation... */ DEFV(Local,DEFV(FonctionF,Ftraitement_des_points_d_un_champ(amplificateur_fonction,valeur_fonction,translateur_fonction))) /* Fonction introduite le 20150408091613... */ DEFV(Argument,DEFV(Float,amplificateur_fonction)); DEFV(Argument,DEFV(Float,valeur_fonction)); DEFV(Argument,DEFV(Float,translateur_fonction)); /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(valeur_fonction_transformee,AXPB(amplificateur_fonction,valeur_fonction,translateur_fonction))); /* Valeur de la fonction apres transformation lineaire... */ /*..............................................................................................................................*/ Test(IL_FAUT(Ftraitement_des_points_d_un_champ_____binariser_le_champ)) Bblock Test(IFLE(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____seuil_de_binarisation)) /* Ce test est compatible avec celui de 'v $xiii/di_image$FON IFbinarisation_generale'... */ Bblock EGAL(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____valeur_inferieure); Eblock ATes Bblock EGAL(valeur_fonction_transformee,Ftraitement_des_points_d_un_champ_____valeur_superieure); Eblock ETes Eblock ATes Bblock Eblock ETes RETU(valeur_fonction_transformee); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E D I T I O N D E S E X T R E M A D E S C O O R D O N N E E S { X , Y , Z , T } : */ /* */ /*************************************************************************************************************************************/ #define EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(editer) \ Bblock \ Test(IL_FAUT(editer)) \ /* Possibilite introduite le 20150404082521... */ \ Bblock \ Test(IFOU(IFET(IFEQ(X,Xmin),IFEQ(Y,Ymin)) \ ,IFET(IFEQ(X,Xmax),IFEQ(Y,Ymax)) \ ) \ ) \ Bblock \ CAL2(Prin4("extrema : Xf=%+.^^^ Yf=%+.^^^ Zf=%+.^^^ Tf=%+.^^^\n" \ ,Xf_transformee \ ,Yf_transformee \ ,Zf_transformee \ ,Tf_transformee \ ) \ ); \ /* Le 20190620110245, je constate un probleme de normalisation des coordonnees {X,Y} que */ \ /* l'on voit, par exemple, avec 'v $xci/gauss$K' (sans aucun parametres) qui donne : */ \ /* */ \ /* minima : Xf=-0.5 Yf=-0.5 Zf=+0 Tf=+0 */ \ /* maxima : Xf=+0.498046875 Yf=+0.498046875 Zf=+0 Tf=+0 */ \ /* */ \ /* ce qui montre que l'origine n'est pas au milieu des segments des extrema... */ \ /* */ \ /* Le 20190620122255, je note que les options : */ \ /* */ \ /* COORDONNEES_____compatibilite_20090929=v TX=0 TY=0 */ \ /* */ \ /* permettent d'atteindre l'origine : */ \ /* */ \ /* minima : Xf=-0.5 Yf=-0.5 Zf=+0 Tf=+0 */ \ /* maxima : Xf=+0.5 Yf=+0.5 Zf=+0 Tf=+0 */ \ /* */ \ /* mais avec les messages 'v $xci/genere_ch.11$I peut.etre.incoherente.a.cause.de' que */ \ /* l'on fait disparaitre via "CAL1=FAUX CAL3=FAUX' en passant de 'CAL3(Prme4(...))' a */ \ /* 'CAL2(Prin4(...))'. */ \ /* */ \ /* Cela s'est vu lors de la mise au point de l'image 'v $xiia/VASA.24.256' qui a demande une */ \ /* modification des arguments 'v $xiia/$Fnota COORDONNEES_____compatibilite_20090929'... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure introduite le 20190620104122... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E F L O T T A N T E P A R U N E F O N C T I O N : */ /* */ /* */ /* Definition : */ /* */ /* L'initialisation au point {X,Y} se fait */ /* de la facon suivante : */ /* */ /* NIVEAU(X,Y) = Amplificateur*Fonction[(Ex.Xf + Tx),(Ey.Yf + Ty),Zf,Tf] + Translateur */ /* */ /* ou {Xf,Yf} designent les valeurs normalisees */ /* de {X,Y} et : */ /* */ /* {Ex,Ey} = echelle */ /* {Tx,Ty} = translation_du_champ */ /* */ /* et ou 'Amplificateur' et 'Translateur' designent */ /* 'amplificateur_de_la_fonction' et 'translateur_de_la_fonction' */ /* respectivement... */ /* */ /*************************************************************************************************************************************/ BFonctionF /* ATTENTION, a la date du 20080408093157 j'ai voulu deplacer ce 'BFonctionF' et le mettre */ /* avant l'ensemble des 'SINT(...)'s qui precedent et qui sont relatifs a la procedure */ /* 'ACCES_A_UN_CHAMP_3D(...)' principalement. Mais malheusement, cela n'est pas tres */ /* logique car, en effet les deux procedures 'begin_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' */ /* et 'end_TRANSFORMATION_DES_COORDONNEES_XYZ(...)' ne sont pas utilisees uniquement par la */ /* fonction 'IFgenere_champ(...)', mais aussi par les deux fonctions 'Igenere_champ(...)' */ /* et 'IJgenere_champ(...)'. D'ou le retablissement de la localisation anterieure de ce */ /* 'BFonctionF'... */ /* ATTENTION, la notion d'interieur et d'exterieur (rectangulaire...) pour un champ n'est */ /* offerte qu'a 'IFgenere_champ(...)' et pas aux autres fonctions 'Igenere_champ(...)' (sauf */ /* dans le cas 'IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement)' ou */ /* 'Igenere_champ(...)' reference 'IFgenere_champ(...)') et 'IJgenere_champ(...)'. */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____il_y_a_une_fonction_de_X_Y_a_executer_prealablement,FAUX))); DEFV(Common,DEFV(Void,INIT(fPOINTEUR(IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement)(DEFV(Argument,DEFV(Int,X)) ,DEFV(Argument,DEFV(Int,Y)) ) ,ADRESSE_NON_ENCORE_DEFINIE ) ) ); /* Dispositif introduit le 20210117102409 afin de pouvoir, par exemple, changer les */ /* arguments implicites de la fonction 'Fxyzt(...)' pour chaque couple de coordonnees {X,Y}. */ /* */ /* ATTENTION : 'IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement' et 'Common,' */ /* doivent etre sur la meme ligne a cause de 'v $xcg/gen$EXT$D/GetCommon$vv$Y __...Common'. */ /* En fait, la formulation ci-dessus et sa mise en page doivent etre strictement respectees, */ /* c'est plus prudent ! */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____remplacer_Xf_Yf_Zf_Tf_par_Rho_Theta_Phi_Alpha,FAUX))); /* Introduit le 20231215104506 afin de permettre de remplacer brutalement {Xf,Yf} par */ /* 'Rho_2D(Xf,Yf)' et 'Theta_2D(Xf,Yf)'... */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf,FAUX))); /* Introduit le 20150404082521 afin de faciliter le parametrage de 'IFgenere_champ(...)'. */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____calculer_le_champ_tronque,FAUX))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_inferieure_du_champ_tronque,COORDONNEE_BARYCENTRIQUE_MINIMALE))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_superieure_du_champ_tronque,COORDONNEE_BARYCENTRIQUE_MAXIMALE))); /* Introduit le 20061127114018 pour permettre un calcul tronque du champ calcule par */ /* 'IFgenere_champ(...)', en particulier dans 'v $xci/toroidal_2tr$K' pour lequel cela */ /* fut fait initialement... */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____calculer_le_champ_modulo,FAUX))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_inferieure_du_champ_modulo,COORDONNEE_BARYCENTRIQUE_MINIMALE))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____borne_superieure_du_champ_modulo,COORDONNEE_BARYCENTRIQUE_MAXIMALE))); /* Introduit le 20060608103107 pour permettre un calcul modulo du champ calcule par */ /* 'IFgenere_champ(...)'. */ DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____niveau_exterieur,EXTERIEUR_D_UN_CHAMP_3D))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Xmin,F_MOINS_LE_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Xmax,F_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Ymin,F_MOINS_LE_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Ymax,F_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Zmin,F_MOINS_LE_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Zmax,F_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Tmin,F_MOINS_LE_PETIT_INFINI))); DEFV(Common,DEFV(Float,SINT(IFgenere_champ_____Tmax,F_PETIT_INFINI))); /* Definition de l'interieur d'un champ (a priori tout R^3) et de la valeur a attribuer */ /* a son exterieur, cette notion se limitant evidemment a une forme rectangulaire. La */ /* coordonnee 'Z' fut introduite le 20060516091854. La coordonnee 'T' fut introduite */ /* le 20100209100622... */ /* ATTENTION, la notion d'interieur et d'exterieur (rectangulaire...) pour un champ n'est */ /* offerte qu'a 'IFgenere_champ(...)' et pas aux autres fonctions 'Igenere_champ(...)' et */ /* 'IJgenere_champ(...)'. */ DEFV(Common,DEFV(Logical,SINT(IFgenere_champ_____renormaliser_le_champ_automatiquement,FAUX))); /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut */ /* introduit le 20090303102818. */ DEFV(Common,DEFV(FonctionF,POINTERF(IFgenere_champ(imageR ,amplificateur_de_la_fonction ,ARGUMENT_FONCTION(Fxyzt) ,translateur_de_la_fonction ,ARGUMENT_POINTERs(translation_du_champ) ,ARGUMENT_POINTERs(echelle) ,Zf ,Tf ) ) ) ) /* Avant le 20050903110301, la fonction 'Igenere_champ(...)' etait situee logiquement */ /* avant la fonction 'IFgenere_champ(...)'. Mais depuis l'introduction le 20050902111326 */ /* de l'option 'Igenere_champ_____renormaliser_le_champ_automatiquement', il est logique */ /* que 'Igenere_champ(...)' utilise 'IFgenere_champ(...)', d'ou cet ordre nouveau, la */ /* fonction 'IFgenere_champ(...)' precedant la fonction 'Igenere_champ(...)'... */ DEFV(Argument,DEFV(imageF,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction)); /* Amplificateur de la fonction. */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fxyzt))); /* Fonction de calcul du niveau normalise du point courant {X,Y}. */ DEFV(Argument,DEFV(Float,translateur_de_la_fonction)); /* Translateur de la fonction. */ DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ))); /* Translation bi-dimensionnelle du champ a generer. */ /* */ /* Concernant 'translation_du_champ', voir 'v $xiii/mono_image$FON 20150403184751'... */ DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle))); /* Echelle bi-dimensionnelle du champ a generer. */ DEFV(Argument,DEFV(Float,Zf)); /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z' */ /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de */ /* 'Fgaussien(...)'). */ DEFV(Argument,DEFV(Float,Tf)); /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'. */ /* Celle-ci fut introduite le 20100209100622 et est en general inutile... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Bblock EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(IFgenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf); /* Introduit le 20190620104122... */ begin_nouveau_block Bblock DEFV(Float,INIT(niveau_du_champ,FLOT__UNDEF)); Test(IL_FAUT(IFgenere_champ_____remplacer_Xf_Yf_Zf_Tf_par_Rho_Theta_Phi_Alpha)) Bblock DEFV(Float,INIT(Xf_transformee_Rho__,Rho_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee))); DEFV(Float,INIT(Yf_transformee_Theta,Theta_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee))); DEFV(Float,INIT(Zf_transformee_Phi__,Phi_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee))); DEFV(Float,INIT(Tf_transformee_Alpha,Alpha_4D(Xf_transformee,Yf_transformee,Zf_transformee,Tf_transformee))); EGAL(Xf_transformee,Xf_transformee_Rho__); EGAL(Yf_transformee,Yf_transformee_Theta); EGAL(Zf_transformee,Zf_transformee_Phi__); EGAL(Tf_transformee,Tf_transformee_Alpha); /* Dispositif introduit le 20231215104506... */ Eblock ATes Bblock Eblock ETes Test(EST_VRAI(IFgenere_champ_____il_y_a_une_fonction_de_X_Y_a_executer_prealablement)) Bblock CALS(fPOINTEUR(IFgenere_champ_____fonction_de_X_Y_a_executer_prealablement)(X,Y)); /* Dispositif introduit le 20210117102409 afin de pouvoir, par exemple, changer les */ /* arguments implicites de la fonction 'Fxyzt(...)' pour chaque couple de coordonnees {X,Y} */ /* (voir 'v $xci/PolyCartesUniversel_2D$K Idefinition_des_coefficients' par exemple...). */ Eblock ATes Bblock Eblock ETes EGAL(niveau_du_champ ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction ,fPOINTEUR,Fxyzt ,translateur_de_la_fonction ,X,Y,Zf ,ASI1 ,translation_du_champ ,echelle ) ); /* Niveau flottant calcule par la fonction. ATTENTION, on utilise ici le type 'Float' car */ /* c'est celui de la fonction d'initialisation 'Fxyzt'... */ /* */ /* ATTENTION : on notera que le triplet argument {X,Y,Zf} ne sert a rien et c'est en fait */ /* le triplet {Xf_transformee,Yf_transformee,Zf_transformee} qui seul est utilise (voir */ /* 'v $xiii/mono_image$DEF ACCES_A_UN_CHAMP_3D_TRANSFORME' a ce propos...). */ /* */ /* Le 20100210110346 j'ai fait des experiences relatives aux coordonnees {Xf,Yf} calculees */ /* suivant les options "carre_X_CHAMP_3D=" et "carre_Y_CHAMP_3D=". Voici en mode 'Puh' les */ /* extrema des coordonnees {Xf_transformee,Yf_transformee} : */ /* */ /* carre_X_CHAMP_3D=VRAI (mode par */ /* carre_Y_CHAMP_3D=VRAI defaut) */ /* [-0.676056,-0.492958]x[+0.676056,+0.492958] */ /* */ /* carre_X_CHAMP_3D=VRAI */ /* carre_Y_CHAMP_3D=FAUX */ /* [-0.676056,-0.492958]x[+0.676056,+0.492958] */ /* */ /* et : */ /* */ /* carre_X_CHAMP_3D=FAUX */ /* carre_Y_CHAMP_3D=FAUX */ /* [-0.494845,-0.492958]x[+0.494845,+0.492958] */ /* */ /* carre_X_CHAMP_3D=FAUX */ /* carre_Y_CHAMP_3D=VRAI */ /* [-0.494845,-0.492958]x[+0.494845,+0.492958] */ /* */ /* Ainsi, les couples {VRAI,VRAI} et {VRAI,FAUX} donnent les memes extrema. Il en est de */ /* meme des couples {FAUX,FAUX} et {FAUX,VRAI}. Cela implique que la valeur de l'argument */ /* "carre_Y_CHAMP_3D=" est indifferent, seul compte "carre_X_CHAMP_3D="... */ Test(IL_FAUT(IFgenere_champ_____calculer_le_champ_tronque)) Bblock EGAL(niveau_du_champ ,TRON(niveau_du_champ ,IFgenere_champ_____borne_inferieure_du_champ_tronque ,IFgenere_champ_____borne_superieure_du_champ_tronque ) ); /* Le calcul "tronque" du champ a ete introduit le 20061127114018... */ Eblock ATes Bblock Eblock ETes Test(IL_FAUT(IFgenere_champ_____calculer_le_champ_modulo)) Bblock EGAL(niveau_du_champ ,MODF(niveau_du_champ ,IFgenere_champ_____borne_inferieure_du_champ_modulo ,IFgenere_champ_____borne_superieure_du_champ_modulo ) ); /* Le calcul "modulo" du champ a ete introduit le 20060608103107... */ Eblock ATes Bblock Eblock ETes storeF_point(COND(I4ET(IFINff(ACCES_A_LA_COORDONNEE_X_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf ,ASI1 ,translation_du_champ,echelle ) ,IFgenere_champ_____Xmin ,IFgenere_champ_____Xmax ) ,IFINff(ACCES_A_LA_COORDONNEE_Y_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf ,ASI1 ,translation_du_champ,echelle ) ,IFgenere_champ_____Ymin ,IFgenere_champ_____Ymax ) ,IFINff(ACCES_A_LA_COORDONNEE_Z_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf ,ASI1 ,translation_du_champ,echelle ) ,IFgenere_champ_____Zmin ,IFgenere_champ_____Zmax ) ,IFINff(ACCES_A_LA_COORDONNEE_T_D_UN_CHAMP_3D_TRANSFORME(X,Y,Zf,Tf ,ASI1 ,translation_du_champ,echelle ) ,IFgenere_champ_____Tmin ,IFgenere_champ_____Tmax ) ) ,niveau_du_champ /* Cas des points {X,Y} interieurs au champ. */ ,IFgenere_champ_____niveau_exterieur /* Cas des points {X,Y} exterieurs au champ. */ ) ,imageR ,X,Y ); /* Initialisation element par element. */ Eblock end_nouveau_block Eblock end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Eblock end_image Test(IL_FAUT(IFgenere_champ_____renormaliser_le_champ_automatiquement)) /* Test introduit le 20090303102818... */ Bblock BDEFV(imageF,imageR_renormalisee); /* Image Resultat renormalisee... */ CALS(IFnormalisation_automatique(imageR_renormalisee,imageR)); /* Et renormalisation... */ CALS(IFmove(imageR,imageR_renormalisee)); EDEFV(imageF,imageR_renormalisee); /* Image Resultat renormalisee... */ Eblock ATes Bblock Eblock ETes RETIF(imageR); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E S T A N D A R D P A R U N E F O N C T I O N : */ /* */ /* */ /* Definition : */ /* */ /* L'initialisation au point {X,Y} se fait */ /* de la facon suivante : */ /* */ /* NIVEAU(X,Y) = Amplificateur*Fonction[(Ex.Xf + Tx),(Ey.Yf + Ty)] + Translateur */ /* */ /* ou {Xf,Yf} designent les valeurs normalisees */ /* de {X,Y} et : */ /* */ /* {Ex,Ey} = echelle */ /* {Tx,Ty} = translation_du_champ */ /* */ /* et ou 'Amplificateur' et 'Translateur' designent */ /* 'amplificateur_de_la_fonction' et 'translateur_de_la_fonction' */ /* respectivement... */ /* */ /*************************************************************************************************************************************/ BFonctionP DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____compatibilite_20050902,FAUX))); /* Afin d'assurer la compatibilite anterieure au 20050902111326. On notera que cela fut */ /* introduit tres tardivement (le 20080331163303) lors de la generation des images du type */ /* 'v $xiak/$xiak/REFN.82$R16' a cause de 'v $xivP/disk.000000009/face.2/.REFL$ERR.21.$U' */ /* qui utilise '$xci/module$X'... */ /* */ /* Le 20080605134909, je note (avec '$xci/gauss$X', '$xci/module$X' et '$xci/trefle$X') que */ /* cette option semble ne servir a rien, les resultats etant les memes qu'elle soit vraie */ /* ou fausse, mais en fait, il n'en est rien, la difference n'apparaissant que si la */ /* fonction est amplifiee ('v $xivP/disk.000000009/face.2/.REFL$ERR.21.$U _____AModule')... */ DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____renormaliser_le_champ_automatiquement,FAUX))); /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut */ /* introduit le 20050902111326. On notera le 20080331163303 que la valeur 'VRAI' n'assure */ /* pas la compatibilite anterieure, d'ou 'Igenere_champ_____compatibilite_20050902' */ /* ci-dessus introduit bien tardivement (le 20080331163303) apres avoir pris conscience */ /* de cela a cette date... */ DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf,FAUX))); /* Introduit le 20190620104122 afin de faciliter le parametrage de 'Igenere_champ(...)'. */ DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____calculer_le_champ_tronque,FAUX))); DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_inferieure_du_champ_tronque,NOIR))); DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_superieure_du_champ_tronque,BLANC))); /* Introduit le 20061127114018 pour permettre un calcul tronque de 'IFgenere_champ(...)'. */ DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____calculer_le_champ_modulo,FAUX))); DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_inferieure_du_champ_modulo,NOIR))); DEFV(Common,DEFV(genere_p,SINT(Igenere_champ_____borne_superieure_du_champ_modulo,BLANC))); /* Introduit le 20060608103107 pour permettre un calcul modulo de 'IFgenere_champ(...)'. */ /* */ /* ATTENTION : si 'IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement)' ce */ /* sont les options correspondantes de 'IFgenere_champ(....)' qu'il faut utiliser ! */ DEFV(Common,DEFV(Logical,SINT(Igenere_champ_____editer_le_message__hors__0_1,VRAI))); /* Inroduit le 20190602141403 pour faciliter l'usage des "arithmetique_etendue_...' avec */ /* '$xci/trefle$X arithmetique_etendue_trefle=VRAI pxADD2_ADD2=0 pxMAX2_ADD2=1 ...' par */ /* exemple... */ DEFV(Common,DEFV(FonctionP,POINTERp(Igenere_champ(imageR ,amplificateur_de_la_fonction ,ARGUMENT_FONCTION(Fxyzt) ,translateur_de_la_fonction ,ARGUMENT_POINTERs(translation_du_champ) ,ARGUMENT_POINTERs(echelle) ,Zf ,Tf ) ) ) ) /* Avant le 20050903110301, la fonction 'Igenere_champ(...)' etait situee logiquement */ /* avant la fonction 'IFgenere_champ(...)'. Mais depuis l'introduction le 20050902111326 */ /* de l'option 'Igenere_champ_____renormaliser_le_champ_automatiquement', il est logique */ /* que 'Igenere_champ(...)' utilise 'IFgenere_champ(...)', d'ou cet ordre nouveau, la */ /* fonction 'IFgenere_champ(...)' precedant la fonction 'Igenere_champ(...)'... */ DEFV(Argument,DEFV(image,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction)); /* Amplificateur de la fonction. */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fxyzt))); /* Fonction de calcul du niveau normalise du point courant {X,Y}. */ DEFV(Argument,DEFV(Float,translateur_de_la_fonction)); /* Translateur de la fonction. */ DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ))); /* Translation bi-dimensionnelle du champ a generer. */ /* */ /* Concernant 'translation_du_champ', voir 'v $xiii/mono_image$FON 20150403184751'... */ DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle))); /* Echelle bi-dimensionnelle du champ a generer. */ DEFV(Argument,DEFV(Float,Zf)); /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z' */ /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de */ /* 'Fgaussien(...)'). */ DEFV(Argument,DEFV(Float,Tf)); /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'. */ /* Celle-ci fut introduite le 20100209100622 et est en general inutile... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ Test(IL_FAUT(Igenere_champ_____renormaliser_le_champ_automatiquement)) /* Test introduit le 20050902111326... */ Bblock BDEFV(imageF,imageR_flottante); /* Image flottante Resultat... */ BSaveModifyVariable(Float ,IFgenere_champ_____renormaliser_le_champ_automatiquement ,FAUX ); /* Afin d'utiliser la compatibilite anterieure au 20090303102818... */ CALS(IFgenere_champ(imageR_flottante ,amplificateur_de_la_fonction ,Fxyzt ,translateur_de_la_fonction ,translation_du_champ ,echelle ,Zf ,Tf ) ); /* Initialisation flottante du champ. On notera qu'avant le 20050903110301, cela etait */ /* fait ici "localement" par une boucle {begin_image,end_image}. Apres cette date, l'usage */ /* logique de la fonction 'IFgenere_champ(...)' fait qu'alors les arguments implicites de */ /* cette fonction {[XY]min_pour_IFgenere_champ,[XY]max_pour_IFgenere_champ} s'appliquent */ /* alors a 'Igenere_champ(...)', mais donc uniquement dans le cas ou le champ 'imageR' est */ /* a renormaliser... */ CALS(Ifloat_std_avec_renormalisation(imageR,imageR_flottante)); /* Conversion de l'image Resultat en une image standard... */ ESaveModifyVariable(Float ,IFgenere_champ_____renormaliser_le_champ_automatiquement ); EDEFV(imageF,imageR_flottante); /* Image flottante Resultat... */ Eblock ATes Bblock begin_image Bblock DEFV(Float,INIT(niveau_du_champ,FLOT__UNDEF)); /* Niveau flottant calcule par la fonction ; on procede ainsi, parce que la */ /* procedure '__DENORMALISE_NIVEAU' n'est pas tres rapide. ATTENTION, on utilise */ /* ici le type 'Float' car c'est celui de la fonction d'initialisation 'Fxyzt'... */ DEFV(Int,INIT(niveau_du_champ_denormalise,NIVEAU_UNDEF)); /* Niveau du champ apres denormalisation. ATTENTION, on utilise ici le type 'Int' afin que */ /* la denormalisation de 'niveau_du_champ' ne nous fasse pas passer dans [NOIR,BLANC] */ /* modulo COULEURS automatiquement (comme cela serait le cas avec 'genere_p'...). */ begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Bblock EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT(Igenere_champ_____editer_les_extrema_de_Xf_Yf_Zf_Tf); /* Introduit sous cette forme le 20190620104122... */ EGAL(niveau_du_champ ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction ,fPOINTEUR,Fxyzt ,translateur_de_la_fonction ,X,Y,Zf ,ASI1 ,translation_du_champ ,echelle ) ); /* Valeur du champ... */ EGAL(niveau_du_champ_denormalise,INTE(F___DENORMALISE_NIVEAU(niveau_du_champ))); /* Denormalisation du champ. On notera le 'INTE(F___DENORMALISE_NIVEAU(...))' destine a */ /* ne pas perdre la dynamique (comme '__DENORMALISE_NIVEAU(...)' ferait en nous faisant */ /* passer automatiquement dans [NOIR,BLANC] modulo COULEURS...). */ Test(IL_FAUT(Igenere_champ_____compatibilite_20050902)) Bblock EGAL(niveau_du_champ_denormalise,TRNF(niveau_du_champ_denormalise)); /* Compatibilite anterieure au 20050902111326 introduite le 20080331163303... */ Eblock ATes Bblock Test(IL_FAUT(Igenere_champ_____calculer_le_champ_tronque)) Bblock EGAL(niveau_du_champ_denormalise ,TRON(niveau_du_champ_denormalise ,Igenere_champ_____borne_inferieure_du_champ_tronque ,Igenere_champ_____borne_superieure_du_champ_tronque ) ); /* Le calcul "tronque" du champ a ete introduit le 20061127114018... */ Eblock ATes Bblock Eblock ETes Test(IL_FAUT(Igenere_champ_____calculer_le_champ_modulo)) Bblock EGAL(niveau_du_champ_denormalise ,MODS(niveau_du_champ_denormalise ,Igenere_champ_____borne_inferieure_du_champ_modulo ,Igenere_champ_____borne_superieure_du_champ_modulo ) ); /* Le calcul "modulo" du champ a ete introduit le 20060608103107... */ Eblock ATes Bblock Eblock ETes Eblock ETes Test(IFOU(IL_FAUT(Igenere_champ_____calculer_le_champ_tronque) ,IL_FAUT(Igenere_champ_____calculer_le_champ_modulo) ) ) Bblock Eblock ATes Bblock Test(IFEXff(niveau_du_champ_denormalise ,NOIR ,BLANC ) ) /* Jusqu'au 20060515101549, le test precedent etait : */ /* */ /* Test(IZLT(niveau_du_champ)) */ /* */ /* ce qui manquait de precision... */ /* */ /* Jusqu'au 20080331162521, c'etait 'niveau_du_champ' qui etait test ci-dessus et non */ /* pas 'niveau_du_champ_denormalise' par erreur. De meme, les bornes utilisees */ /* {COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE} etaient aussi */ /* incorrectes et furent remplacees par {NOIR,BLANC} a cette date... */ Bblock Test(IL_FAUT(Igenere_champ_____editer_le_message__hors__0_1)) /* Test introduit le 20190602141403... */ Bblock PRINT_ERREUR("un niveau hors [0,1] est apparu"); Eblock ATes Bblock Eblock ETes Eblock ATes Bblock Eblock ETes Eblock ETes store_point(GENP(niveau_du_champ_denormalise) ,imageR ,X,Y ,FVARIABLE ); /* Initialisation element par element. */ Eblock end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Eblock end_image Eblock ETes RETI(imageR); Eblock EFonctionP #undef EDITION_DES_EXTREMA_DES_COORDONNEES_XYZT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E C O M P L E X E P A R U N E F O N C T I O N : */ /* */ /*************************************************************************************************************************************/ BFonctionJ /* ATTENTION, le 20060516091854, a cause des nouvelles fonctionnalites introduites (en ce */ /* concerne les transformations geometriques des coordonnees {x,y,z}, la fonction */ /* 'IJgenere_champ(...)' a ete mise dans le meme bloc que 'IFgenere_champ(...)'... */ DEFV(Common,DEFV(Logical,SINT(IJgenere_champ_____renormaliser_le_champ_automatiquement,FAUX))); /* Doit-on renormaliser le champ automatiquement ('VRAI') ou pas ('FAUX'). Ceci fut */ /* introduit le 20121114125709. */ DEFV(Common,DEFV(FonctionJ,POINTERJ(IJgenere_champ(imageR ,amplificateur_de_la_fonction ,ARGUMENT_FONCTION(Fx),ARGUMENT_FONCTION(Fy) ,translateur_de_la_fonction ,ARGUMENT_POINTERs(translation_du_champ) ,ARGUMENT_POINTERs(echelle) ,Zf ,Tf ) ) ) ) DEFV(Argument,DEFV(imageJ,imageR)); /* Image resultat a initialiser. */ DEFV(Argument,DEFV(Float,amplificateur_de_la_fonction)); /* Amplificateur de la fonction. */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fx))); /* Fonction de calcul de la partie reelle du niveau du point courant {X,Y}, */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fy))); /* Fonction de calcul de la partie imaginaire du niveau du point courant {X,Y}. */ DEFV(Argument,DEFV(Float,translateur_de_la_fonction)); /* Translateur de la fonction. */ DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation_du_champ))); /* Translation bi-dimensionnelle du champ a generer. */ DEFV(Argument,DEFV(coeffF_2D,POINTERs(echelle))); /* Echelle bi-dimensionnelle du champ a generer. */ DEFV(Argument,DEFV(Float,Zf)); /* Coordonnee 'Z' flottante donnant dans un segment du type [0,1] la coordonnee 'Z' */ /* utilisee eventuellement par la fonction 'Fxyzt(...)' (c'est le cas en particulier de */ /* 'Fgaussien(...)'). */ DEFV(Argument,DEFV(Float,Tf)); /* Coordonnee 'T' flottante donnant dans un segment du type [0,1] la coordonnee 'T'. */ /* Celle-ci fut introduite le 20100209100622 et est en general inutile... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ begin_image Bblock begin_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Bblock DEFV(complexe,niveau_du_champ); /* Niveau complexe calcule par les deux fonctions (Fx,Fy). */ Cinitialisation(niveau_du_champ ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction ,fPOINTEUR,Fx ,translateur_de_la_fonction ,X,Y,Zf ,ASI1 ,translation_du_champ ,echelle ) ,ACCES_A_UN_CHAMP_3D_TRANSFORME(amplificateur_de_la_fonction ,fPOINTEUR,Fy ,translateur_de_la_fonction ,X,Y,Zf ,ASI1 ,translation_du_champ ,echelle ) ); storeJ_point(niveau_du_champ ,imageR ,X,Y ); /* Initialisation element par element. */ Eblock end_TRANSFORMATION_DES_COORDONNEES_XYZ(X,Y,Zf,Tf,ASI1,translation_du_champ,echelle) Eblock end_image Test(IL_FAUT(IJgenere_champ_____renormaliser_le_champ_automatiquement)) /* Test introduit le 20121114125709... */ Bblock BDEFV(imageJ,imageR_renormalisee); /* Image Resultat renormalisee... */ CALS(IJnormalisation_automatique(imageR_renormalisee,imageR)); /* Et renormalisation... */ CALS(IJmove(imageR,imageR_renormalisee)); EDEFV(imageJ,imageR_renormalisee); /* Image Resultat renormalisee... */ Eblock ATes Bblock Eblock ETes RETIJ(imageR); Eblock EFonctionJ #undef end_TRANSFORMATION_DES_COORDONNEES_XYZ #undef begin_TRANSFORMATION_DES_COORDONNEES_XYZ #undef TRANSFORMATION_DES_COORDONNEES_XYZ__par_permutation_cartesiennes_spheriques #undef TRANSFORMATION_DES_COORDONNEES_XYZ__par_rapport_de_transformations_homographiques #undef FONCTIONS_2_DE_TRANSFORMATION_DES_COORDONNEES_XYZ #undef TRANSFORMATION_DES_COORDONNEES_XYZ__par_application_de_fonctions_elementaires #undef FONCTIONS_1_DE_TRANSFORMATION_DES_COORDONNEES_XYZ #ifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ # undef ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue #Aifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ # undef ACCES_A_UN_CHAMP_3D_____FfLIO17_____utiliser_l_arithmetique_etendue #Eifdef ASSURER_LA_COEXISTENCE_DE__LIOH__ET_DE__LIO17 /* Common,DEFV(Fonction,) : 'LIOH' et 'LIO17'... */ #undef TRANSFORMATION_DES_COORDONNEES_XYZ__par_combinaison_lineaire #undef TRANSFORMATION_DES_COORDONNEES_XYZ__par_symetrisation #undef TRANSFORMATION_DES_COORDONNEES_XYZ__modulo _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " U N I F O R M E " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "uniforme" est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = constante */ /* */ /* ceci ayant ete introduit le 20030507112907 */ /* pour 'v $xci/morlet.12$K Funiforme'... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(Funiforme_____valeur,FZERO))); /* Constante d'initialisation uniforme par defaut... */ DEFV(Common,DEFV(FonctionF,Funiforme(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Funiforme(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Funiforme(...)' est utile... */ RETU(Funiforme_____valeur); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " N E U T R E " P O U R L A C O O R D O N N E E ' X ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "neutre" pour 'X' est */ /* defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = X */ /* */ /* On notera que 'Fneutre_X(...)' */ /* aurait pu etre defini a partir de */ /* 'Flineaire(...)', mais que cette */ /* solution n'a pas ete choisie pour */ /* des raisons de simplicite... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fneutre_X(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RETU(Xf); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " N E U T R E " P O U R L A C O O R D O N N E E ' Y ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "neutre" pour 'Y' est */ /* defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = Y */ /* */ /* On notera que 'Fneutre_Y(...)' */ /* aurait pu etre defini a partir de */ /* 'Flineaire(...)', mais que cette */ /* solution n'a pas ete choisie pour */ /* des raisons de simplicite... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fneutre_Y(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock /*..............................................................................................................................*/ RETU(Yf); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " L I N E A I R E " E N ' X ' E T ' Y ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "lineaire" en 'X' et 'Y' est */ /* defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = a.X + b.Y + c */ /* */ /* On notera que 'Fneutre_X(...)' */ /* 'Fneutre_Y(...)' auraient pu etre */ /* definis a partir de 'Flineaire(...)', */ /* mais que cette solution n'a pas ete */ /* choisie pour des raisons de simplicite... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Flineaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_A,FU))); DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_B,FU))); DEFV(Common,DEFV(Float,SINT(Flineaire_____coefficient_C,FZERO))); /* Parametres 'a', 'b' et 'c' dans la definition ci-dessus... */ DEFV(Common,DEFV(FonctionF,Flineaire(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "lineaire". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Flineaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Flineaire(...)' est utile... */ USs_GooF______CONDITIONNEL(Flineaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,LIN2(Flineaire_____coefficient_A,Xf ,Flineaire_____coefficient_B,Yf ,Flineaire_____coefficient_C ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)'. */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " U N I V E R S E L 1 " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "universel 1" est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = FfTransformUniverselle1(pa.X + pb.Y + t) */ /* */ /* ceci ayant ete introduit le 20220116172352... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_X,FU))); DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_Y,FU))); DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_Z,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_1_____ponderation_T,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_1_____translation_XYZT,FZERO))); /* Constantes de transformation de {Xf,Yf,Zf,Tf} en un scalaire... */ DEFV(Common,DEFV(FonctionF,Funiversel_1(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant */ /* inutilisees... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "Universel 1". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Funiversel_1(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Funiversel_1(...)' est utile... */ EGAL(fxyzt ,FfTransformUniverselle1(LIN4(Funiversel_1_____ponderation_X,Xf ,Funiversel_1_____ponderation_Y,Yf ,Funiversel_1_____ponderation_Z,Zf ,Funiversel_1_____ponderation_T,Tf ,Funiversel_1_____translation_XYZT ) ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " H O R N E R I E N " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "Hornerien" est un polynome */ /* en {X,Y,Z,T} defini par l'equation : */ /* */ /* F(X,Y,Z,T) = HORNER_4_01(X,Y,Z,T) */ /* */ /* On notera que l'ordre des index des */ /* coefficients est l'inverse des coordonnees, */ /* c'est-a-dire que l'indexation est du type */ /* A(T,Z,Y,X). */ /* */ /* Ceci fut introduit le 20100209120800. */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fhorner_4_01_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF'. */ DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1111,FU))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1110,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1101,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1100,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1011,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1010,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1001,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a1000,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0111,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0110,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0101,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0100,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0011,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0010,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0001,FZERO))); DEFV(Common,DEFV(Float,SINT(Fhorner_4_01_____a0000,FZERO))); /* Coefficients du polynome, l'indexation etant faite dans l'ordre inverse de l'ordre des */ /* coordonnees, soit : A(T,Z,Y,X). */ DEFV(Common,DEFV(FonctionF,Fhorner_4_01(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "Hornerien". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); USs_GooF______CONDITIONNEL(Fhorner_4_01_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,BLOC( Bblock EGAL(fxyzt ,HORNER_4_01(Xf,Yf,Zf,Tf ,Fhorner_4_01_____a1111 ,Fhorner_4_01_____a1110 ,Fhorner_4_01_____a1101 ,Fhorner_4_01_____a1100 ,Fhorner_4_01_____a1011 ,Fhorner_4_01_____a1010 ,Fhorner_4_01_____a1001 ,Fhorner_4_01_____a1000 ,Fhorner_4_01_____a0111 ,Fhorner_4_01_____a0110 ,Fhorner_4_01_____a0101 ,Fhorner_4_01_____a0100 ,Fhorner_4_01_____a0011 ,Fhorner_4_01_____a0010 ,Fhorner_4_01_____a0001 ,Fhorner_4_01_____a0000 ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)'. */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P S D E B A S E : */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,FU))); DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,FU))); DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,FZERO))); DEFV(Common,DEFV(Float,ZINT(GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base,FZERO))); /* ATTENTION : on notera que ces quatre parametres sont communs a l'ensemble des fonctions */ /* definies par 'GENERE__FonctionF_Champ_de_base(...)', mais il peut difficilement en etre */ /* differemment ; en particulier on ne peut les mettre dans cette procedure sous la forme : */ /* */ /* DEFV(Common,DEFV(Float,INIT(???????????_?_Champ_de_base`procedure,...))); */ /* */ /* a cause de 'v $xcg/gen$EXT$Z' qui ne pourrait alors faire son travail sur ces 'Common's. */ #define GENERE__FonctionF_Champ_de_base(nom_et_arguments_de_la_fonction,procedure,inclus_dans,borne_inferieure,borne_superieure) \ /* ATTENTION : le nom de la fonction est suivi de ses arguments pour des raisons liees */ \ /* a la recuperation automatique des fichiers d'arguments. */ \ /* */ \ /* Ce generateur a ete introduit le 20041130112633... */ \ DEFV(FonctionF,nom_et_arguments_de_la_fonction) \ /* Le resultat est egal a 'procedure(pX.Xf + pY.Yf + pZ.Zf + t)'. */ \ DEFV(Argument,DEFV(Float,Xf)); \ DEFV(Argument,DEFV(Float,Yf)); \ DEFV(Argument,DEFV(Float,Zf)); \ DEFV(Argument,DEFV(Float,Tf)); \ /* Coordonnees flottantes dans [0,1[. */ \ /*-----------------------------------------------------------------------------------------------------------------------------------*/ \ Bblock \ DEFV(Float,INIT(xyz \ ,LIN3(GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,Xf \ ,GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,Yf \ ,GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,Zf \ ,GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base \ ) \ ) \ ); \ /* Combinaison lineaire des coordonnees {Xf,Yf,Zf}. */ \ DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); \ /* Valeur de 'procedure(pX.Xf + pY.Yf + pZ.Zf + t)'. */ \ /*..............................................................................................................................*/ \ /* On notera que l'on ne peut faire ici : */ \ /* */ \ /* RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(...); */ \ /* */ \ /* les 'SINT(...)'s ci-dessus etant communs a plusieurs fonctions generees automatiquement */ \ /* par cette procedure 'GENERE__FonctionF_Champ_de_base(...)'... */ \ \ Test(inclus_dans(xyz,borne_inferieure,borne_superieure)) \ /* Ce test a ete introduit le 20041130122855... */ \ Bblock \ EGAL(fxyzt,procedure(xyz)); \ Eblock \ ATes \ Bblock \ PRINT_ERREUR("la combinaison lineaire des coordonnees {X,Y,Z} est en dehors des 'limites'"); \ CAL1(Prer0("(")); \ CAL1(Prer8("((%g)x(%g))+((%g)x(%g))+((%g)x(%g))+(%g)=%g" \ ,GENERE__FonctionF_Champ_de_base_____ponderation_X_Champ_de_base,Xf \ ,GENERE__FonctionF_Champ_de_base_____ponderation_Y_Champ_de_base,Yf \ ,GENERE__FonctionF_Champ_de_base_____ponderation_Z_Champ_de_base,Zf \ ,GENERE__FonctionF_Champ_de_base_____translation___Champ_de_base \ ,xyz \ ) \ ); \ CAL1(Prer2(" n'est pas dans [%g,%g]",borne_inferieure,borne_superieure)); \ CAL1(Prer0(")\n")); \ Eblock \ ETes \ \ RETU(fxyzt); \ Eblock #define mINFINI \ F_MOINS_L_INFINI #define ZERO___ \ FZERO #define pINFINI \ F_INFINI #define mUN____ \ NEGA(FU) #define pUN____ \ NEUT(FU) #define PI_____ \ PI #define mPI_S_2 \ NEGA(PI_SUR_2) #define pPI_S_2 \ NEUT(PI_SUR_2) /* Pour reduire la longueur des lignes qui suivent... */ BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_COSX(Xf,Yf,Zf,Tf),COSX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SINX(Xf,Yf,Zf,Tf),SINX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_TANX(Xf,Yf,Zf,Tf),TANX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SICX(Xf,Yf,Zf,Tf),SICX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_COHX(Xf,Yf,Zf,Tf),COHX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_SIHX(Xf,Yf,Zf,Tf),SIHX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_TAHX(Xf,Yf,Zf,Tf),TAHX,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_ACOX(Xf,Yf,Zf,Tf),ACOX,IFINff,mUN____,pUN____)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_ASIX(Xf,Yf,Zf,Tf),ASIX,IFINff,mUN____,pUN____)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_RACX(Xf,Yf,Zf,Tf),RACX,IFINff,ZERO___,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_EXPB(Xf,Yf,Zf,Tf),EXPB,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_EX10(Xf,Yf,Zf,Tf),EX10,IFINff,mINFINI,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_LO1X(Xf,Yf,Zf,Tf),LO1X,IFINof,ZERO___,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF BFonctionF DEFV(Common,GENERE__FonctionF_Champ_de_base(Fchamp_LO2X(Xf,Yf,Zf,Tf),LO2X,IFINof,ZERO___,pINFINI)) /* Common,DEFV(Fonction,) : */ EFonctionF #undef pPI_S_2 #undef mPI_S_2 #undef PI_____ #undef pUN____ #undef mUN____ #undef pINFINI #undef ZERO___ #undef mINFINI #undef GENERE__FonctionF_Champ_de_base _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " M O D U L E " : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fmodule_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(FonctionF,Fmodule(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "module". */ /*..............................................................................................................................*/ USs_GooF______CONDITIONNEL(Fmodule_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt,Rho_2D(Xf,Yf)); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " A R G U M E N T " : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fargument_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(FonctionF,Fargument(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "argument". */ /*..............................................................................................................................*/ USs_GooF______CONDITIONNEL(Fargument_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt,Theta_2D(Xf,Yf)); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P P O L A I R E : */ /* */ /* */ /* Definition : */ /* */ /* Un champ polaire est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = alpha.Rho.cos(omega.Theta+phi) + beta.Rho.sin(omega.Theta+phi) */ /* */ /* ou {Rho,Theta} sont les coordonnees polaires de {X,Y}. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fpolaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fpolaire_____alpha,FU))); DEFV(Common,DEFV(Float,SINT(Fpolaire_____beta,FZERO))); /* Ponderations des composantes {cos,sin}. */ DEFV(Common,DEFV(Float,SINT(Fpolaire_____omega,FU))); DEFV(Common,DEFV(Float,SINT(Fpolaire_____phi,FZERO))); /* Transformation lineaire du 'Theta'. */ DEFV(Common,DEFV(FonctionF,Fpolaire(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20050701112150... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ polaire. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fpolaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fpolaire(...)' est utile... */ USs_GooF______CONDITIONNEL(Fpolaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf))); DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf))); /* Coordonnees polaires de {Xf,Yf}. */ EGAL(fxyzt ,LIZ2(Fpolaire_____alpha ,MUL2(Rho,COSX(AXPB(Fpolaire_____omega,Theta,Fpolaire_____phi))) ,Fpolaire_____beta ,MUL2(Rho,SINX(AXPB(Fpolaire_____omega,Theta,Fpolaire_____phi))) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " H Y P E R B O L I Q U E 1 " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "hyperbolique 1" polynomial en 'X' et 'Y' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = {F1(Rho),F2(Theta)} */ /* */ /* tel que : */ /* */ /* F1(Rho) = Rho(X,Y) */ /* F2(Theta) = ATAH(Theta(X,Y)) */ /* */ /* en renvoyant en fait une combinaison lineaire de */ /* 'Relle(...)' et de 'Imaginaire(...)'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fhyperbolique_1_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF'. */ DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____facteur_de_reduction_de_Rho,FU))); /* Afin de permettre de "moduler" le 'Rho'... */ DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____ponderation_de_la_coordonnee_X,FU))); DEFV(Common,DEFV(Float,SINT(Fhyperbolique_1_____ponderation_de_la_coordonnee_Y,FZERO))); /* Afin de permettre, par exemple, la selection de 'X' (plutot que 'Y')... */ DEFV(Common,DEFV(FonctionF,Fhyperbolique_1(Xf,Yf,Zf,Tf))) /* Fonction introduit le 20120519173508... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant */ /* inutilisees... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "hyperbolique". */ /*..............................................................................................................................*/ USs_GooF______CONDITIONNEL(Fhyperbolique_1_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,BLOC( Bblock DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf))); DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf))); /* Coordonnees polaires de {Xf,Yf} avant transformation. */ DEFV(Float,INIT(Rho_transforme,FLOT__UNDEF)); DEFV(Float,INIT(Theta_transforme,FLOT__UNDEF)); /* Coordonnees polaires de {Xf,Yf} apres transformation. */ EGAL(Theta_transforme,Theta); /* L'angle 'Theta' reste inchange... */ EGAL(Rho_transforme,MUL2(Rho,Fhyperbolique_1_____facteur_de_reduction_de_Rho)); Test(IFLT(Rho_transforme,FU)) Bblock Eblock ATes Bblock PRINT_ERREUR("a cause de 'ATAH(...)' le facteur de reduction du module est trop grand"); CAL1(Prer2("(Rho=%f facteur=%f)\n",Rho,Fhyperbolique_1_____facteur_de_reduction_de_Rho)); EGAL(Rho_transforme,SOUS(Rho_transforme,GRAND_EPSILON)); /* C'est plus prudent... */ Eblock ETes EGAL(Rho_transforme,ATAH(Rho_transforme)); /* Seul 'Rho' subit une transformation... */ EGAL(fxyzt ,LIZ2(Fhyperbolique_1_____ponderation_de_la_coordonnee_X ,Xcartesienne_2D(Rho_transforme,Theta_transforme) ,Fhyperbolique_1_____ponderation_de_la_coordonnee_Y ,Ycartesienne_2D(Rho_transforme,Theta_transforme) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " H Y P E R B O L I Q U E 2 " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "hyperbolique 1" polynomial en 'X' et 'Y' */ /* est defini par l'equation : */ /* */ /* A.Z + B */ /* F(X,Y,Z) = F(X,Y) = E.--------- */ /* C.Z + D */ /* */ /* en renvoyant en fait une combinaison lineaire de */ /* 'Relle(...)' et de 'Imaginaire(...)'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fhyperbolique_2_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF'. */ DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_A,IstructL02(FZERO,FU___)))); DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_B,IstructL02(FU___,FZERO)))); DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_C,IstructL02(FU___,FZERO)))); DEFV(Common,DEFV(complexe,SINS(Fhyperbolique_2_____nombre_D,IstructL02(FZERO,FU___)))); /* Definition des quatre parametres {A,B,C,D} de la transformation homographique initialisee */ /* telle qu'il s'agisse de la transformation : */ /* */ /* i.z + 1 */ /* w = --------- */ /* z + i */ /* */ /* qui correspond au mapping conforme canonique du demi-plan complexe superieur (qui */ /* correspond donc a 'Imaginaire(z) > 0) vers le disque hyperbolique de Poincare. En */ /* particulier l'axe Reel devient le bord du disque (soit '|w| = 1'). */ DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____Rho__nombre_E,FU___))); DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____Theta_nombre_E,FZERO))); /* Le facteur multiplicatif 'E' a ete introduit le 20120525210525 pour faciliter une */ /* rotation du resultat... */ DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____ponderation_de_la_coordonnee_X,FU))); DEFV(Common,DEFV(Float,SINT(Fhyperbolique_2_____ponderation_de_la_coordonnee_Y,FZERO))); /* Afin de permettre, par exemple, la selection de 'X' (plutot que 'Y')... */ DEFV(Common,DEFV(FonctionF,Fhyperbolique_2(Xf,Yf,Zf,Tf))) /* Fonction introduit le 20120520120034... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, les coordonnees 'Zf' et 'Tf' etant */ /* inutilisees... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "hyperbolique". */ /*..............................................................................................................................*/ USs_GooF______CONDITIONNEL(Fhyperbolique_2_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,BLOC( Bblock DEFV(complexe,point_courant); DEFV(complexe,point_courant_transforme_1); DEFV(complexe,INIS(nombre_E,IstructL02(CcomposanteR(Fhyperbolique_2_____Rho__nombre_E ,Fhyperbolique_2_____Theta_nombre_E ) ,CcomposanteI(Fhyperbolique_2_____Rho__nombre_E ,Fhyperbolique_2_____Theta_nombre_E ) ) ) ); DEFV(complexe,point_courant_transforme_2); Cinitialisation(point_courant,Xf,Yf); TRANSFORMATION__Z_HOMOGRAPHIQUE(point_courant_transforme_1 ,point_courant ,Fhyperbolique_2_____nombre_A ,Fhyperbolique_2_____nombre_B ,Fhyperbolique_2_____nombre_C ,Fhyperbolique_2_____nombre_D ,NEUT ); /* Transformation homographique du point courant... */ Cproduit(point_courant_transforme_2 ,nombre_E ,point_courant_transforme_1 ); /* Cette similitude a ete introduite le 20120525210525... */ EGAL(fxyzt ,LIZ2(Fhyperbolique_2_____ponderation_de_la_coordonnee_X ,Reelle(point_courant_transforme_2) ,Fhyperbolique_2_____ponderation_de_la_coordonnee_Y ,Imaginaire(point_courant_transforme_2) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P P O L Y N O M I A L E N ' X ' E T ' Y ' ( B I D I M E N S I O N N E L ) : */ /* */ /* */ /* Definition : */ /* */ /* Un champ polynomial en 'X' et 'Y' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = PolynomeQuatriemeDegre(X,Y) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = F(X,Y) = X+Y */ /* */ /* ou {X,Y} sont les coordonnees cartesiennes. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_4__X_0,FZERO))); /* Definition du premier polynome en 'X' (puissance la plus elevee de 'Y'). */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_3__X_0,FZERO))); /* Definition du second polynome en 'X'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_2__X_0,FZERO))); /* Definition du troisieme polynome en 'X'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_1__X_0,FU))); /* Definition du quatrieme polynome en 'X'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_1,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_2D_____Y_0__X_0,FZERO))); /* Definition du dernier polynome en 'X' (puissance la plus faible de 'Y'). */ DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_2D(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20071016144613... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fpolynome_cartesienne_2D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fpolynome_cartesienne_2D(...)' est utile... */ USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,HORNER_2_04(Xf,Yf ,Fpolynome_cartesienne_2D_____Y_4__X_4 ,Fpolynome_cartesienne_2D_____Y_4__X_3 ,Fpolynome_cartesienne_2D_____Y_4__X_2 ,Fpolynome_cartesienne_2D_____Y_4__X_1 ,Fpolynome_cartesienne_2D_____Y_4__X_0 ,Fpolynome_cartesienne_2D_____Y_3__X_4 ,Fpolynome_cartesienne_2D_____Y_3__X_3 ,Fpolynome_cartesienne_2D_____Y_3__X_2 ,Fpolynome_cartesienne_2D_____Y_3__X_1 ,Fpolynome_cartesienne_2D_____Y_3__X_0 ,Fpolynome_cartesienne_2D_____Y_2__X_4 ,Fpolynome_cartesienne_2D_____Y_2__X_3 ,Fpolynome_cartesienne_2D_____Y_2__X_2 ,Fpolynome_cartesienne_2D_____Y_2__X_1 ,Fpolynome_cartesienne_2D_____Y_2__X_0 ,Fpolynome_cartesienne_2D_____Y_1__X_4 ,Fpolynome_cartesienne_2D_____Y_1__X_3 ,Fpolynome_cartesienne_2D_____Y_1__X_2 ,Fpolynome_cartesienne_2D_____Y_1__X_1 ,Fpolynome_cartesienne_2D_____Y_1__X_0 ,Fpolynome_cartesienne_2D_____Y_0__X_4 ,Fpolynome_cartesienne_2D_____Y_0__X_3 ,Fpolynome_cartesienne_2D_____Y_0__X_2 ,Fpolynome_cartesienne_2D_____Y_0__X_1 ,Fpolynome_cartesienne_2D_____Y_0__X_0 ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " U N I V E R S E L " P O L Y N O M I A L E N ' X ' E T ' Y ' ( B I D I M E N S I O N N E L ) : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "universel" polynomial en 'X' et 'Y' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = FfLIO17(ponderation,PolynomeQuatriemeDegre(X,Y),...) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = F(X,Y) = X+Y */ /* */ /* ou {X,Y} sont les coordonnees cartesiennes. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Funiversel_polynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,FAUX ) ) ); /* Afin de permettre l'usage du 'GooF'... */ DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_NEUT,FU))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_ACOX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_ASIX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_COHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_COSX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CSEX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CTGX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_CTHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_EXPX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_LOGX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_RACX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SECX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SICX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SIHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_SINX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_TAHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_cartesienne_2D_____ponderation_TANX,FZERO))); /* Ponderations des fonctions de la 'fxyzt' initialise sur 'NEUT(...)' par defaut... */ DEFV(Common,DEFV(FonctionF,Funiversel_polynome_cartesienne_2D(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20080409121547... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant */ /* 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Funiversel_polynome_cartesienne_2D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Funiversel_polynome_cartesienne_2D(...)' est utile... */ begin_nouveau_block Bblock DEFV(Float,INIT(pxy,Fpolynome_cartesienne_2D(Xf,Yf,Zf,Tf))); /* Valeur du polynome du quatrieme degre en 'X' et 'Y'... */ BSaveModifyVariable(Logical ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,Funiversel_polynome_cartesienne_2D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ); /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans */ /* 'FfLIO17(...)'... */ EGAL(fxyzt ,FfLIO17(Funiversel_polynome_cartesienne_2D_____ponderation_NEUT,NEUT(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_ACOX,ACOX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_ASIX,ASIX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_COHX,COHX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_COSX,COSX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_CSEX,CSEX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_CTGX,CTGX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_CTHX,CTHX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_EXPX,EXPX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_LOGX,LOGO(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_RACX,RACO(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_SECX,SECX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_SICX,SICX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_SIHX,SIHX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_SINX,SINX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_TAHX,TAHX(pxy) ,Funiversel_polynome_cartesienne_2D_____ponderation_TANX,TANX(pxy) ,FZERO ) ); /* Le 20220130102633, 'LOGX(ADD2(ABSO(pxy),EXPX(FZERO))' et 'RACX(ABSO(pxy)' ont ete */ /* remplaces respectivement par 'LOGO(pxy)' et 'RACO(pxy)'... */ ESaveModifyVariable(Logical ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ); Eblock end_nouveau_block RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P P O L Y N O M I A L E N ' R H O ' E T ' T E T A ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ polynomial en 'Rho' et 'Theta' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = PolynomeQuatriemeDegre(Rho,Theta) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = F(X,Y) = Rho+Theta */ /* */ /* ou {Rho,Theta} sont les coordonnees polaires de {X,Y}. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fpolynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_4__Rho_0,FZERO))); /* Definition du premier polynome en 'Rho' (puissance la plus elevee de 'Theta'). */ DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_3__Rho_0,FZERO))); /* Definition du second polynome en 'Rho'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_2__Rho_0,FZERO))); /* Definition du troisieme polynome en 'Rho'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_1__Rho_0,FU))); /* Definition du quatrieme polynome en 'Rho'. */ DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_4,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_1,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_polaire_____Theta_0__Rho_0,FZERO))); /* Definition du dernier polynome en 'Rho' (puissance la plus faible de 'Theta'). */ DEFV(Common,DEFV(Logical,SINT(Fpolynome_polaire_____symetriser_Theta_par_rapport_a_pi,FAUX))); /* Faut-il symetriser 'Theta' par rapport a 'pi' ou le conserver tel quel (ceci fut */ /* introduit le 20071024162929 afin de donner la possibiliter de supprimer la discontinuite */ /* du champ genere en passant de 2.pi a 0) ? */ DEFV(Common,DEFV(FonctionF,Fpolynome_polaire(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20071002091910... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome polaire". */ DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf))); DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf))); /* Coordonnees polaires de {Xf,Yf}. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fpolynome_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fpolynome_polaire(...)' est utile... */ Test(IL_FAUT(Fpolynome_polaire_____symetriser_Theta_par_rapport_a_pi)) Bblock EGAL(Theta,SYME(Theta,FZERO,CERCLE_TRIGONOMETRIQUE)); /* Cette symetrisation de 'Theta', ramenant [0,2.pi] a [0,pi,0] fut introduite le */ /* 20071024162929... */ Eblock ATes Bblock Eblock ETes USs_GooF______CONDITIONNEL(Fpolynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,HORNER_2_04(Rho,Theta ,Fpolynome_polaire_____Theta_4__Rho_4 ,Fpolynome_polaire_____Theta_4__Rho_3 ,Fpolynome_polaire_____Theta_4__Rho_2 ,Fpolynome_polaire_____Theta_4__Rho_1 ,Fpolynome_polaire_____Theta_4__Rho_0 ,Fpolynome_polaire_____Theta_3__Rho_4 ,Fpolynome_polaire_____Theta_3__Rho_3 ,Fpolynome_polaire_____Theta_3__Rho_2 ,Fpolynome_polaire_____Theta_3__Rho_1 ,Fpolynome_polaire_____Theta_3__Rho_0 ,Fpolynome_polaire_____Theta_2__Rho_4 ,Fpolynome_polaire_____Theta_2__Rho_3 ,Fpolynome_polaire_____Theta_2__Rho_2 ,Fpolynome_polaire_____Theta_2__Rho_1 ,Fpolynome_polaire_____Theta_2__Rho_0 ,Fpolynome_polaire_____Theta_1__Rho_4 ,Fpolynome_polaire_____Theta_1__Rho_3 ,Fpolynome_polaire_____Theta_1__Rho_2 ,Fpolynome_polaire_____Theta_1__Rho_1 ,Fpolynome_polaire_____Theta_1__Rho_0 ,Fpolynome_polaire_____Theta_0__Rho_4 ,Fpolynome_polaire_____Theta_0__Rho_3 ,Fpolynome_polaire_____Theta_0__Rho_2 ,Fpolynome_polaire_____Theta_0__Rho_1 ,Fpolynome_polaire_____Theta_0__Rho_0 ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P U N I V E R S E L P O L Y N O M I A L E N ' R H O ' E T ' T E T A ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "universel" polynomial en 'Rho' et 'Theta' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = FfLIO17(ponderation,PolynomeQuatriemeDegre(Rho,Theta),...) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = F(X,Y) = Rho+Theta */ /* */ /* ou {Rho,Theta} sont les coordonnees polaires de {X,Y}. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Funiversel_polynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,FAUX ) ) ); /* Afin de permettre l'usage du 'GooF'... */ DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_NEUT,FU))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_ACOX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_ASIX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_COHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_COSX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CSEX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CTGX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_CTHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_EXPX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_LOGX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_RACX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SECX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SICX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SIHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_SINX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_TAHX,FZERO))); DEFV(Common,DEFV(Float,SINT(Funiversel_polynome_polaire_____ponderation_TANX,FZERO))); /* Ponderations des fonctions de la 'fxyzt' initialise sur 'NEUT(...)' par defaut... */ DEFV(Common,DEFV(FonctionF,Funiversel_polynome_polaire(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20080409121547... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome polaire". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant */ /* 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Funiversel_polynome_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Funiversel_polynome_polaire(...)' est utile... */ begin_nouveau_block Bblock DEFV(Float,INIT(pxy,Fpolynome_polaire(Xf,Yf,Zf,Tf))); /* Valeur du polynome du quatrieme degre en 'X' et 'Y'... */ BSaveModifyVariable(Logical ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,Funiversel_polynome_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ); /* Afin de choisir entre l'arithmetique "de base" et l'arithmetique "etendue" dans */ /* 'FfLIO17(...)'... */ EGAL(fxyzt ,FfLIO17(Funiversel_polynome_polaire_____ponderation_NEUT,NEUT(pxy) ,Funiversel_polynome_polaire_____ponderation_ACOX,ACOX(pxy) ,Funiversel_polynome_polaire_____ponderation_ASIX,ASIX(pxy) ,Funiversel_polynome_polaire_____ponderation_COHX,COHX(pxy) ,Funiversel_polynome_polaire_____ponderation_COSX,COSX(pxy) ,Funiversel_polynome_polaire_____ponderation_CSEX,CSEX(pxy) ,Funiversel_polynome_polaire_____ponderation_CTGX,CTGX(pxy) ,Funiversel_polynome_polaire_____ponderation_CTHX,CTHX(pxy) ,Funiversel_polynome_polaire_____ponderation_EXPX,EXPX(pxy) ,Funiversel_polynome_polaire_____ponderation_LOGX,LOGO(pxy) ,Funiversel_polynome_polaire_____ponderation_RACX,RACO(pxy) ,Funiversel_polynome_polaire_____ponderation_SECX,SECX(pxy) ,Funiversel_polynome_polaire_____ponderation_SICX,SICX(pxy) ,Funiversel_polynome_polaire_____ponderation_SIHX,SIHX(pxy) ,Funiversel_polynome_polaire_____ponderation_SINX,SINX(pxy) ,Funiversel_polynome_polaire_____ponderation_TAHX,TAHX(pxy) ,Funiversel_polynome_polaire_____ponderation_TANX,TANX(pxy) ,FZERO ) ); /* Le 20220130102633, 'LOGX(ADD2(ABSO(pxy),EXPX(FZERO))' et 'RACX(ABSO(pxy)' ont ete */ /* remplaces respectivement par 'LOGO(pxy)' et 'RACO(pxy)'... */ ESaveModifyVariable(Logical ,FfLIO17_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ); Eblock end_nouveau_block RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P P O L Y N O M I A L E N ' X ' , ' Y ' , ' R H O ' E T ' T E T A ' : */ /* */ /* */ /* Definition : */ /* */ /* Un champ polynomial en 'X', 'Y', 'Rho' et 'Theta' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = PolynomePremierDegre(X,Y,Rho,Theta) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = F(X,Y) = X+Y+Rho+Theta */ /* */ /* ou {Rho,Theta} sont les coordonnees polaires de {X,Y}. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,FAUX ) ) ); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_0,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_0,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_0,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_1,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_0,FZERO))); /* Definition du polynome... */ DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_polaire_____symetriser_Theta_par_rapport_a_pi,FAUX))); /* Faut-il symetriser 'Theta' par rapport a 'pi' ou le conserver tel quel ? Ceci permet */ /* de donner la possibiliter de supprimer la discontinuite du champ genere en passant */ /* de 2.pi a 0. */ DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_polaire(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20071027103704... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien polaire". */ DEFV(Float,INIT(Rho,Rho_2D(Xf,Yf))); DEFV(Float,INIT(Theta,Theta_2D(Xf,Yf))); /* Coordonnees polaires de {Xf,Yf}. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fpolynome_cartesienne_polaire(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fpolynome_cartesienne_polaire(...)' est utile... */ Test(IL_FAUT(Fpolynome_cartesienne_polaire_____symetriser_Theta_par_rapport_a_pi)) Bblock EGAL(Theta,SYME(Theta,FZERO,CERCLE_TRIGONOMETRIQUE)); /* Cette symetrisation de 'Theta', ramenant [0,2.pi] a [0,pi,0] fut introduite le */ /* 20071024162929... */ Eblock ATes Bblock Eblock ETes USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_polaire_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,HORNER_4_01(Xf,Yf,Rho,Theta ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_1 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_1__X_0 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_1 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_1__Y_0__X_0 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_1 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_1__X_0 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_1 ,Fpolynome_cartesienne_polaire_____Theta_1__Rho_0__Y_0__X_0 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_1 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_1__X_0 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_1 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_1__Y_0__X_0 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_1 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_1__X_0 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_1 ,Fpolynome_cartesienne_polaire_____Theta_0__Rho_0__Y_0__X_0 ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P P O L Y N O M I A L E N ' X ' , ' Y ' E T ' Z ' ( T R I D I M E N S I O N N E L ) : */ /* */ /* */ /* Definition : */ /* */ /* Un champ polynomial en 'X', 'Y' et 'Z' */ /* est defini par l'equation : */ /* */ /* F(X,Y,Z) = PolynomeDeuxiemeDegre(X,Y,Z) */ /* */ /* initialise par defaut avec : */ /* */ /* F(X,Y,Z) = X+Y+Z */ /* */ /* ou {X,Y} sont les coordonnees cartesiennes. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fpolynome_cartesienne_3D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF'... */ DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_3__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_2__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_3__Y_0__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_3__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_2__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_2__Y_0__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_3__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_2__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_1__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_1__Y_0__X_0,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_3__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_2__X_0,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_1,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_1__X_0,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_3,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_2,FZERO))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_1,FU))); DEFV(Common,DEFV(Float,SINT(Fpolynome_cartesienne_3D_____Z_0__Y_0__X_0,FZERO))); DEFV(Common,DEFV(FonctionF,Fpolynome_cartesienne_3D(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20210125110537... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[, 'Tf' etant inutilisee... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "polynome cartesien". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Cette restauration se fera grace au code suivant (avec 'FLOT__AI' representant */ /* 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fpolynome_cartesienne_3D(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fpolynome_cartesienne_3D(...)' est utile... */ USs_GooF______CONDITIONNEL(Fpolynome_cartesienne_3D_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,BLOC( Bblock EGAL(fxyzt ,HORNER_3_03(Xf,Yf,Zf ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_3 ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_2 ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_1 ,Fpolynome_cartesienne_3D_____Z_3__Y_3__X_0 ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_3 ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_2 ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_1 ,Fpolynome_cartesienne_3D_____Z_3__Y_2__X_0 ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_3 ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_2 ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_1 ,Fpolynome_cartesienne_3D_____Z_3__Y_1__X_0 ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_3 ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_2 ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_1 ,Fpolynome_cartesienne_3D_____Z_3__Y_0__X_0 ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_3 ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_2 ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_1 ,Fpolynome_cartesienne_3D_____Z_2__Y_3__X_0 ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_3 ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_2 ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_1 ,Fpolynome_cartesienne_3D_____Z_2__Y_2__X_0 ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_3 ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_2 ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_1 ,Fpolynome_cartesienne_3D_____Z_2__Y_1__X_0 ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_3 ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_2 ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_1 ,Fpolynome_cartesienne_3D_____Z_2__Y_0__X_0 ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_3 ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_2 ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_1 ,Fpolynome_cartesienne_3D_____Z_1__Y_3__X_0 ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_3 ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_2 ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_1 ,Fpolynome_cartesienne_3D_____Z_1__Y_2__X_0 ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_3 ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_2 ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_1 ,Fpolynome_cartesienne_3D_____Z_1__Y_1__X_0 ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_3 ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_2 ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_1 ,Fpolynome_cartesienne_3D_____Z_1__Y_0__X_0 ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_3 ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_2 ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_1 ,Fpolynome_cartesienne_3D_____Z_0__Y_3__X_0 ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_3 ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_2 ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_1 ,Fpolynome_cartesienne_3D_____Z_0__Y_2__X_0 ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_3 ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_2 ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_1 ,Fpolynome_cartesienne_3D_____Z_0__Y_1__X_0 ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_3 ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_2 ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_1 ,Fpolynome_cartesienne_3D_____Z_0__Y_0__X_0 ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E D I R A C : */ /* */ /* */ /* Definition : */ /* */ /* Un champ de Dirac est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = 0 pour X#0 ou Y#0, */ /* = 1 pour X=0 et Y=0. */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(Fdirac_reel_____intensite_reelle,FU))); /* Intensite reelle du Dirac... */ DEFV(Common,DEFV(Float,ZINT(Fdirac_reel_____base_reelle,FZERO))); /* Valeur reelle du champ (sauf a l'origine). */ DEFV(Common,DEFV(Float,ZINT(Fdirac_imaginaire_____intensite_imaginaire,FZERO))); /* Intensite imaginaire du Dirac... */ DEFV(Common,DEFV(Float,ZINT(Fdirac_imaginaire_____base_imaginaire,FZERO))); /* Valeur imaginaire du champ (sauf a l'origine). */ DEFV(Common,DEFV(Float,ZINT(Fdirac_reel__Fdirac_imaginaire_____abscisse,FZERO))); /* Abscisse du Dirac, */ DEFV(Common,DEFV(Float,ZINT(Fdirac_reel__Fdirac_imaginaire_____ordonnee,FZERO))); /* Ordonnee du Dirac. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E D I R A C R E E L : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fdirac_reel(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur reelle de la fonction 'Fxyzt' pour un champ de Dirac. */ /*..............................................................................................................................*/ EGAL(fxyzt ,COND(IFET(IFEQ(_cDENORMALISE_OX(Xf),_cDENORMALISE_OX(Fdirac_reel__Fdirac_imaginaire_____abscisse)) ,IFEQ(_cDENORMALISE_OY(Yf),_cDENORMALISE_OY(Fdirac_reel__Fdirac_imaginaire_____ordonnee)) ) ,Fdirac_reel_____intensite_reelle ,Fdirac_reel_____base_reelle ) ); /* Les '_cDENORMALISE_OX'/'_cDENORMALISE_OY' sont la pour eviter les problemes d'arrondis... */ RETU(fxyzt); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E D I R A C I M A G I N A I R E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fdirac_imaginaire(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur imaginaire de la fonction 'Fxyzt' pour un champ de Dirac. */ /*..............................................................................................................................*/ EGAL(fxyzt ,COND(IFET(IFEQ(_cDENORMALISE_OX(Xf),_cDENORMALISE_OX(Fdirac_reel__Fdirac_imaginaire_____abscisse)) ,IFEQ(_cDENORMALISE_OY(Yf),_cDENORMALISE_OY(Fdirac_reel__Fdirac_imaginaire_____ordonnee)) ) ,Fdirac_imaginaire_____intensite_imaginaire ,Fdirac_imaginaire_____base_imaginaire ) ); /* Les '_cDENORMALISE_OX'/'_cDENORMALISE_OY' sont la pour eviter les problemes d'arrondis... */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " T R E F L E " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "trefle" est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = Cs.sin[R(X,Y)] + Ts */ /* */ /* ou (suivant la version) : */ /* */ /* 2.r */ /* R(X,Y) */ /* F(X,Y,Z) = F(X,Y) = Cs.--------------- + Co */ /* 4.r */ /* R(X,Y) + Ts */ /* */ /* avec dans les deux versions : */ /* */ /* rho */ /* R(X,Y) = Cr.---------------------------- + Pr */ /* Cc.cos(Ct.theta + Pt) + Tc */ /* */ /* */ /* .:-o**#########*****************########## */ /* .:-+o*########*****oooooooo*******######### */ /* ...... .:-+o*#######****oooooooooooooo*****######## */ /* -----:::::..... ...::-+o*######***ooo+++++++++ooooo****######## */ /* oooooo++++----::::::--+o*######**oo++++++++++++++oooo***######## */ /* ***********oooo+++++++o**#####**o+++----------++++ooo***######## */ /* ##############**********#####**o++----::::-----+++ooo***######## */ /* #############################*o+---:::::::::----++ooo**######### */ /* ############################*o+--:::.....::::---++oo***########* */ /* ########**********#########**+--:.........:::---++oo**########*o */ /* ##********oooooooooooo******o+-:.... ......::--++oo**#######**o+ */ /* *****oooooo+++++++---+++++oo+-:.. ....::-++o**#######**o+-- */ /* ***oooo+++++-----::::::::::--:.. ..::-++o**######**o+--:. */ /* *ooooo++++----:::::............ ..:--+o**#######*o++-:.. */ /* *oooo++++----::::..... .::-+o**#######*oo+-::. */ /* ooooo+++----::::..... ..:--+o**#######**o+--:.. */ /* *oooo++++----::::..... .::-+o**#######*oo+-::. */ /* *ooooo++++----:::::............ ..:--+o**#######*o++-:.. */ /* ***oooo+++++-----::::::::::--:.. ..::-++o**######**o+--:. */ /* *****oooooo+++++++---+++++oo+-:.. ....::-++o**#######**o+-- */ /* ##********oooooooooooo******o+-:.... ......::--++oo**#######**o+ */ /* ########**********#########**+--:.........:::---++oo**########*o */ /* ############################*o+--:::.....::::---++oo***########* */ /* #############################*o+---:::::::::----++ooo**######### */ /* ##############**********#####**o++----::::-----+++ooo***######## */ /* ***********oooo+++++++o**#####**o+++----------++++ooo***######## */ /* oooooo++++----::::::--+o*######**oo++++++++++++++oooo***######## */ /* -----:::::..... ...::-+o*######***ooo+++++++++ooooo****######## */ /* ...... .:-+o*#######****oooooooooooooo*****######## */ /* .:-+o*########*****oooooooo*******######### */ /* .:-o**#########*****************########## */ /* .....:::::... .:-+o**###########***********############# */ /* */ /* */ /* Periodicite/Non Periodicite du champ : */ /* */ /* 'VERSION_01' : */ /* ------------ */ /* */ /* cette facon de calculer le trefle utilise une fonction periodique dans le plan, ce qui */ /* provoque une alternance de maxima et de minima quand on s'eloigne vers l'infini ; elle */ /* est de la forme : */ /* */ /* posons : */ /* */ /* rho */ /* R(X,Y) = Cr.---------------------------- + Pr */ /* Cc.cos(Ct.theta + Pt) + Tc */ /* */ /* */ /* F ^ */ /* + | * */ /* + + | * * seule la partie correspondant */ /* + + | * * a U>0 est utilisee. */ /* + + | * * */ /* + + |* * * */ /* -----+---------------+---------------*---------------*---------------*---------> */ /* + + +| * * */ /* + + | * * U */ /* F = Cs.sin(U) + Ts + + | * * */ /* + + | * * */ /* + | * */ /* */ /* on a alors : */ /* */ /* F(X,Y,Z) = F(X,Y) = Cs.sin[R(X,Y)] + Ts */ /* */ /* la periodicite etant introduite par la fonction 'sin'. */ /* */ /* */ /* 'VERSION_02' : */ /* ------------ */ /* */ /* cette facon de calculer le trefle utilise une fonction non periodique dans le plan, */ /* telle qu'elle ne possede qu'un seul maximum a droite (c'est-a-dire pour U>0), pour */ /* tendre vers zero a l'infini ; elle est de la forme : */ /* */ /* posons : */ /* */ /* rho */ /* R(X,Y) = Cr.---------------------------- + Pr */ /* Cc.cos(Ct.theta + Pt) + Tc */ /* */ /* 2.r */ /* U F ^ */ /* F = Cs.----------- + Co + | * */ /* 4.r + + | * * seule la partie correspondant */ /* U + Ts + + | * * a U>0 est utilisee. */ /* + + | * * */ /* + + + + + | * * * * * */ /* ------------------------------------+**----------------------------------------> */ /* | */ /* | U */ /* */ /* on a alors : */ /* */ /* 2.r */ /* R(X,Y) */ /* F(X,Y,Z) = F(X,Y) = Cs.--------------- + Co */ /* 4.r */ /* R(X,Y) + Ts */ /* */ /* la non periodicite etant introduite par une fonction "polynomiale" ; de plus, plus */ /* le demi-exposant 'r' est grand, plus la "double-bosse" de la courbe ci-dessus est */ /* etroite... */ /* */ /* */ /* 'VERSION_03' : */ /* ------------ */ /* */ /* cette facon de calculer le trefle utilise une fonction non periodique dans le plan, */ /* telle qu'elle ne possede qu'un seul maximum a droite (c'est-a-dire pour U>0), pour */ /* tendre vers zero a l'infini ; elle est de la forme : */ /* */ /* posons : */ /* */ /* rho */ /* R(X,Y) = Cr.---------------------------- + Pr */ /* Cc.cos(Ct.theta + Pt) + Tc */ /* */ /* r */ /* - ----.U */ /* r Ts F ^ */ /* F = Cs.U .e + Co | * */ /* | * . * seule la partie correspondant */ /* (avec r>1 et Ts>0) | * . * a U>0 est utilisee. */ /* | * . * */ /* | * . * * * * */ /* -------------------------------------**----------------------------------------> */ /* | Ts */ /* | U */ /* */ /* on a alors : */ /* */ /* r */ /* - ----.R(X,Y) */ /* r Ts */ /* F(X,Y,Z) = F(X,Y) = Cs.R(X,Y) .e + Co */ /* */ /* */ /* la non periodicite etant introduite par les exponentielles ; de plus, plus */ /* l'exposant 'r' est grand, plus la "bosse" de la courbe ci-dessus est etroite, */ /* les points d'inflexion etant en : */ /* */ /* 1 */ /* h.(1 +/- -----) */ /* ___ */ /* \/ r */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common,DEFV(Fonction,) : avec 'VERSION_03'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common,DEFV(Fonction,) : avec 'VERSION_03'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common,DEFV(Fonction,) : avec 'VERSION_03'. */ DEFV(Common,DEFV(Logical,SINT(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ # define COEFFICIENT_TREFLE_SINUS \ FDU \ /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS))); /* Coefficient de ponderation 'Cs' de la fonction 'sinus'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,COMP(COEFFICIENT_TREFLE_SINUS)))); /* Coefficient lineaire 'Ts' de la fonction "polynomiale" ; le 'COMP()' est la afin */ /* de garantir que la fonction 'F(X,Y)' est dans [0,1]... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ # define COEFFICIENT_TREFLE_SINUS \ FU \ /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS))); /* Coefficient de ponderation 'Cs' de la fonction "polynomiale". */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,EXP2(MOIT(COEFFICIENT_TREFLE_SINUS))))); /* Coefficient lineaire 'Ts' de la fonction "polynomiale" ; le 'EXP2(MOIT())' est la afin */ /* de garantir que la fonction 'F(X,Y)' est dans [0,1]... */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_continu,FZERO))); /* Composante continu 'Co' de la fonction "polynomiale". */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ # define COEFFICIENT_TREFLE_SINUS \ FU \ /* Pour initialiser 'Ftrefle_____coefficient' et 'Ftrefle_____coefficient_lineaire'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient,COEFFICIENT_TREFLE_SINUS))); /* Coefficient de ponderation 'Cs' de la fonction "exponentielle". */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire,EXP2(MOIT(COEFFICIENT_TREFLE_SINUS))))); /* Coefficient lineaire 'Ts' de la fonction "exponentielle" ; le 'EXP2(MOIT())' est la afin */ /* de garantir que 'Ts' est strictement positif, et meme dans ]0,1[. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_continu,FZERO))); /* Composante continu 'Co' de la fonction "polynomiale". */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,GRO8(PI)))); /* Coefficient de ponderation 'Cr' du module 'rho'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,NEGA(PI_SUR_2)))); /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho' */ /* est utilise comme un angle...). */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 /* Common : la generation depend des conditions... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ DEFV(Common,DEFV(Positive,SINT(Ftrefle_____moitie_de_l_exposant_de_rho_module,UN))); /* Moitie 'r' de l'exposant de 'R(X,Y)'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,CERCLE_TRIGONOMETRIQUE))); /* Coefficient de ponderation 'Cr' du module 'rho'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,FZERO))); /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho' */ /* est utilise comme un angle...). */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ DEFV(Common,DEFV(Positive,SINT(Ftrefle_____exposant_de_rho_module,GRO2(UN)))); /* Valeur 'r' de l'exposant de 'R(X,Y)' (strictement superieur a 1). */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_rho,CERCLE_TRIGONOMETRIQUE))); /* Coefficient de ponderation 'Cr' du module 'rho'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_rho,FZERO))); /* Coefficient de phase 'Pr' du module 'rho' (desole pour l'abus de langage, mais 'rho' */ /* est utilise comme un angle...). */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 /* Common : la generation depend des conditions... */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_cosinus,FDU))); /* Coefficient de ponderation 'Cc' de la fonction 'cosinus'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_lineaire_cosinus,FDEUX))); /* Coefficient lineaire 'Tc' de l'expression en 'cosinus(theta)'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_theta,FU))); /* Coefficient de ponderation 'Ct' de l'angle 'theta'. */ DEFV(Common,DEFV(Float,SINT(Ftrefle_____coefficient_phase_theta,FZERO))); /* Coefficient de phase 'Pt' de l'angle 'theta'. */ DEFV(Common,DEFV(FonctionF,Ftrefle(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "trefle". */ DEFV(Float,INIT(rho_module,FLOT__UNDEF)); /* Valeur de la fonction 'R(X,Y)' qui correspond au module 'rho' module cosinusoidalement */ /* par l'angle polaire 'theta'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ DEFV(Float,INIT(exponentielle_de_rho_module,FLOT__UNDEF)); /* Valeur de la fonction 'R(X,Y)' elevee a la puissance '2.r'. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 /* Common : la generation depend des conditions... */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Ftrefle(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Ftrefle(...)' est utile... */ USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Introduit le 20071224133113 car, en effet, il manquait... */ ,BLOC( Bblock EGAL(rho_module ,AXPB(Ftrefle_____coefficient_rho ,DIVZ(Rho_2D(Xf,Yf) ,AXPB(Ftrefle_____coefficient_cosinus ,COSX(AXPB(Ftrefle_____coefficient_theta ,Theta_2D(Xf,Yf) ,Ftrefle_____coefficient_phase_theta ) ) ,Ftrefle_____coefficient_lineaire_cosinus ) ) ,Ftrefle_____coefficient_phase_rho ) ); Eblock ) ); /* Calcul de la fonction 'R(X,Y)' : */ /* */ /* rho */ /* R(X,Y) = Cr.---------------------------- + Pr */ /* Cc.cos(Ct.theta + Pt) + Tc */ #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,AXPB(Ftrefle_____coefficient ,SINX(rho_module) ,Ftrefle_____coefficient_lineaire ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)' periodique. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 EGAL(exponentielle_de_rho_module ,PUIX(rho_module,DOUB(Ftrefle_____moitie_de_l_exposant_de_rho_module)) ); /* Calcul de : */ /* */ /* 2.r */ /* R(X,Y) */ /* */ USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD2(MUL2(Ftrefle_____coefficient ,DIVZ(EXP1(exponentielle_de_rho_module) ,ADD2(EXP2(exponentielle_de_rho_module) ,Ftrefle_____coefficient_lineaire ) ) ) ,Ftrefle_____coefficient_continu ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)' non periodique. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 USs_GooF______CONDITIONNEL(Ftrefle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD2(MUL3(Ftrefle_____coefficient ,PUIX(rho_module,Ftrefle_____exposant_de_rho_module) ,EXPB(MUL2(NEGA(DIVI(Ftrefle_____exposant_de_rho_module ,Ftrefle_____coefficient_lineaire ) ) ,rho_module ) ) ) ,Ftrefle_____coefficient_continu ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)' non periodique. */ /* */ /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ /* 'BUG_SYSTEME_SG_C_exp'... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 RETU(fxyzt); Eblock #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 # undef COEFFICIENT_TREFLE_SINUS #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_03 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 # undef COEFFICIENT_TREFLE_SINUS #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_02 #ifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 # undef COEFFICIENT_TREFLE_SINUS #Aifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_TREFLE_VERSION_01 EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " D I S T A N C E E X P O N E N T I E L L E " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "distance exponentielle" est */ /* defini par l'equation : */ /* */ /* -k.d */ /* F(X,Y,Z) = F(X,Y) = e */ /* */ /* ou : */ /* */ /* 'd' designe la distance du point courant */ /* {X,Y} a l'origine. */ /* */ /* */ /* ........................... */ /* ................................... */ /* ....................................... */ /* ............................................. */ /* ................................................. */ /* ................:::::::::::::::::::................ */ /* ...............:::::::::::::::::::::::::............... */ /* .............:::::::::::::::::::::::::::::::............. */ /* .............::::::::::-------------::::::::::............. */ /* ............:::::::::-------------------:::::::::............ */ /* ............::::::::-------+++++++++-------::::::::............ */ /* ...........:::::::------+++++++++++++++------:::::::........... */ /* ...........:::::::-----+++++ooooooooo+++++-----:::::::.......... */ /* ...........::::::-----++++oooo*****oooo++++-----::::::.......... */ /* ...........::::::-----+++ooo****#****ooo+++-----::::::.......... */ /* ...........::::::-----+++ooo**#####**ooo+++-----::::::.......... */ /* ...........::::::-----+++ooo****#****ooo+++-----::::::.......... */ /* ...........::::::-----++++oooo*****oooo++++-----::::::.......... */ /* ...........:::::::-----+++++ooooooooo+++++-----:::::::.......... */ /* ...........:::::::------+++++++++++++++------:::::::........... */ /* ............::::::::-------+++++++++-------::::::::............ */ /* ............:::::::::-------------------:::::::::............ */ /* .............::::::::::-------------::::::::::............. */ /* .............:::::::::::::::::::::::::::::::............. */ /* ...............:::::::::::::::::::::::::............... */ /* ................:::::::::::::::::::................ */ /* ................................................. */ /* ............................................. */ /* ....................................... */ /* ................................... */ /* ........................... */ /* ............... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fdistance_exponentielle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fdistance_exponentielle_____modulation,FU))); /* Coefficient 'k' de la modulation de la distance 'd'. */ DEFV(Common,DEFV(FonctionF,Fdistance_exponentielle(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "distance exponentielle". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fdistance_exponentielle(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fdistance_exponentielle(...)' est utile... */ USs_GooF______CONDITIONNEL(Fdistance_exponentielle_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,EXPB(NEGA(MUL2(Fdistance_exponentielle_____modulation ,Rho_2D(Xf,Yf) ) ) ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)'. */ /* */ /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ /* 'BUG_SYSTEME_SG_C_exp'... */ /* */ /* ATTENTION, jusqu'au 20000314090530, il y avait ici : */ /* */ /* gRho_2D(FXorigine,FYorigine */ /* ,Xf,Yf */ /* ) */ /* */ /* mais l'utilisation de {FXorigine,FYorigine} est inutile puisque {Xf,Yf} sont eux-memes */ /* rapportes a une origine... */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " S P I R A L E D ' A R C H I M E D E " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "spirale d'Archimede" est */ /* defini par l'equation : */ /* */ /* F(X,Y,Z) = F(X,Y) = cos(a.r + b.t + c.r.t + d) */ /* */ /* etendue le 20070626150253 suivant : */ /* */ /* 2 2 */ /* F(X,Y,Z) = F(X,Y) = cos(A.r + a.r + B.t + b.t + C.r.t + d) */ /* */ /* etendue le 20240603112624 suivant : */ /* */ /* 2 */ /* D.r + d.r 2 2 */ /* F(X,Y,Z) = F(X,Y) = e .cos(A.r + a.r + B.t + b.t + C.r.t + d) */ /* */ /* ou : */ /* */ /* {r,t} designe respectivement les deux */ /* coordonnees polaires du point {X,Y}. */ /* */ /* */ /* :oO%%#####%%Oo:-..... .....--:ooOO%%%####################%%%OOOo */ /* oO%%#####%%Oo:-.... .....-:ooOO%%#############################%% */ /* OO%#####%%Oo:-.... ....-:ooO%%############%%%%%%%%%%############ */ /* O%######%Oo:-.... ...-::oO%########%%%OOOOooooooooOOOOO%%%###### */ /* %%#####%Oo:-.... ...-:oO%%######%%OOoo:::----------::::ooOOO%%## */ /* %#####%%Oo-.... ...-:oO%######%OOo::--.................--::ooOO% */ /* %#####%Oo:-... ...-:oO%#####%Ooo:-....... .........--::o */ /* %#####%Oo:-... ...-:O%#####%Oo:-.... ................. ......-- */ /* %#####%Oo:-... ...:oO%####%Oo-... ......----------........ ..... */ /* %#####%Oo:-... ..-:oO%###%Oo-.......-:ooOOOOOOOOooo::--..... .. */ /* %#####%Oo:-... ...:oO%###%O:......:oO%%#########%%%OOoo:--..... */ /* %#####%%O:-... ...-:O%###%O:....-oO%#################%%Oo::-.... */ /* O%#####%Oo:-... ...:oO####O:....o%###%%OOOOO%%%########%%Oo::-.. */ /* O%%#####%Oo:-... ...:oO%###O-..-%#%O:--..---::oOO%%######%%Oo:-. */ /* oO%######%Oo:-... ...-:o%###%:..#o.. .. .....-:oO%%######%Oo:: */ /* :oO%######%Oo:-.... ....-:oO%### %%%Oo:-.... ....-:oO%%#####%%Oo */ /* -:oO%%######%Oo::-..... ..... .O%..O###%Oo-... ....-:oO%#####%%O */ /* .-:ooO%#######%OOo::--.....-:o%#O. .:%###%O:-... ...-:oO%#####%O */ /* ...-:oOO%########%%%OOOOOOO%###%o...-o%###%O:-... ...-:O%%#####% */ /* ....--:oOO%%##################Oo-. ..:O####%o:-......-:oO%#####% */ /* . .....-::oOO%%%##########%%Oo:.....-:O%###%Oo-... ...-:o%%##### */ /* ... ......-::oooOOOOOOOOOoo:-... ...:oO####%Oo-... ...-:oO%##### */ /* ..... .......----:::::---..... ...-oO%####%Oo-... ...-:oO%##### */ /* :-...... .................. ....-:oO%####%%o:-... ...-:oO%##### */ /* oo:--........ ......-:oOO%#####%Oo:.... ...-:oO%##### */ /* %OOoo::--...................--:oOO%######%Oo:-... ...-:oO%###### */ /* ##%%%OOoo:::-------------::ooOO%%######%%Oo:-... ....-:oO%#####% */ /* ######%%%OOOOoooooooooooOOO%%%########%Oo:--... ....-:oO%######% */ /* ############%%%%%%%%%%%%###########%%Ooo:-.... ....-:oO%%#####%O */ /* %%##############################%%%Ooo:-..... ....-:oO%%#####%%O */ /* oOOO%%%#####################%%%OOoo:--..... ....--:oO%%#####%%Oo */ /* -::oooOOOO%%%%%%%%%%%%%%%OOOOoo::--...... .....-:ooO%######%%Oo: */ /* */ /* */ /* obtenu avec a=16 et b=4 (soit "mr=16 mt=4" dans 'v $xci/spiArchimede$K'). */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fspirale_d_Archimede_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho_rho,FZERO))); /* Coefficient 'A' de la modulation du carre du rayon 'r' (introduit le 20070626150253). */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho,FU))); /* Coefficient 'a' de la modulation du rayon 'r'. */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_theta_theta,FZERO))); /* Coefficient 'B' de la modulation du carre de l'angle 't' (introduit le 20070626150253). */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_theta,FU))); /* Coefficient 'b' de la modulation de l'angle 't'. */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____modulation_de_rho_theta,FZERO))); /* Coefficient 'C' de la modulation du produit 'r.t' (introduit le 20070625151210). */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____dephasage,FZERO))); /* Dephasage 'd'. */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____exponentiation_de_rho_rho,FZERO))); /* Coefficient 'D' de l'exponentiation du carre du rayon 'r' (introduit le 20240603112624). */ DEFV(Common,DEFV(Float,SINT(Fspirale_d_Archimede_____exponentiation_de_rho,FZERO))); /* Coefficient 'd' de l'exponentiation du rayon 'r' (introduit le 20240603112624). */ DEFV(Common,DEFV(FonctionF,Fspirale_d_Archimede(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "spirale d'Archimede"... */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fspirale_d_Archimede(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fspirale_d_Archimede(...)' est utile... */ USs_GooF______CONDITIONNEL(Fspirale_d_Archimede_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,MUL2(EXPB(BLI1(Fspirale_d_Archimede_____exponentiation_de_rho_rho ,Fspirale_d_Archimede_____exponentiation_de_rho ,Rho_2D(Xf,Yf) ,FZERO ) ) ,COS1(COSX(BLI2(Fspirale_d_Archimede_____modulation_de_rho_rho ,Fspirale_d_Archimede_____modulation_de_rho ,Rho_2D(Xf,Yf) ,Fspirale_d_Archimede_____modulation_de_theta_theta ,Fspirale_d_Archimede_____modulation_de_theta ,Theta_2D(Xf,Yf) ,Fspirale_d_Archimede_____modulation_de_rho_theta ,Fspirale_d_Archimede_____dephasage ) ) ) ) ); Eblock ) ); /* Calcul de la fonction 'F(X,Y)'. */ /* */ /* ATTENTION, jusqu'au 20000314090530, il y avait ici : */ /* */ /* gRho_2D(FXorigine,FYorigine */ /* ,Xf,Yf */ /* ) */ /* gaTheta_2D(FXorigine,FYorigine */ /* ,Xf,Yf */ /* ) */ /* */ /* mais l'utilisation de {FXorigine,FYorigine} est inutile puisque {Xf,Yf} sont eux-memes */ /* rapportes a une origine... */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P A R C - T A N G E N T E C I R C U L A I R E : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Arc-Tangente est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = atan(Y,X) */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fchamp_ATAN(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20180820172019... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Arc-Tangente. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); EGAL(fxyzt,ATAN(Yf,Xf)); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P C O S I N U S / S I N U S H Y P E R B O L I Q U E G E N E R A L I S E : */ /* */ /* */ /* Definition : */ /* */ /* Un champ 'cosinus/sinus' hyperbolique generalise est defini par */ /* l'equation : */ /* */ /* F(X,Y,Z) = gCOHX_SIHX(ex,ax,X,bx,ey,ay,Y,by,t) */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fchamp_gCOHX_SIHX_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_X,NEUT(FDU)))); DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____facteur_____X,NEUT(FU)))); DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_X,FZERO))); /* Parametres relatifs a la coordonnee 'X' (Valeurs par defaut pour 'COHX(...)'). */ DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_Y,NEUT(FDU)))); DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____facteur_____Y,NEGA(FU)))); DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_Y,FZERO))); /* Parametres relatifs a la coordonnee 'Y' (Valeurs par defaut pour 'COHX(...)'). */ DEFV(Common,DEFV(Float,SINT(Fchamp_gCOHX_SIHX_____translation_exponentielles_XY,FZERO))); /* Parametres relatifs aux coordonnees 'X' et 'Y' (Valeurs par defaut pour 'COHX(...)'). */ DEFV(Common,DEFV(FonctionF,Fchamp_gCOHX_SIHX(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20180820172019... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Arc-Tangente. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); USs_GooF______CONDITIONNEL(Fchamp_gCOHX_SIHX_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base ,BLOC( Bblock EGAL(fxyzt ,gCOHX_SIHX(Fchamp_gCOHX_SIHX_____coefficient_exponentielle_X ,Fchamp_gCOHX_SIHX_____facteur_____X ,Xf ,Fchamp_gCOHX_SIHX_____translation_X ,Fchamp_gCOHX_SIHX_____coefficient_exponentielle_Y ,Fchamp_gCOHX_SIHX_____facteur_____Y ,Yf ,Fchamp_gCOHX_SIHX_____translation_Y ,Fchamp_gCOHX_SIHX_____translation_exponentielles_XY ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P G A U S S I E N : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Gaussien est defini par */ /* l'equation : */ /* */ /* 2 2 2 */ /* -c.(cx.X + cy.Y + cz.Z + cxy.X.Y + cyz.Y.Z + czx.Z.X + cxyz.X.Y.Z) */ /* F(X,Y,Z) = e */ /* */ /* */ /* ......................... */ /* ................................. */ /* ..............:::::::::::.............. */ /* ..........:::::::::::::::::::::::.......... */ /* .........:::::::::::-------:::::::::::......... */ /* ........::::::::-------------------::::::::........ */ /* .......::::::--------+++++++++++--------::::::....... */ /* .......::::::------+++++++++++++++++++------::::::....... */ /* .......:::::-----++++++ooooooooooooo++++++-----:::::....... */ /* .......:::::----+++++ooooooooo*ooooooooo+++++----:::::....... */ /* ......:::::----++++ooooo*************ooooo++++----:::::...... */ /* ......:::::----+++ooooo*******###*******ooooo+++----:::::...... */ /* ......::::----+++oooo*****###########*****oooo+++----::::...... */ /* ......:::::---++++ooo****###############****ooo++++---:::::..... */ /* ......::::----+++oooo****###############****oooo+++----::::..... */ /* ......::::----+++ooo****#################****ooo+++----::::..... */ /* ......::::----+++oooo****###############****oooo+++----::::..... */ /* ......:::::---++++ooo****###############****ooo++++---:::::..... */ /* ......::::----+++oooo*****###########*****oooo+++----::::...... */ /* ......:::::----+++ooooo*******###*******ooooo+++----:::::...... */ /* ......:::::----++++ooooo*************ooooo++++----:::::...... */ /* .......:::::----+++++ooooooooo*ooooooooo+++++----:::::....... */ /* .......:::::-----++++++ooooooooooooo++++++-----:::::....... */ /* .......::::::------+++++++++++++++++++------::::::....... */ /* .......::::::--------+++++++++++--------::::::....... */ /* ........::::::::-------------------::::::::........ */ /* .........:::::::::::-------:::::::::::......... */ /* ..........:::::::::::::::::::::::.......... */ /* ..............:::::::::::.............. */ /* ................................. */ /* ......................... */ /* ......... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fgaussien_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224095754)... */ DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient,FU))); /* Coefficient de "force" du gaussien : plus il est grand, mieux est couverte */ /* la plage des niveaux... */ DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_X2,FU))); DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_Y2,FU))); DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_Z2,FU))); /* Coefficient d'"importance" des carres des coordonnees 'X', 'Y' et 'Z'. */ DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_XY,FZERO))); DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_YZ,FZERO))); DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_ZX,FZERO))); /* Coefficient d'"importance" des produit de deux coordonnees. */ DEFV(Common,DEFV(Float,SINT(Fgaussien_____coefficient_XYZ,FZERO))); /* Coefficient d'"importance" du produit des trois coordonnees 'X', 'Y' et 'Z'. */ /* On notera que ces coefficients permettent de dissymetriser le champ... */ DEFV(Common,DEFV(FonctionF,Fgaussien(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ gaussien. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fgaussien(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fgaussien(...)' est utile... */ USs_GooF______CONDITIONNEL(Fgaussien_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224095754... */ ,BLOC( Bblock EGAL(fxyzt ,EXPB(NEGA(MUL2(Fgaussien_____coefficient ,ADD3(ADD3(MUL2(Fgaussien_____coefficient_X2,EXP2(Xf)) ,MUL2(Fgaussien_____coefficient_Y2,EXP2(Yf)) ,MUL2(Fgaussien_____coefficient_Z2,EXP2(Zf)) ) ,ADD3(MUL2(Fgaussien_____coefficient_XY,MUL2(Xf,Yf)) ,MUL2(Fgaussien_____coefficient_YZ,MUL2(Yf,Zf)) ,MUL2(Fgaussien_____coefficient_ZX,MUL2(Zf,Xf)) ) ,MUL2(Fgaussien_____coefficient_XYZ,MUL3(Xf,Yf,Zf)) ) ) ) ) ); Eblock ) ); /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ /* 'BUG_SYSTEME_SG_C_exp'... */ RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P G A U S S I E N G E N E R A L I S E : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Gaussien generalise est defini par */ /* l'equation : */ /* */ /* m n p */ /* -c.(cx.X + cy.Y + cz.Z ) */ /* F(X,Y,Z) = e */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fgaussien_generalise_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient,FU))); /* Coefficient de "force" du gaussien generalise : plus il est grand, mieux est couverte */ /* la plage des niveaux... */ DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_X,FU))); DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_Y,FU))); DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____coefficient_Z,FU))); /* Coefficient d'"importance" des puissances des coordonnees 'X', 'Y' et 'Z'. */ DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_X,FDEUX))); DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_Y,FDEUX))); DEFV(Common,DEFV(Float,SINT(Fgaussien_generalise_____exposant_Z,FDEUX))); /* Exposant des coordonnees 'X', 'Y' et 'Z'. */ DEFV(Common,DEFV(FonctionF,Fgaussien_generalise(Xf,Yf,Zf,Tf))) /* Cette fonction a ete introduite le 20050208084341... */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ gaussien generalise. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fgaussien_generalise(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fgaussien_generalise(...)' est utile... */ USs_GooF______CONDITIONNEL(Fgaussien_generalise_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,EXPB(NEGA(MUL2(Fgaussien_generalise_____coefficient ,ADD3(MUL2(Fgaussien_generalise_____coefficient_X ,PUIX(Xf,Fgaussien_generalise_____exposant_X) ) ,MUL2(Fgaussien_generalise_____coefficient_Y ,PUIX(Yf,Fgaussien_generalise_____exposant_Y) ) ,MUL2(Fgaussien_generalise_____coefficient_Z ,PUIX(Zf,Fgaussien_generalise_____exposant_Z) ) ) ) ) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " C H A P E A U M E X I C A I N " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "chapeau mexicain" est defini par */ /* l'equation : */ /* */ /* 'VERSION_01' : */ /* ------------ */ /* */ /* 4 2 */ /* F(X,Y,Z) = F(X,Y) = c.[c4.R + c2.R + t] */ /* */ /* ou 'R' designe le rayon vecteur. On notera */ /* que le cas particulier : */ /* */ /* 1 4 1 2 */ /* F(X,Y,Z) = F(X,Y) = ---.R - ---.R + 1 */ /* 4 2 */ /* */ /* annule sa derivee pour : */ /* */ /* R=-1 */ /* R=0 */ /* R=+1 */ /* */ /* et presente donc la symetrie de revolution */ /* du chapeau mexicain... */ /* */ /* */ /* 'VERSION_02' : */ /* ------------ */ /* */ /* 2 */ /* d b.R + k.R 2 */ /* F(X,Y,Z) = F(X,Y) = c.[R .e .(m.R + n.R + p) + t] */ /* */ /* ou 'R' designe le rayon vecteur. On notera */ /* le vrai chapeau mexicain s'obtient pour les */ /* valeurs : */ /* */ /* d > 1 */ /* b < 0 */ /* */ /* des parametres. En ce qui concerne le chapeau */ /* mexicain utilisable en tant qu'ondelette, on */ /* choisira : */ /* */ /* 1 */ /* c = ------------ */ /* _____ 3 */ /* \/2.pi .x */ /* */ /* d = 0 */ /* */ /* b = 0 */ /* */ /* 1 */ /* k = - ------ */ /* 2 */ /* 2.x */ /* */ /* -1 */ /* m = ---- */ /* 2 */ /* x */ /* */ /* n = 0 */ /* */ /* p = 1 */ /* */ /* ou 'x' est une constante arbitraire... */ /* */ /* */ /* *o+--::............ .............. ............::-++o */ /* +--::.......... ......................... ..........::-+ */ /* -::......... ................................. ..........:: */ /* :......... ....................................... ........: */ /* ........ ..................:::::::.................. ....... */ /* ...... ..............:::::::::::::::::::.............. ...... */ /* ..... ............::::::---------------::::::........... .... */ /* .... ...........::::------+++++++++++------::::........... ... */ /* ... ..........::::----+++++++oooo++++++++----::::.......... .. */ /* .. ..........:::---+++++ooooooooooooooo++++----:::.......... . */ /* . .........::::---+++oooooo*********ooooo++++---:::.......... */ /* .........::---++++oooo***************oooo+++---:::......... */ /* .........:::---+++ooo*****########******ooo+++---:::......... */ /* ........:::---+++ooo****############*****ooo+++---::......... */ /* ........:::---++ooo****##############****ooo+++---:::........ */ /* .........:::--+++ooo****###############****ooo++---:::........ */ /* ........:::--+++ooo****###############***oooo++---:::........ */ /* ........:::---+++ooo****#############****ooo+++---::......... */ /* .........:::--+++oooo*****#########*****ooo+++---:::......... */ /* .........:::---+++oooo****************oooo+++---:::......... */ /* . .........:::----+++ooooo***********ooooo+++---:::.......... */ /* .. .........::::---++++oooooooooooooooo+++++---:::.......... . */ /* ... ..........:::-----++++++ooooooo++++++----::::.......... .. */ /* .... ...........::::-----++++++++++++------::::........... ... */ /* ..... ............:::::-----------------:::::............ .... */ /* ...... .............:::::::::::::::::::::............. ..... */ /* ........ .................:::::::::................. ....... */ /* :......... ....................................... ......... */ /* -::......... .................................. .........:: */ /* +--::.......... ........................... ..........::-- */ /* oo+--::............ ................ ............::--+o */ /* #*oo+--:::.............. ..............:::-++o** */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,SINT(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_global,FU))); /* Coefficient d'"importance" global 'c'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_R4,NEUT(FRA4(FU))))); /* Coefficient d'"importance" du carre du carre du rayon 'R'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_R2,NEGA(FRA2(FU))))); /* Coefficient d'"importance" du carre du rayon 'R'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____translation,NEUT(FU)))); /* Translation. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____exposant_du_rayon,NEUT(GRO12(FU))))); /* Parametre 'd'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____facteur_du_rayon_dans_l_exponentielle,NEGA(GRO16(FU))))); /* Parametre 'b'. */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____facteur_du_carre_du_rayon_dans_l_exponentielle,FZERO))); /* Parametre 'k' (introduit le 20030514130318 avec compatibilite anterieure...). */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_m_du_trinome,FZERO))); /* Parametre 'm' (introduit le 20030514130318 avec compatibilite anterieure...). */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_n_du_trinome,FZERO))); /* Parametre 'n' (introduit le 20030514130318 avec compatibilite anterieure...). */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____coefficient_p_du_trinome,FU))); /* Parametre 'p' (introduit le 20030514130318 avec compatibilite anterieure...). */ DEFV(Common,DEFV(Float,SINT(Fchapeau_mexicain_____translation,FZERO))); /* Translation. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(FonctionF,Fchapeau_mexicain(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "chapeau mexicain". */ #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 DEFV(Float,INIT(carre_du_rayon_vecteur,EXP2(Rho_2D(Xf,Yf)))); /* Carre du rayon vecteur... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 DEFV(Float,INIT(rayon_vecteur,EXP1(Rho_2D(Xf,Yf)))); /* Rayon vecteur... */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fchapeau_mexicain(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fchapeau_mexicain(...)' est utile... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 USs_GooF______CONDITIONNEL(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,MUL2(Fchapeau_mexicain_____coefficient_global ,HORNER_1_02(carre_du_rayon_vecteur ,Fchapeau_mexicain_____coefficient_R4 ,Fchapeau_mexicain_____coefficient_R2 ,Fchapeau_mexicain_____translation ) ) ); Eblock ) ); #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 # define Fchapeau_mexicain_____facteur_carre_rayon_exponentielle \ Fchapeau_mexicain_____facteur_du_carre_du_rayon_dans_l_exponentielle \ /* Pour reduire la longueur de l'une des lignes suivantes... */ USs_GooF______CONDITIONNEL(Fchapeau_mexicain_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,MUL2(Fchapeau_mexicain_____coefficient_global ,ADD2(MUL3(PUIX(rayon_vecteur,Fchapeau_mexicain_____exposant_du_rayon) ,EXPX(HORNER_1_02(rayon_vecteur ,Fchapeau_mexicain_____facteur_carre_rayon_exponentielle ,Fchapeau_mexicain_____facteur_du_rayon_dans_l_exponentielle ,FZERO ) ) ,HORNER_1_02(rayon_vecteur ,Fchapeau_mexicain_____coefficient_m_du_trinome ,Fchapeau_mexicain_____coefficient_n_du_trinome ,Fchapeau_mexicain_____coefficient_p_du_trinome ) ) ,Fchapeau_mexicain_____translation ) ) ); Eblock ) ); # undef Fchapeau_mexicain_____facteur_carre_rayon_exponentielle #Aifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_CHAPEAU_MEXICAIN_VERSION_02 RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P S I N U S O I D A L : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "sinusoidal" est defini par */ /* l'equation : */ /* ________ */ /* / 2 2 */ /* T + sin(cx.X + cy.Y + cr.\/ X + Y + ct.Theta + P) */ /* F(X,Y,Z) = F(X,Y) = ------------------------------------------------------ */ /* E */ /* */ /* avec en general : */ /* */ /* 1 + sin(cx.X + cy.Y) */ /* F(X,Y,Z) = F(X,Y) = ---------------------- */ /* 2 */ /* */ /* notant que si la phase 'P' est */ /* egale a pi/2, c'est alors un champ */ /* "cosinusoidal" que l'on obtient... */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fsinusoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_translation,FU))); /* Translation du 'sinus'. La valeur implicite est egale a 'MAX2(SINX(...))'. */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_echelle,FDEUX))); /* Echelle du 'sinus'. La valeur implicite est egale a l'amplitude du segment */ /* [MIN2(SINX(...)),MAX2(SINX(...))]. */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_X,FU))); /* Coefficient d'"importance" de la coordonnee 'X'. */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Y,FU))); /* Coefficient d'"importance" de la coordonnee 'Y'. */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Rho,FZERO))); /* Coefficient d'"importance" du module (introduit le 20080218152515). */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_Theta,FZERO))); /* Coefficient d'"importance" de l'angle (introduit le 20080916094739). */ DEFV(Common,DEFV(Float,SINT(Fsinusoidal_____coefficient_phase,FZERO))); /* Coefficient de phase du champ sinusoidal. Rappelons qu'en donnant a ce parametre */ /* la valeur 'PI_SUR_2', on obtient un champ "cosinusoidal". */ DEFV(Common,DEFV(Logical,SINT(Fsinusoidal_____dephaser_coefficient_phase,FAUX))); /* Choix entre un champ "sinusoidal" ('FAUX') ou "cosinusoidal" ('VRAI'). Ceci a ete */ /* introduit le 20041109232144... */ DEFV(Common,DEFV(FonctionF,Fsinusoidal(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ sinusoidal. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fsinusoidal(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fsinusoidal(...)' est utile... */ USs_GooF______CONDITIONNEL(Fsinusoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,DIVI(ADD2(Fsinusoidal_____coefficient_translation ,SINX(LIN4(Fsinusoidal_____coefficient_X,Xf ,Fsinusoidal_____coefficient_Y,Yf ,Fsinusoidal_____coefficient_Rho,Rho_2D(Xf,Yf) ,Fsinusoidal_____coefficient_Theta,Theta_2D(Xf,Yf) ,ADD2(Fsinusoidal_____coefficient_phase ,COND(IL_NE_FAUT_PAS(Fsinusoidal_____dephaser_coefficient_phase) ,FZERO ,PI_SUR_2 ) ) ) ) ) ,Fsinusoidal_____coefficient_echelle ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P E L L I P S O I D A L : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Ellispoidal est defini par */ /* l'equation : */ /* */ /* 'VERSION_01' (avant le 20061128084148) : */ /* ------------ */ /* */ /* 2 2 2 */ /* | X | | Y | | Z | */ /* F(X,Y,Z) = |---| + |---| + |---| - 1 */ /* | A | | B | | C | */ /* */ /* */ /* 'VERSION_02' (introduite le 20061128084148) : */ /* ------------ */ /* */ /* 2 2 2 */ /* X Y Z */ /* F(X,Y,Z) = ---- + ---- + ---- - D */ /* A B C */ /* */ /* ceci permettant des ellipsoides (A>0, B>0, C>0 et D>0) comme */ /* des hyperboloides (A>0, B<0, C>0 et D>0 ou D<0). */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,_____FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02)); #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Logical,SINT(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_A,FU))); DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_B,FU))); DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____demi_axe_C,FU))); /* Definition des trois demi-axes {A,B,C}. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 /* Common,DEFV(Fonction,) : avec 'VERSION_01'. */ #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_A,FU))); DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_B,FU))); DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_C,FU))); DEFV(Common,DEFV(Float,SINT(Fellipsoidal_____parametre_D,FU))); /* Definition des quatre parametres {A,B,C,D}. */ #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 /* Common,DEFV(Fonction,) : avec 'VERSION_02'. */ DEFV(Common,DEFV(FonctionF,Fellipsoidal(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061127095155. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ ellipsoidal. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fellipsoidal(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fellipsoidal(...)' est utile... */ #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 USs_GooF______CONDITIONNEL(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD4(EXP2(DIVI(Xf,Fellipsoidal_____demi_axe_A)) ,EXP2(DIVI(Yf,Fellipsoidal_____demi_axe_B)) ,EXP2(DIVI(Zf,Fellipsoidal_____demi_axe_C)) ,NEGA(FU) ) ); Eblock ) ); #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_01 #ifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 USs_GooF______CONDITIONNEL(Fellipsoidal_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD4(DIVI(EXP2(Xf),Fellipsoidal_____parametre_A) ,DIVI(EXP2(Yf),Fellipsoidal_____parametre_B) ,DIVI(EXP2(Zf),Fellipsoidal_____parametre_C) ,NEGA(Fellipsoidal_____parametre_D) ) ); Eblock ) ); #Aifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 #Eifdef FACON_DE_CALCULER_LE_CHAMP_ELLIPSOIDAL_VERSION_02 RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P T O R O I D A L A U N T R O U : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Toroidal a un trou est defini par */ /* l'equation : */ /* */ /* 2 */ /* | --------- | */ /* 2 | / 2 2 2| 2 */ /* F(X,Y,Z) = Z + |\/ X + Y - R | - R */ /* | 1| 2 */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Ftoroidal_1_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Ftoroidal_1_trou_____rayon_R1,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_1_trou_____rayon_R2,FDU))); /* Definition des deux rayons. */ DEFV(Common,DEFV(FonctionF,Ftoroidal_1_trou(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061127095155. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a un trou. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Ftoroidal_1_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Ftoroidal_1_trou(...)' est utile... */ USs_GooF______CONDITIONNEL(Ftoroidal_1_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD3(EXP2(Zf) ,EXP2(SOUS(RACX(ADD2(EXP2(Xf),EXP2(Yf))),EXP2(Ftoroidal_1_trou_____rayon_R1))) ,NEGA(EXP2(Ftoroidal_1_trou_____rayon_R2)) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P T O R O I D A L A D E U X T R O U S : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Toroidal a deux trous est defini par */ /* l'equation : */ /* */ /* 2 */ /* | 2 2 2| 2 2 2 2 */ /* F(X,Y,Z) = |X .(E - X ) - Y | + C.Z - A.(D + B.(X + Y + Z )) */ /* */ /* */ /* Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Ftoroidal_2_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_A,GRO4(FRA10(FRA10(FRA10(FU))))))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_B,FDU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_C,FDU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_D,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_2_trou_____parametre_E,FU))); /* Definition des parametres... */ DEFV(Common,DEFV(FonctionF,Ftoroidal_2_trou(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061127110745. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a deux trous. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Ftoroidal_2_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Ftoroidal_2_trou(...)' est utile... */ USs_GooF______CONDITIONNEL(Ftoroidal_2_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD3(EXP2(SOUS(MUL2(EXP2(Xf),SOUS(Ftoroidal_2_trou_____parametre_E,EXP2(Xf))) ,EXP2(Yf) ) ) ,MUL2(Ftoroidal_2_trou_____parametre_C,EXP2(Zf)) ,MUL2(NEGA(Ftoroidal_2_trou_____parametre_A) ,AXPB(Ftoroidal_2_trou_____parametre_B ,ADD3(EXP2(Xf),EXP2(Yf),EXP2(Zf)) ,Ftoroidal_2_trou_____parametre_D ) ) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P T O R O I D A L A C I N Q T R O U S : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Toroidal a cinq trous est defini par */ /* l'equation : */ /* */ /* 2 */ /* | 2 2 2 2 | */ /* | X Y X Y | 2 */ /* F(X,Y,Z) = |(---- + ---- - C).(---- + ---- - F)| + Z - G */ /* | A B D E | */ /* */ /* */ /* Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Ftoroidal_5_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_A,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_B,FQUATRE))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_C,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_D,FQUATRE))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_E,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_F,FU))); DEFV(Common,DEFV(Float,SINT(Ftoroidal_5_trou_____parametre_G,FRA10(FU)))); /* Definition des parametres... */ DEFV(Common,DEFV(FonctionF,Ftoroidal_5_trou(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061127125606. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a trois trous. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Ftoroidal_5_trou(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Ftoroidal_5_trou(...)' est utile... */ USs_GooF______CONDITIONNEL(Ftoroidal_5_trou_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD3(EXP2(MUL2(ADD3(DIVI(EXP2(Xf),Ftoroidal_5_trou_____parametre_A) ,DIVI(EXP2(Yf),Ftoroidal_5_trou_____parametre_B) ,NEGA(Ftoroidal_5_trou_____parametre_C) ) ,ADD3(DIVI(EXP2(Xf),Ftoroidal_5_trou_____parametre_D) ,DIVI(EXP2(Yf),Ftoroidal_5_trou_____parametre_E) ,NEGA(Ftoroidal_5_trou_____parametre_F) ) ) ) ,EXP2(Zf) ,NEGA(Ftoroidal_5_trou_____parametre_G) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " C U B E F A I T D E S I X T O R E S " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ "Cube a six Tores" est defini par */ /* l'equation : */ /* */ /* */ /* | 2 2| | 2 2| | 2 2| */ /* || 2 2 2| | 2 | | || 2 2 2| | 2 | | || 2 2 2| | 2 | | */ /* F(X,Y,Z) = ||(X + Y - A | + |Z - B| |.||(Y + Z - C | + |X - D| |.||(Z + X - E | + |Y - F| | */ /* */ /* qui est donc un objet ressemblant a un cube */ /* dont chaque face ressemble a un tore... */ /* Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fcube_a_six_tores_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_A,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_B,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_C,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_D,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_E,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_F,FU))); DEFV(Common,DEFV(Float,SINT(Fcube_a_six_tores_____parametre_G,FRA10(FRA10(FU))))); /* Definition des parametres... */ DEFV(Common,DEFV(FonctionF,Fcube_a_six_tores(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061128092314. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ "Cube a six Tores". */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fcube_a_six_tores(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fcube_a_six_tores(...)' est utile... */ USs_GooF______CONDITIONNEL(Fcube_a_six_tores_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,ADD2(MUL3(ADD2(EXP2(ADD3(EXP2(Xf) ,EXP2(Yf) ,NEGA(EXP2(Fcube_a_six_tores_____parametre_A)) ) ) ,EXP2(ADD2(EXP2(Zf) ,NEGA(Fcube_a_six_tores_____parametre_B) ) ) ) ,ADD2(EXP2(ADD3(EXP2(Yf) ,EXP2(Zf) ,NEGA(EXP2(Fcube_a_six_tores_____parametre_C)) ) ) ,EXP2(ADD2(EXP2(Xf) ,NEGA(Fcube_a_six_tores_____parametre_D) ) ) ) ,ADD2(EXP2(ADD3(EXP2(Zf) ,EXP2(Xf) ,NEGA(EXP2(Fcube_a_six_tores_____parametre_E)) ) ) ,EXP2(ADD2(EXP2(Yf) ,NEGA(Fcube_a_six_tores_____parametre_F) ) ) ) ) ,NEGA(Fcube_a_six_tores_____parametre_G) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P " C E R C L E S O R T H O G O N A U X " : */ /* */ /* */ /* Definition : */ /* */ /* Un champ Cercles orthogonaux est defini par */ /* l'equation : */ /* */ /* | 2 | | 2 | | 2 | */ /* || 2 2 | 2| || 2 2 | 2| || 2 2 | 2| 2 2 2 2 */ /* F(X,Y,Z) = ||X + Y - A| + Z |.||Y + Z - B| + X |.||Z + X - C| + Y | - E .(D + F.(X + Y + Z ) */ /* */ /* */ /* Cette equation vient de 'v http://www.econym.demon.co.uk/isotut/maths.htm'. */ /* */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(Logical,SINT(Fcercle_orthogonaux_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base,FAUX))); /* Afin de permettre l'usage du 'GooF' (introduit le 20071224101849)... */ DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_A,FU))); DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_B,FU))); DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_C,FU))); DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_D,FU))); DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_E,GRO6(FRA10(FRA10(FU)))))); DEFV(Common,DEFV(Float,SINT(Fcercle_orthogonaux_____parametre_F,FDEUX))); /* Definition des parametres... */ DEFV(Common,DEFV(FonctionF,Fcercle_orthogonaux(Xf,Yf,Zf,Tf))) /* Fonction introduite le 20061128092314. */ DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf', 'Yf' et 'Zf' dans [0,1[. */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Toroidal a deux trous. */ /*..............................................................................................................................*/ RESTAURATION_DE_LA_VALEUR_PAR_DEFAUT_DES_ARGUMENTS_IMPLICITES(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions); /* Introduit le 20071117160301 pour le plaisir. Cette restauration se fera grace au code */ /* suivant (avec 'FLOT__AI' representant 'FLOT__ARGUMENT_INUTILE') : */ /* */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,VRAI); */ /* CALS(Fcercle_orthogonaux(FLOT__AI,FLOT__AI,FLOT__AI,FLOT__AI)); */ /* EGAL(forcer_la_reinitialisation_des_arguments_implicites_des_fonctions,FAUX); */ /* */ /* implante la ou 'Fcercle_orthogonaux(...)' est utile... */ USs_GooF______CONDITIONNEL(Fcercle_orthogonaux_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base /* Possibilite introduite le 20071224101849... */ ,BLOC( Bblock EGAL(fxyzt ,SOUS(MUL3(ADD2(EXP2(ADD3(EXP2(Xf) ,EXP2(Yf) ,NEGA(Fcercle_orthogonaux_____parametre_A) ) ) ,EXP2(Zf) ) ,ADD2(EXP2(ADD3(EXP2(Yf) ,EXP2(Zf) ,NEGA(Fcercle_orthogonaux_____parametre_B) ) ) ,EXP2(Xf) ) ,ADD2(EXP2(ADD3(EXP2(Zf) ,EXP2(Xf) ,NEGA(Fcercle_orthogonaux_____parametre_C) ) ) ,EXP2(Yf) ) ) ,MUL2(EXP2(Fcercle_orthogonaux_____parametre_E) ,AXPB(Fcercle_orthogonaux_____parametre_F ,ADD3(EXP2(Xf),EXP2(Yf),EXP2(Zf)) ,Fcercle_orthogonaux_____parametre_D ) ) ) ); Eblock ) ); RETU(fxyzt); Eblock EFonctionF _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E M O R L E T : */ /* */ /* */ /* Definition : */ /* */ /* Un champ dit "de Morlet" est defini par */ /* l'equation : */ /* */ /* ________ */ /* 2 2 / 2 2 */ /* -c.(cx.X + cy.Y + cxy.X.Y) i.|k|.[ct.(cos(t).X + sin(t).Y) + c2.\/ X + Y ] */ /* K.(1 + i) + e .e */ /* F(X,Y) = ----------------------------------------------------------------------------------------------- */ /* H */ /* */ /* ou : */ /* */ /* x */ /* X = --- */ /* d */ /* */ /* y */ /* Y = --- */ /* d */ /* */ /* et : */ /* */ /* d = dilatation (d=1.0 donne 1 periode */ /* de l'ondelette le long de 'dimX' ou */ /* 'dimY' -bien entendu lorsqu'elle */ /* est horizontale ou verticale- et, */ /* par exemple, d=0.1 en donnera 10), */ /* */ /* k = module, */ /* */ /* t = facteur de rotation (ou "phase"). */ /* */ /* */ /* Il est possible de jouer sur l'isotropie */ /* de la facon suivante : */ /* */ /* ct=1 c2=0 : donne une ondelette anisotrope orientee suivant l'angle 't', */ /* ct=0 c2=1 : donne une ondelette isotrope ("gaussienne cosinusoidale"). */ /* */ /* */ /* On notera que le champ par defaut pour les */ /* images complexes est donne par l'equation : */ /* */ /* */ /* 2 2 */ /* X + Y */ /* - --------- i.|k|.[cos(t).X + sin(t).Y] */ /* 2 */ /* F(X,Y) = e .e */ /* */ /* */ /*************************************************************************************************************************************/ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____translation,FU))); /* Coefficient 'K' ci dessus : */ /* K = 1 pour les images standards, */ /* K = 0 pour les images complexes. */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____homothetie,FDEUX))); /* Coefficient 'H' ci dessus : */ /* H = 2 pour les images standards, */ /* H = 1 pour les images complexes. */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____dilatation,FU))); /* Coefficient de dilatation des coordonnees ('d'). */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient,FU))); /* Coefficient de "force" du Morlet ('c') : plus il est grand, mieux est couverte */ /* la plage des niveaux... */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_X2,FDU))); /* Coefficient d'"importance" du carre de la coordonnee 'X' ('cx'). */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_Y2,FDU))); /* Coefficient d'"importance" du carre de la coordonnee 'Y' ('cy'). */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_XY,FZERO))); /* Coefficient d'"importance" du produit des deux coordonnees 'X' et 'Y' ('cxy') ; on */ /* notera que ces trois derniers coefficients permettent de dissymetriser le champ... */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation,FZERO))); /* Angle 't' dans l'equation ci-dessus. */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____nombre_de_periodes,FU))); /* Module |k| dans l'equation ci-dessus ; il donne le nombre de periodes de l'ondelette */ /* sur la moitie de l'image (il y aura donc le double de periodes sur la totalite de */ /* l'image...). */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rotation,FU))); /* Coefficient d'"importance" de la partie rotation de l'ondelette, dit 'ct' */ /* ci-dessus ; il definit la partie sensible a une orientation (definie alors par 't'). */ DEFV(Common,DEFV(Float,ZINT(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rayon,FZERO))); /* 2 2 */ /* coefficient d'"importance" du rayon RACX(X + Y ) dit 'c2' ci-dessus ; il definit la */ /* partie insensible a l'orientation (qui ne depend donc que du rayon). */ #define Xf_dilate \ DIVI(Xf,Fmorlet_reel__Fmorlet_imaginaire_____dilatation) #define Yf_dilate \ DIVI(Yf,Fmorlet_reel__Fmorlet_imaginaire_____dilatation) #define CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(fonctionT) \ Bblock \ EGAL(fxyzt \ ,DIVI(ADD2(Fmorlet_reel__Fmorlet_imaginaire_____translation \ ,MUL2(EXPB(NEGA(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient \ ,ADD2(ADD2(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_X2 \ ,EXP2(Xf_dilate) \ ) \ ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_Y2 \ ,EXP2(Yf_dilate) \ ) \ ) \ ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_XY \ ,MUL2(Xf_dilate,Yf_dilate) \ ) \ ) \ ) \ ) \ ) \ ,fonctionT(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____nombre_de_periodes \ ,ADD2(MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rotation \ ,ADD2(MUL2(COSX(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation) \ ,Xf_dilate \ ) \ ,MUL2(SINX(Fmorlet_reel__Fmorlet_imaginaire_____angle_rotation) \ ,Yf_dilate \ ) \ ) \ ) \ ,MUL2(Fmorlet_reel__Fmorlet_imaginaire_____coefficient_rayon \ ,GpytF2D(Xf_dilate \ ,Yf_dilate \ ) \ ) \ ) \ ) \ ) \ ) \ ) \ ,Fmorlet_reel__Fmorlet_imaginaire_____homothetie \ ) \ ); \ /* La procedure 'GpytF2D(...)' a ete introduite le 20021120102437. */ \ Eblock \ /* Afin de calculer indifferemment les parties reelle et imaginaire. */ \ /* */ \ /* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ \ /* 'BUG_SYSTEME_SG_C_exp'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E M O R L E T R E E L : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fmorlet_reel(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX); /* Calcul de la partie reelle... */ RETU(fxyzt); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C H A M P D E M O R L E T I M A G I N A I R E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fmorlet_imaginaire(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX); /* Calcul de la partie imaginaire... */ RETU(fxyzt); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M E E E N O N D E L E T T E S D E M O R L E T D I R E C T E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Ftransformee_directe_de_Morlet_reel(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX); /* Calcul de la partie reelle... */ RETU(ConjugaisonReelle(fxyzt)); /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et */ /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par */ /* erreur... */ /* */ /* Jusqu'au 20030506094554, la procedure 'ConjugaisonReelle(...)' n'etait pas utilisee */ /* par erreur pour la transformee directe ; decidemment... */ /* */ /* Jusqu'au 20030506135231, la valeur renvoyee ici etait : */ /* */ /* DIVI(ConjugaisonReelle(fxyzt) */ /* ,RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)) */ /* ) */ /* */ /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette, */ /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745'). */ Eblock EFonctionF BFonctionF DEFV(Common,DEFV(FonctionF,Ftransformee_directe_de_Morlet_imaginaire(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX); /* Calcul de la partie imaginaire... */ RETU(ConjugaisonImaginaire_s(fxyzt)); /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et */ /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par */ /* erreur... */ /* */ /* Jusqu'au 20030506094554, la procedure 'ConjugaisonImaginaire_s(...)' n'etait pas utilisee */ /* par erreur pour la transformee directe ; decidemment... */ /* */ /* Jusqu'au 20030506135231, la valeur renvoyee ici etait : */ /* */ /* DIVI(ConjugaisonImaginaire_s(fxyzt) */ /* ,RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)) */ /* ) */ /* */ /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette, */ /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745'). */ Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M E E E N O N D E L E T T E S D E M O R L E T I N V E R S E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Ftransformee_inverse_de_Morlet_reel(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(COSX); /* Calcul de la partie reelle... */ RETU(NEUT(fxyzt)); /* Renvoi du conjugue de la partie reelle... */ /* */ /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et */ /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par */ /* erreur... */ /* */ /* Jusqu'au 20030506094554, la procedure 'ConjugaisonReelle(...)' etait utilisee par */ /* erreur pour la transformee inverse ; decidemment... */ /* */ /* Jusqu'au 20030506135231, la valeur renvoyee ici etait : */ /* */ /* DIVI(NEUT(fxyzt),EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)) */ /* */ /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette, */ /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745'). */ Eblock EFonctionF BFonctionF DEFV(Common,DEFV(FonctionF,Ftransformee_inverse_de_Morlet_imaginaire(Xf,Yf,Zf,Tf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); DEFV(Argument,DEFV(Float,Tf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /* La coordonnee 'Tf' inutilisee a ete introduite le 20100209115303... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(fxyzt,FLOT__UNDEF)); /* Valeur de la fonction 'Fxyzt' pour un champ Morlet. */ /*..............................................................................................................................*/ CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET(SINX); /* Calcul de la partie imaginaire... */ RETU(NEUT(fxyzt)); /* Renvoi du conjugue de la partie imaginaire... */ /* */ /* Jusqu'au 20030502162917 'EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)' et */ /* 'RACX(ABSO(Fmorlet_reel__Fmorlet_imaginaire_____dilatation))' etaient permutes par */ /* erreur... */ /* */ /* Jusqu'au 20030506094554, la procedure 'ConjugaisonImaginaire_s(...)' etait utilisee par */ /* erreur pour la transformee inverse ; decidemment... */ /* */ /* Jusqu'au 20030506135231, la valeur renvoyee ici etait : */ /* */ /* DIVI(NEUT(fxyzt),EXP2(Fmorlet_reel__Fmorlet_imaginaire_____dilatation)) */ /* */ /* mais en fait le diviseur ne doit pas intervenir dans cette definition de l'ondelette, */ /* mais bien plutot dans la transformee l'utilisant ('v $xci/morlet.12$Z 20030506135745'). */ Eblock EFonctionF #undef CALCUL_D_UN_POINT_DU_CHAMP_DE_MORLET #undef Yf_dilate #undef Xf_dilate _______________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E B U T D E S P R O B L E M E S S U R D P X 5 0 0 0 E T N W S 3 0 0 0 : */ /* */ /*************************************************************************************************************************************/ #ifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : indicateur de VERSION. */ DEFV(Common,DEFV(Logical,_______VERSION__COMPILER_LA_FONCTION_Iiteration_champ)); #Aifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : indicateur de VERSION. */ #Eifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : indicateur de VERSION. */ #ifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : gestion des 'IFS'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D ' U N E I M A G E P A R U N E I T E R A T I O N */ /* O U " I T E R A T E D F U N C T I O N S E T " : */ /* */ /* */ /* Definition : */ /* */ /* Pour chaque point {X,Y} d'un champ, on */ /* iterera N fois la transformation lineaire */ /* suivante : */ /* */ /* / \ / \ */ /* | X | | X | */ /* | | = M.| | + T */ /* | Y | | Y | */ /* \ / \ / */ /* */ /* ou la matrice 'M' et le vecteur colonne 'T' */ /* (dit "de translation") sont choisis de facon */ /* aleatoire parmi un ensemble de couples {M(i),T(i)}. */ /* A chacun de ces couples est donc associee une */ /* probabilite 'P(i)'. */ /* */ /*************************************************************************************************************************************/ BFonctionP DEFV(Local,DEFV(Int,INIT(Iiteration_champ_____compteur_d_iterations,UNDEF))); /* Ce compteur compte pour le point courant {X,Y} le nombre d'iterations ; il */ /* est accessible aux fonctions specifiques 'Fx' et 'Fy', et permet donc si */ /* besoin est de generer des sequences propres de nombres aleatoires "synchro- */ /* nisees" pour les composantes horizontales et verticales. ATTENTION, jusqu'au */ /* 19970704093610, 'Iiteration_champ_____compteur_d_iterations' etait declare 'Float' par */ /* erreur ; ceci s'est vu lors de l'introduction des bibliotheques de type '$SO'... */ DEFV(Common,DEFV(FonctionP,POINTERp(Iiteration_champ(imageR ,imageA ,ARGUMENT_FONCTION(Fx),ARGUMENT_FONCTION(Fy) ,ARGUMENT_POINTERs(ponderation) ,ARGUMENT_POINTERs(translation) ,premier_point_trace,nombre_de_points ,trace_modulo ) ) ) ) DEFV(Argument,DEFV(image,imageR)); /* Image Resultat a initialiser. */ DEFV(Argument,DEFV(image,imageA)); /* Image Argument donnant les niveaux de 'imageR', */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fx))); /* Fonction de transformation de l'abscisse, */ DEFV(Argument,DEFV(Float,afPOINTEUR(Fy))); /* Fonction de transformation de l'ordonnee. */ DEFV(Argument,DEFV(coeffF_2D,POINTERs(ponderation))); /* Ponderation bi-dimensionnelle des coordonnees du champ a generer, */ DEFV(Argument,DEFV(deltaF_2D,POINTERs(translation))); /* Translation bi-dimensionnelle des coordonnees du champ a generer. */ DEFV(Argument,DEFV(Int,premier_point_trace)); /* Numero du premier point trace. */ DEFV(Argument,DEFV(Int,nombre_de_points)); /* Nombre d'iterations a effectuer. */ DEFV(Argument,DEFV(Logical,trace_modulo)); /* Indique si l'on doit utiliser 'store_point_modulo' ('VALIDE') ou */ /* 'store_point_valide' ('INVALIDE'...). */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(Xf,FLOT__UNDEF)); DEFV(Float,INIT(Yf,FLOT__UNDEF)); /* Coordonnees flottantes 'X' et 'Y'. */ DEFV(pointF_2D,point_de_depart); /* Point flottant de depart d'une iteration. */ DEFV(pointF_2D,point_flottant_courant); /* Point flottant courant. */ DEFV(genere_p,INIT(niveau_de_marquage,NIVEAU_UNDEF)); /* Niveau de marquage du point {Xf,Yf}. */ /*..............................................................................................................................*/ begin_image Bblock Test(TEST_MASQUE_ACTIF(X,Y,MASQUER_PARCOURS)) Bblock INITIALISATION_POINT_2D(point_de_depart,_____cNORMALISE_OX(X),_____cNORMALISE_OY(Y)); /* Le point de depart de l'iteration est le point courant {X,Y},s'il */ /* n'est pas masque... */ TRANSFERT_POINT_2D(point_flottant_courant,point_de_depart); /* Initialisation du point courant de l'iteration. */ EGAL(niveau_de_marquage,load_point(imageA,X,Y)); /* Le niveau a utiliser pour marquer le point itere {Xf,Yf} sera celui */ /* du point de depart {X,Y}. */ CLIR(Iiteration_champ_____compteur_d_iterations); Komp(numero_du_point,nombre_de_points) Bblock EGAL(Xf ,fPOINTEUR(Fx)(DPRE(SOUS(ASD1(point_flottant_courant,x),ASD1(point_de_depart,x))) ,DPRE(SOUS(ASD1(point_flottant_courant,y),ASD1(point_de_depart,y))) ) ); EGAL(Yf ,fPOINTEUR(Fy)(DPRE(SOUS(ASD1(point_flottant_courant,x),ASD1(point_de_depart,x))) ,DPRE(SOUS(ASD1(point_flottant_courant,y),ASD1(point_de_depart,y))) ) ); /* Le point courant est transforme suivant la transformation (Fx,Fy). */ INITIALISATION_POINT_2D(point_flottant_courant,Xf,Yf); /* Puis iteration : */ /* */ /* point_flottant_courant <-- F (point_flottant_courant) */ /* x/y */ /* */ /* 'point_flottant_courant' etant initialise par 'point_de_depart' soit {X,Y}... */ Test(IFGE(numero_du_point,premier_point_trace)) Bblock DEFV(pointI_2D,point_entier_courant); INITIALISATION_POINT_2D(point_entier_courant ,ADD2(_cDENORMALISE_OX(MUL2(ASI1(ponderation,cx),ASD1(point_flottant_courant,x))) ,_lDENORMALISE_OX(ASI1(translation,dx)) ) ,ADD2(_cDENORMALISE_OY(MUL2(ASI1(ponderation,cy),ASD1(point_flottant_courant,y))) ,_lDENORMALISE_OY(ASI1(translation,dy)) ) ); /* Point entier itere courant. Cette structure intermediaire a ete introduite a cause de */ /* 'SYSTEME_SUN4NCUBE2S_SUNOS_CC' qui nous gratifiait alors du message : */ /* */ /* ... line ...: compiler error: out of tree space; try simplifying */ /* */ /* et suite a cette aimable demande, j'ai simplifie... */ Test(EST_VALIDE(trace_modulo)) Bblock store_point_modulo(niveau_de_marquage ,imageR ,ASD1(point_entier_courant,x) ,ASD1(point_entier_courant,y) ,FVARIABLE ); /* Et marquage en mode "modulo" de l'itere courant {Xf,Yf} du point courant {X,Y}. */ Eblock ATes Bblock store_point_valide(niveau_de_marquage ,imageR ,ASD1(point_entier_courant,x) ,ASD1(point_entier_courant,y) ,FVARIABLE ); /* Et marquage "normal" de l'itere courant {Xf,Yf} du point courant {X,Y}. */ Eblock ETes Eblock ATes Bblock Eblock ETes INCR(Iiteration_champ_____compteur_d_iterations,I); Eblock EKom Eblock ATes Bblock Eblock ETes Eblock end_image RETI(imageR); Eblock EFonctionP /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S T R A N S F O R M A T I O N S A F F I N E S : */ /* */ /*************************************************************************************************************************************/ Dstruct03(affine2D /* Definition d'une transformation affine dans l'espace a deux dimensions. */ ,DEFV(matrixF_2D,matrice) /* Matrice de transformation 'M', */ ,DEFV(deltaF_2D,translation) /* Translation 'T' apres application de la matrice de transformation, */ ,DEFV(Float,probabilite) /* Probabilite d'appliquer cette transformation affine. */ ,NOM_VIDE ); TypedefP(affine_2D,STRU(affine2D)) # define SELECT_AFFINE_ELEMENT(element,valeur_par_defaut,liste_des_arguments,prefixe) \ Bblock \ EGAL(element,valeur_par_defaut); \ EGAL(element \ ,FconversionF(chain_recherche(liste_des_arguments,prefixe) \ ,prefixe \ ,element \ ,NE_PAS_EDITER_LES_VALEURS_APRES_Fconversion \ ,C_VIDE \ ,C_VIDE \ ) \ ); \ /* Le deuxieme 'C_VIDE' a ete introduit le 20060310135140... */ \ Eblock \ /* Recuperation d'un element quelconque d'une transformation affine. */ # define AFFINE_Ma_xx \ "Mxx=" \ /* Recuperation de l'element 'matrice(cx.cx)', */ # define SELECT_AFFINE_Ma_xx(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cx,cx),FU,liste_des_arguments,AFFINE_Ma_xx); \ Eblock \ /* Selection du premier element 'Ma(cx,cx)' (a priori "transformation unite"), */ # define AFFINE_Ma_xy \ "Mxy=" \ /* Recuperation de l'element 'matrice(cx,cy)', */ # define SELECT_AFFINE_Ma_xy(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cx,cy),FZERO,liste_des_arguments,AFFINE_Ma_xy); \ Eblock \ /* Selection du deuxieme element 'Ma(cx,cy)' (a priori "transformation unite"), */ # define AFFINE_Ma_yx \ "Myx=" \ /* Recuperation de l'element 'matrice(cy,cx)', */ # define SELECT_AFFINE_Ma_yx(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cy,cx),FZERO,liste_des_arguments,AFFINE_Ma_yx); \ Eblock \ /* Selection du troisieme element 'Ma(cy,cx)' (a priori "transformation unite"), */ # define AFFINE_Ma_yy \ "Myy=" \ /* Recuperation de l'element 'matrice(cy,cy)', */ # define SELECT_AFFINE_Ma_yy(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD3(nom_de_la_transformation,matrice,cy,cy),FU,liste_des_arguments,AFFINE_Ma_yy); \ Eblock \ /* Selection du quatrieme element 'Ma(cy,cy)' (a priori "transformation unite"), */ # define AFFINE_Tr_x \ "Tx=" \ /* Recuperation de l'element 'translation(dx)', */ # define SELECT_AFFINE_Tr_x(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD2(nom_de_la_transformation,translation,dx),FZERO,liste_des_arguments,AFFINE_Tr_x); \ Eblock \ /* Selection du cinquieme element 'Tr(dx)' (a priori "translation nulle"), */ # define AFFINE_Tr_y \ "Ty=" \ /* Recuperation de l'element 'translation(dy)', */ # define SELECT_AFFINE_Tr_y(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD2(nom_de_la_transformation,translation,dy),FZERO,liste_des_arguments,AFFINE_Tr_y); \ Eblock \ /* Selection du sixieme element 'Tr(dy)' (a priori "translation nulle"), */ # define AFFINE_Pr \ "P=" \ /* Recuperation de l'element 'probabilite', */ # define SELECT_AFFINE_Pr(nom_de_la_transformation,liste_des_arguments) \ Bblock \ SELECT_AFFINE_ELEMENT(ASD1(nom_de_la_transformation,probabilite),FU,liste_des_arguments,AFFINE_Pr); \ Eblock \ /* Selection du septieme element 'Pr' (a priori "evenement certain"). */ # define SELECT_AFFINE(nom_de_la_transformation,liste_des_arguments,traitement_des_probabilites) \ Bblock \ SELECT_AFFINE_Ma_xx(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Ma_xy(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Ma_yx(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Ma_yy(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Tr_x(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Tr_y(nom_de_la_transformation,liste_des_arguments); \ SELECT_AFFINE_Pr(nom_de_la_transformation,liste_des_arguments); \ \ BLOC(traitement_des_probabilites;) \ Eblock \ /* Selection des sept elements... */ # define TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,c_coordonnee,d_coordonnee) \ ADD2(ADD2(MUL2(ASD3(nom_de_la_transformation,matrice,c_coordonnee,cx),Xf) \ ,MUL2(ASD3(nom_de_la_transformation,matrice,c_coordonnee,cy),Yf) \ ) \ ,ASD2(nom_de_la_transformation,translation,d_coordonnee) \ ) \ /* Transformation affine d'une coordonnee quelconque. */ # define TRANSFORMATION_AFFINE_X(nom_de_la_transformation) \ TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,cx,dx) \ /* Transformation affine de l'abscisse. */ # define TRANSFORMATION_AFFINE_Y(nom_de_la_transformation) \ TRANSFORMATION_AFFINE_COORDONNEE(nom_de_la_transformation,cy,dy) \ /* Transformation affine de l'ordonnee. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S D E L ' I T E R A T I O N D E S I E R P I N S K I : */ /* */ /*************************************************************************************************************************************/ # define SIERPINSKI_1 \ "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500 Tx=+0.000 Ty=+0.000 P=0.334" \ /* Definition de la premiere transformation, */ # define SIERPINSKI_2 \ "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500 Tx=+1.000 Ty=+0.000 P=0.333" \ /* Definition de la deuxieme transformation, */ # define SIERPINSKI_3 \ "Mxx=+0.500 Mxy=+0.000 Myx=+0.000 Myy=+0.500 Tx=+0.500 Ty=+0.500 P=0.333" \ /* Definition de la troisieme transformation. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D E L ' I T E R A T I O N D E S I E R P I N S K I : */ /* */ /*************************************************************************************************************************************/ # define INITIALISATION_SIERPINSKI \ Bblock \ INITIALISATION_POINT_2D(point_courant,Xf,Yf); \ /* Initialisation du point courant. */ \ \ Test(EST_FAUX(Fx_Sierpinski__Fy_Sierpinski_____initialisation)) \ Bblock \ CALS(rdnF2D(ADRESSE(point_courant),UNDEF,RDN_INIT,FZERO,FU)); \ /* On initialise le generateur aleatoire dans [0,1]... */ \ \ SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t1 \ ,SIERPINSKI_1 \ ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite),FZERO);) \ ); \ /* Recuperation de la premiere transformation, */ \ SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t2 \ ,SIERPINSKI_2 \ ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite) \ ,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite) \ ); \ ) \ ); \ /* Recuperation de la deuxieme transformation, */ \ SELECT_AFFINE(Fx_Sierpinski__Fy_Sierpinski_____t3 \ ,SIERPINSKI_3 \ ,BLOC(INCR(ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite) \ ,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite) \ ); \ ) \ ); \ /* Recuperation de la troisieme transformation. */ \ \ EGAL(Fx_Sierpinski__Fy_Sierpinski_____initialisation,VRAI); \ /* Et on memorise cette initialisation... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ EGAL(aleatoire \ ,rdnF2D(ADRESSE(point_courant) \ ,ADD2(Fx_Sierpinski__Fy_Sierpinski_____graine,Iiteration_champ_____compteur_d_iterations) \ ,RDN_GENERE \ ,FLOT__ARGUMENT_ABSENT,FLOT__ARGUMENT_ABSENT \ ) \ ); \ Eblock \ /* Pour ne pas toujours generer les memes valeurs... */ \ /* procedure d'initialisation des elements necessaires a l'iteration */ \ /* de Sierpinski. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D O N N E E S D E L ' I T E R A T I O N D E S I E R P I N S K I : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Logical,INIT(Fx_Sierpinski__Fy_Sierpinski_____initialisation,FAUX))); /* Cet indicateur permet de savoir si les differentes donnees necessaires */ /* a l'iteration de Sierpinski sont initialisees ('VRAI') ou pas ('FAUX'). */ DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t1)); /* Premiere transformation, */ DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t2)); /* Deuxieme transformation, */ DEFV(Local,DEFV(affine_2D,Fx_Sierpinski__Fy_Sierpinski_____t3)); /* Troisieme transformation. */ DEFV(Common,DEFV(Int,ZINT(Fx_Sierpinski__Fy_Sierpinski_____graine,UN))); /* Graine a priori du generateur aleatoire utilise par Sierpinski. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E H O R I Z O N T A L E D E L ' I T E R A T I O N D E S I E R P I N S K I : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fx_Sierpinski(Xf,Yf,Zf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(pointF_2D,point_courant); /* Point courant a deplacer. */ DEFV(Float,INIT(aleatoire,FLOT__UNDEF)); /* Valeur aleatoire courante fonction de l'abscisse. */ DEFV(Float,INIT(fxyz,FLOT__UNDEF)); /* Valeur de la fonction. */ /*..............................................................................................................................*/ INITIALISATION_SIERPINSKI; EGAL(fxyz ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t1) ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t2) ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_Sierpinski__Fy_Sierpinski_____t3) ,FXorigine ) ) ) ); RETU(fxyz); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E V E R T I C A L E D E L ' I T E R A T I O N D E S I E R P I N S K I : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fy_Sierpinski(Xf,Yf,Zf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(pointF_2D,point_courant); /* Point courant a deplacer. */ DEFV(Float,INIT(aleatoire,FLOT__UNDEF)); /* Valeur aleatoire courante fonction de l'ordonnee. */ DEFV(Float,INIT(fxyz,FLOT__UNDEF)); /* Valeur de la fonction. */ /*..............................................................................................................................*/ INITIALISATION_SIERPINSKI; EGAL(fxyz ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t1,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t1) ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t2,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t2) ,COND(IFLE(aleatoire,ASD1(Fx_Sierpinski__Fy_Sierpinski_____t3,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_Sierpinski__Fy_Sierpinski_____t3) ,FYorigine ) ) ) ); RETU(fxyz); Eblock EFonctionF # undef INITIALISATION_SIERPINSKI # undef SIERPINSKI_3 # undef SIERPINSKI_2 # undef SIERPINSKI_1 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S D E L ' I T E R A T I O N D E F O U G E R E : */ /* */ /*************************************************************************************************************************************/ # define FOUGERE_1 \ "Mxx=+0.000 Mxy=+0.000 Myx=+0.000 Myy=+0.160 Tx=+0.000 Ty=+0.000 P=0.010" \ /* Definition de la premiere transformation, */ # define FOUGERE_2 \ "Mxx=+0.200 Mxy=-0.260 Myx=+0.230 Myy=+0.220 Tx=+0.000 Ty=+1.600 P=0.070" \ /* Definition de la deuxieme transformation, */ # define FOUGERE_3 \ "Mxx=-0.150 Mxy=+0.280 Myx=+0.260 Myy=+0.240 Tx=+0.000 Ty=+0.440 P=0.070" \ /* Definition de la troisieme transformation, */ # define FOUGERE_4 \ "Mxx=+0.850 Mxy=+0.040 Myx=-0.040 Myy=+0.850 Tx=+0.000 Ty=+1.600 P=0.850" \ /* Definition de la quatrieme transformation. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N I T I A L I S A T I O N D E L ' I T E R A T I O N D E F O U G E R E : */ /* */ /*************************************************************************************************************************************/ # define INITIALISATION_FOUGERE \ Bblock \ INITIALISATION_POINT_2D(point_courant,Xf,Yf); \ /* Initialisation du point courant. */ \ \ Test(EST_FAUX(Fx_fougere__Fy_fougere_____initialisation)) \ Bblock \ CALS(rdnF2D(ADRESSE(point_courant),UNDEF,RDN_INIT,FZERO,FU)); \ /* On initialise le generateur aleatoire dans [0,1]... */ \ \ SELECT_AFFINE(Fx_fougere__Fy_fougere_____t1 \ ,FOUGERE_1 \ ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t1,probabilite),FZERO);) \ ); \ /* Recuperation de la premiere transformation, */ \ SELECT_AFFINE(Fx_fougere__Fy_fougere_____t2 \ ,FOUGERE_2 \ ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t2,probabilite) \ ,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite) \ ); \ ) \ ); \ /* Recuperation de la deuxieme transformation, */ \ SELECT_AFFINE(Fx_fougere__Fy_fougere_____t3 \ ,FOUGERE_3 \ ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t3,probabilite) \ ,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite) \ ); \ ) \ ); \ /* Recuperation de la troisieme transformation, */ \ SELECT_AFFINE(Fx_fougere__Fy_fougere_____t4 \ ,FOUGERE_4 \ ,BLOC(INCR(ASD1(Fx_fougere__Fy_fougere_____t4,probabilite) \ ,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite) \ ); \ ) \ ); \ /* Recuperation de la quatrieme transformation. */ \ \ EGAL(Fx_fougere__Fy_fougere_____initialisation,VRAI); \ /* Et on memorise cette initialisation... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ EGAL(aleatoire \ ,rdnF2D(ADRESSE(point_courant) \ ,ADD2(Fx_fougere__Fy_fougere_____graine,Iiteration_champ_____compteur_d_iterations) \ ,RDN_GENERE \ ,FLOT__ARGUMENT_ABSENT,FLOT__ARGUMENT_ABSENT \ ) \ ); \ Eblock \ /* Procedure d'initialisation des elements necessaires a l'iteration */ \ /* de fougere. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D O N N E E S D E L ' I T E R A T I O N D E F O U G E R E : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Logical,INIT(Fx_fougere__Fy_fougere_____initialisation,FAUX))); /* Cet indicateur permet de savoir si les differentes donnees necessaires */ /* a l'iteration de fougere sont initialisees ('VRAI') ou pas ('FAUX'). */ DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t1)); /* Premiere transformation, */ DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t2)); /* Deuxieme transformation, */ DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t3)); /* Troisieme transformation, */ DEFV(Local,DEFV(affine_2D,Fx_fougere__Fy_fougere_____t4)); /* Quatrieme transformation. */ DEFV(Common,DEFV(Int,ZINT(Fx_fougere__Fy_fougere_____graine,UN))); /* Graine a priori du generateur aleatoire utilise par fougere. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E H O R I Z O N T A L E D E L ' I T E R A T I O N D E F O U G E R E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fx_fougere(Xf,Yf,Zf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(pointF_2D,point_courant); /* Point courant a deplacer. */ DEFV(Float,INIT(aleatoire,FLOT__UNDEF)); /* Valeur aleatoire courante fonction de l'abscisse. */ DEFV(Float,INIT(fxyz,FLOT__UNDEF)); /* Valeur de la fonction. */ /*..............................................................................................................................*/ INITIALISATION_FOUGERE; EGAL(fxyz ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t1) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t2) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t3) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t4,probabilite)) ,TRANSFORMATION_AFFINE_X(Fx_fougere__Fy_fougere_____t4) ,FXorigine ) ) ) ) ); RETU(fxyz); Eblock EFonctionF /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C O M P O S A N T E V E R T I C A L E D E L ' I T E R A T I O N D E F O U G E R E : */ /* */ /*************************************************************************************************************************************/ BFonctionF DEFV(Common,DEFV(FonctionF,Fy_fougere(Xf,Yf,Zf))) DEFV(Argument,DEFV(Float,Xf)); DEFV(Argument,DEFV(Float,Yf)); DEFV(Argument,DEFV(Float,Zf)); /* Coordonnees flottantes 'Xf' et 'Yf' dans [0,1[, la coordonnee 'Zf' etant inutilisee... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(pointF_2D,point_courant); /* Point courant a deplacer. */ DEFV(Float,INIT(aleatoire,FLOT__UNDEF)); /* Valeur aleatoire courante fonction de l'ordonnee. */ DEFV(Float,INIT(fxyz,FLOT__UNDEF)); /* Valeur de la fonction. */ /*..............................................................................................................................*/ INITIALISATION_FOUGERE; EGAL(fxyz ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t1,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t1) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t2,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t2) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t3,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t3) ,COND(IFLE(aleatoire,ASD1(Fx_fougere__Fy_fougere_____t4,probabilite)) ,TRANSFORMATION_AFFINE_Y(Fx_fougere__Fy_fougere_____t4) ,FYorigine ) ) ) ) ); RETU(fxyz); Eblock EFonctionF # undef INITIALISATION_FOUGERE # undef FOUGERE_4 # undef FOUGERE_3 # undef FOUGERE_2 # undef FOUGERE_1 /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* N E T T O Y A G E : */ /* */ /*************************************************************************************************************************************/ # undef TRANSFORMATION_AFFINE_Y # undef TRANSFORMATION_AFFINE_X # undef TRANSFORMATION_AFFINE_COORDONNEE # undef SELECT_AFFINE # undef SELECT_AFFINE_Pr # undef AFFINE_Pr # undef SELECT_AFFINE_Tr_y # undef AFFINE_Tr_y # undef SELECT_AFFINE_Tr_x # undef AFFINE_Tr_x # undef SELECT_AFFINE_Ma_yy # undef AFFINE_Ma_yy # undef SELECT_AFFINE_Ma_yx # undef AFFINE_Ma_yx # undef SELECT_AFFINE_Ma_xy # undef AFFINE_Ma_xy # undef SELECT_AFFINE_Ma_xx # undef AFFINE_Ma_xx # undef SELECT_AFFINE_ELEMENT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I N D E S P R O B L E M E S S U R D P X 5 0 0 0 E T N W S 3 0 0 0 : */ /* */ /*************************************************************************************************************************************/ #Aifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : gestion des 'IFS'... */ /* sur 'SYSTEME_DPX5000_SPIX_CC', les 'Iterated Function Set' ne sont pas compiles afin */ /* d'eviter un "debordement" de la zone de swap lors de la compilation... */ /* sur 'SYSTEME_NWS3000_NEWSOS_CC' les 'Iterated Function Set' ne sont pas compiles afin */ /* d'eviter une mauvaise generation du code binaire... */ /* sur 'SYSTEME_NWS3000_NEWSOS_2CC' les 'Iterated Function Set' ne sont pas compiles afin */ /* d'eviter une mauvaise generation du code binaire... */ #Eifdef __VERSION__COMPILER_LA_FONCTION_Iiteration_champ /* Common,DEFV(Fonction,) : gestion des 'IFS'... */ _______________________________________________________________________________________________________________________________________