_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/* */
/* 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'... */
_______________________________________________________________________________________________________________________________________