/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A S U R F A C E P R O P R E M E N T D I T : */
/* */
/* */
/* Author of '$xrs/surfaces.12$I' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S I M A G E S F L O T T A N T E S U T I L E S : */
/* */
/*************************************************************************************************************************************/
-define image_Texture_R \
-_-_-_- IFmageA1
-define image_Texture_V \
-_-_-_- IFmageA2
-define image_Texture_B \
-_-_-_- IFmageA3
-define image_Rayon \
-_-_-_- IFmageA4
-define image_Coordonnee_U \
-_-_-_- IFmageA5
-define image_Coordonnee_V \
-_-_-_- IFmageA6
-define image_Trous \
-_-_-_- IFmageA7
-define image_Droite_UV_Calculee__ \
-_-_-_- IFmageA8
-define image_Droite_UV_Definition \
-_-_-_- IFmageA9
/* L'ensemble de ces definitions fut introduit le 20080705095732... */
/* */
/* Le 20170210155045, 'image_Droite_UV' est devenue 'image_Droite_UV_Calculee__' et */
/* 'image_Droite_UV_Definition' afin de faire la difference avec les eventuels Argument */
/* et Resultat... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C A L C U L D E L A S U R F A C E V I A L E S C O O R D O N N E E S C U R V I L I G N E S : */
/* */
/*************************************************************************************************************************************/
#include xrk/attractor.1A.I"
#include xrv/champs_5.19.I"
/* Pour eviter le message : */
/* */
/* Static function is not referenced. */
/* */
#include xrk/attractor.19.I"
/* Validations et definition de l'espace physique. */
-define u_NORMALISEE \
-_-_-_- NORM(TRON(u,minimum_de_u,maximum_de_u),minimum_de_u,maximum_de_u)
-define v_NORMALISEE \
-_-_-_- NORM(TRON(v,minimum_de_v,maximum_de_v),minimum_de_v,maximum_de_v)
/* Introduit le 20041113111751. On notera que l'on ne peut utiliser {u_effectif,v_effectif} */
/* vu l'usage qui en est fait, en particulier pour acceder aux deux matrices */
/* {image_Coordonnee_U,image_Coordonnee_V} qui precisemment definissent */
/* {u_effectif,v_effectif} : cela "se mordrait la queue"... */
/* */
/* Le 20091102123057, la fonction 'TRON(...)' a ete introduite car, en effet, rien ne */
/* garantit avec certitude que les coordonnees {u,v} sont bien comprises entre les deux */
/* extrema... */
-define imageA_Droite_uv__interpoler \
-_-_-_- imageA_Droite_uv__interpoler_bilineairement_ou_bicubiquement
-define imageA_Droite_uv__use_interpolation_lineaire \
-_-_-_- imageA_Droite_uv__utiliser_l_interpolation_bilineaire
-define imageA_Droite_uv__eviter__discontinuites \
-_-_-_- imageA_Droite_uv__eviter_les_fortes_discontinuites
-define imageA_Droite_uv__epsilon_discontinuites \
-_-_-_- imageA_Droite_uv__epsilon_detection_des_fortes_discontinuites
-define image_Coordonnee_U__interpoler \
-_-_-_- image_Coordonnee_U__interpoler_bilineairement_ou_bicubiquement
-define image_Coordonnee_U__use_interpolation_lineaire \
-_-_-_- image_Coordonnee_U__utiliser_l_interpolation_bilineaire
-define image_Coordonnee_U__eviter__discontinuites \
-_-_-_- image_Coordonnee_U__eviter_les_fortes_discontinuites
-define image_Coordonnee_U__epsilon_discontinuites \
-_-_-_- image_Coordonnee_U__epsilon_detection_des_fortes_discontinuites
-define image_Coordonnee_V__interpoler \
-_-_-_- image_Coordonnee_V__interpoler_bilineairement_ou_bicubiquement
-define image_Coordonnee_V__use_interpolation_lineaire \
-_-_-_- image_Coordonnee_V__utiliser_l_interpolation_bilineaire
-define image_Coordonnee_V__eviter__discontinuites \
-_-_-_- image_Coordonnee_V__eviter_les_fortes_discontinuites
-define image_Coordonnee_V__epsilon_discontinuites \
-_-_-_- image_Coordonnee_V__epsilon_detection_des_fortes_discontinuites
-define image_Trous__interpoler \
-_-_-_- image_Trous__interpoler_bilineairement_ou_bicubiquement
-define image_Trous__use_interpolation_lineaire \
-_-_-_- image_Trous__utiliser_l_interpolation_bilineaire
-define image_Trous__eviter__discontinuites \
-_-_-_- image_Trous__eviter_les_fortes_discontinuites
-define image_Trous__epsilon_discontinuites \
-_-_-_- image_Trous__epsilon_detection_des_fortes_discontinuites
-define image_Rayon__interpoler \
-_-_-_- image_Rayon__interpoler_bilineairement_ou_bicubiquement
-define image_Rayon__use_interpolation_lineaire \
-_-_-_- image_Rayon__utiliser_l_interpolation_bilineaire
-define image_Rayon__eviter__discontinuites \
-_-_-_- image_Rayon__eviter_les_fortes_discontinuites
-define image_Rayon__epsilon_discontinuites \
-_-_-_- image_Rayon__epsilon_detection_des_fortes_discontinuites
-define image_Texture_R__interpoler \
-_-_-_- image_Texture_R__interpoler_bilineairement_ou_bicubiquement
-define image_Texture_R__use_interpolation_lineaire \
-_-_-_- image_Texture_R__utiliser_l_interpolation_bilineaire
-define image_Texture_R__eviter__discontinuites \
-_-_-_- image_Texture_R__eviter_les_fortes_discontinuites
-define image_Texture_R__epsilon_discontinuites \
-_-_-_- image_Texture_R__epsilon_detection_des_fortes_discontinuites
-define image_Texture_V__interpoler \
-_-_-_- image_Texture_V__interpoler_bilineairement_ou_bicubiquement
-define image_Texture_V__use_interpolation_lineaire \
-_-_-_- image_Texture_V__utiliser_l_interpolation_bilineaire
-define image_Texture_V__eviter__discontinuites \
-_-_-_- image_Texture_V__eviter_les_fortes_discontinuites
-define image_Texture_V__epsilon_discontinuites \
-_-_-_- image_Texture_V__epsilon_detection_des_fortes_discontinuites
-define image_Texture_B__interpoler \
-_-_-_- image_Texture_B__interpoler_bilineairement_ou_bicubiquement
-define image_Texture_B__use_interpolation_lineaire \
-_-_-_- image_Texture_B__utiliser_l_interpolation_bilineaire
-define image_Texture_B__eviter__discontinuites \
-_-_-_- image_Texture_B__eviter_les_fortes_discontinuites
-define image_Texture_B__epsilon_discontinuites \
-_-_-_- image_Texture_B__epsilon_detection_des_fortes_discontinuites
/* Afin de raccourcir des lignes qui suivent... */
-define GENERATION_DU_TEXTURAGE_DE_LA_SURFACE(texture_x,texture_y,texture_z) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(grossissement_courant_du_rayon_de_visualisation \
-_-_-_- ,COND(IFET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \
-_-_-_- ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \
-_-_-_- ) \
-_-_-_- ,grossissement_du_rayon_de_visualisation_aux_intersections_des_lignes_de_coordonnees \
-_-_-_- ,FU \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Afin de pouvoir marquer l'intersection des meridiens et des paralleles. Ceci a ete */ \
-_-_-_- /* ete introduit le 20041229183827... */ \
-_-_-_- \
-_-_-_- BSaveModifyVariable(Logical \
-_-_-_- ,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929 \
-_-_-_- ,COND(IL_FAUT(AXES_COORDONNEES_FERMES_OUVERTS__texturage_surfaces_____compatibilite_20130220) \
-_-_-_- ,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929 \
-_-_-_- ,VRAI \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Introduit le 20130220131511 et mis avant 'rayon_de_visualisation' le 20160326104228 */ \
-_-_-_- /* (donc avec quelques annees de retard...). */ \
-_-_-_- \
-_-_-_- Test(IFEQ_chaine(fichier_des_coordonnees_RAYON,NOM_PIPE_Local)) \
-_-_-_- /* Introduit le 20240517151859... */ \
-_-_-_- Bblock \
-_-_-_- Test(IL_FAUT(rayon_de_visualisation_____compatibilite_20170303)) \
-_-_-_- /* Test introduit le 20170303103205... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(rayon_de_visualisation \
-_-_-_- ,MUL2(grossissement_courant_du_rayon_de_visualisation \
-_-_-_- ,loadF_point_valide(image_Rayon \
-_-_-_- ,_cDENORMALISE_OX(u_NORMALISEE) \
-_-_-_- ,_cDENORMALISE_OY(v_NORMALISEE) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Le champ rayon a ete introduit le 20041229174601. On notera que 'loadF_point(...)' */ \
-_-_-_- /* est utilise et non pas 'sgFFload_point_coordonnees_01(...)' comme on pourrait l'imaginer. */ \
-_-_-_- /* En effet, 'loadF_point(...)' garantit la valeur recuperee dans 'IFmageA4', alors que */ \
-_-_-_- /* 'sgFFload_point_coordonnees_01(...)' ferait une interpolation ; or dans le cas ou l'image */ \
-_-_-_- /* 'IFmageA4' est initialisee ci-apres via 'ACCES_AUX_IMAGES_FLOTTANTES(...)' avec la valeur */ \
-_-_-_- /* 'rayon_de_visualisation', il est essentiel de retrouver 'rayon_de_visualisation' quelle */ \
-_-_-_- /* que soient les valeurs de {u,v}... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20160326104228, le 'loadF_point(...)' a ete remplace, avec quelques annees de */ \
-_-_-_- /* retard par un 'loadF_point_valide(...)'... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(rayon_de_visualisation \
-_-_-_- ,MUL2(grossissement_courant_du_rayon_de_visualisation \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Rayon \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,rayon_periodiser_X,rayon_periodiser_Y \
-_-_-_- ,rayon_symetriser_X,rayon_symetriser_Y \
-_-_-_- ,rayon_prolonger_X,rayon_prolonger_Y \
-_-_-_- ,rayon_niveau_hors_image \
-_-_-_- ,image_Rayon__interpoler \
-_-_-_- ,image_Rayon__use_interpolation_lineaire \
-_-_-_- ,image_Rayon__eviter__discontinuites \
-_-_-_- ,image_Rayon__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(texture_____compatibilite_20170303)) \
-_-_-_- /* Test introduit le 20170303103205... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(texture_x \
-_-_-_- ,loadF_point_valide(image_Texture_R \
-_-_-_- ,_cDENORMALISE_OX(u_NORMALISEE) \
-_-_-_- ,_cDENORMALISE_OY(v_NORMALISEE) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_y \
-_-_-_- ,loadF_point_valide(image_Texture_V \
-_-_-_- ,_cDENORMALISE_OX(u_NORMALISEE) \
-_-_-_- ,_cDENORMALISE_OY(v_NORMALISEE) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_z \
-_-_-_- ,loadF_point_valide(image_Texture_B \
-_-_-_- ,_cDENORMALISE_OX(u_NORMALISEE) \
-_-_-_- ,_cDENORMALISE_OY(v_NORMALISEE) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Le 20130221074236, les 'loadF_point(...)'s ont ete remplaces, pour des raisons de */ \
-_-_-_- /* securite, par des 'loadF_point_valide(...)'s. Ce probleme s'est vu lors de la mmise au */ \
-_-_-_- /* point de la texture de 'v $xiirs/INFL.11' et c'est d'ailleurs a cette occasion que */ \
-_-_-_- /* 'AXES_COORDONNEES_FERMES_OUVERTS__texturage_surfaces_____compatibilite_20130220' fut */ \
-_-_-_- /* introduit... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(texture_x \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_R \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_R__interpoler \
-_-_-_- ,image_Texture_R__use_interpolation_lineaire \
-_-_-_- ,image_Texture_R__eviter__discontinuites \
-_-_-_- ,image_Texture_R__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_y \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_V \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_V__interpoler \
-_-_-_- ,image_Texture_V__use_interpolation_lineaire \
-_-_-_- ,image_Texture_V__eviter__discontinuites \
-_-_-_- ,image_Texture_V__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_z \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_B \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_B__interpoler \
-_-_-_- ,image_Texture_B__use_interpolation_lineaire \
-_-_-_- ,image_Texture_B__eviter__discontinuites \
-_-_-_- ,image_Texture_B__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- ESaveModifyVariable(Logical \
-_-_-_- ,AXES_COORDONNEES_FERMES_OUVERTS_____compatibilite_20090929 \
-_-_-_- ); \
-_-_-_- /* Introduit le 20130220131511... */ \
-_-_-_- Eblock
/* Calcul du texturage de la surface au point courant {u,v} associe au point {X,Y} de */
/* texture : */
/* */
/* {u,v} <--O--> {X,Y} */
/* */
/* et du rayon de visualisation effectif... */
-define PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES \
-_-_-_- Bblock \
-_-_-_- Test(IL_FAUT(permuter_les_coordonnees_et_les_differentielles)) \
-_-_-_- Bblock \
-_-_-_- fSWAP(cx,dcx); \
-_-_-_- fSWAP(cy,dcy); \
-_-_-_- fSWAP(cz,dcz); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock
/* Permutation eventuelle des coordonnees et des differentielles. Ce dispositif a ete */
/* introduit le 20050615083227 "pour voir ce que cela donne"... */
-define MINIMUM_DE_u_LORS_D_UNE_PROJECTION \
-_-_-_- COND(IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface) \
-_-_-_- ,minimum_de_u \
-_-_-_- ,sauvegarde_de_minimum_de_u \
-_-_-_- )
-define MAXIMUM_DE_u_LORS_D_UNE_PROJECTION \
-_-_-_- ADD2(COND(IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface) \
-_-_-_- ,maximum_de_u \
-_-_-_- ,sauvegarde_de_maximum_de_u \
-_-_-_- ) \
-_-_-_- ,MOIT(pas_de_u) \
-_-_-_- )
-define MINIMUM_DE_v_LORS_D_UNE_PROJECTION \
-_-_-_- COND(IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface) \
-_-_-_- ,minimum_de_v \
-_-_-_- ,sauvegarde_de_minimum_de_v \
-_-_-_- )
-define MAXIMUM_DE_v_LORS_D_UNE_PROJECTION \
-_-_-_- ADD2(COND(IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface) \
-_-_-_- ,maximum_de_v \
-_-_-_- ,sauvegarde_de_maximum_de_v \
-_-_-_- ) \
-_-_-_- ,MOIT(pas_de_v) \
-_-_-_- )
/* Introduit le 20050908134309... */
#ifdef SI_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS_EST_ACTIVABLE_ALORS_L_UTILISER_AUSSI_POUR_LES_DERIVEES
/* Le dispositif suivant fut introduit le 20080127084712 car, en effet, sauf pour */
/* quelques programmes (tel 'v $xrs/sphere.11$K'), le code genere pour le calcul */
/* etendu des derivees est monstrueux. C'est pourquoi celui-ci est inhibe a priori */
/* et n'est autorise a cette date que pour 'v $xrs/sphere.11$K'... */
# define EXTENSION_DU_CALCUL_DES_DERIVEES(indicateur,expression) \
USe_GooF______CONDITIONNEL(indicateur,expression)
#Aifdef SI_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS_EST_ACTIVABLE_ALORS_L_UTILISER_AUSSI_POUR_LES_DERIVEES
# define EXTENSION_DU_CALCUL_DES_DERIVEES(indicateur,expression) \
NEUT(expression)
#Eifdef SI_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS_EST_ACTIVABLE_ALORS_L_UTILISER_AUSSI_POUR_LES_DERIVEES
-define Fxyz(fonction) \
-_-_-_- USe_GooF______CONDITIONNEL(Fx_Fy_Fz_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \
-_-_-_- ,fonction \
-_-_-_- )
-define dFxyz(derivee) \
-_-_-_- EXTENSION_DU_CALCUL_DES_DERIVEES(dFx_dFy_dFz_____utiliser_l_arithmetique_etendue_au_lieu_de_l_arithmetique_de_base \
-_-_-_- ,derivee \
-_-_-_- )
/* Procedures introduites le 20080126082946... */
#ifdef PERMUTER_L_ORDRE_DE_PARCOURS_DES_COORDONNEES_u_v
/* Possibilite introduite a cause de 'v $xrs/referentiel3D.11$I 20170307094803' le */
/* 20170307103744... */
# define DEFINITION_DE__XY__de_projection \
DEFV(Int,INIT(Y_de_projection,Ymin));
# define DEFINITION_DE__echantillonnage_courant_de_uv \
DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v));
# define DEFINITION_DE__XY__de_projection__ET_DEFINITION_DE__echantillonnage_courant_de_uv \
/* Introduit le 20221221141412... */ \
DEFV(Int,INIT(X_de_projection,Xmin)); \
DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u));
# define DEFINITION_DE__FDoIn_uv \
FDoIn(v,minimum_de_v_effectif,maximum_de_v_effectif,pas_de_v_effectif) \
Bblock \
DEFINITION_DE__XY__de_projection__ET_DEFINITION_DE__echantillonnage_courant_de_uv; \
\
FDoIn(u,minimum_de_u_effectif,maximum_de_u_effectif,pas_de_u_effectif) \
Bblock
# define DEFINITION_DE__EFDoIn_uv \
INCR(echantillonnage_courant_de_u,I); \
INCR(X_de_projection,PasX); \
Eblock \
EFDoI \
\
INCR(echantillonnage_courant_de_v,I); \
INCR(Y_de_projection,PasY); \
Eblock \
EFDoI
#Aifdef PERMUTER_L_ORDRE_DE_PARCOURS_DES_COORDONNEES_u_v
# define DEFINITION_DE__XY__de_projection \
DEFV(Int,INIT(X_de_projection,Xmin)); \
/* Pour indexer les trois matrices de projection... */
# define DEFINITION_DE__echantillonnage_courant_de_uv \
DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u)); \
/* Afin de gerer l'echantillonnage de 'u' (introduit le 20021008095350 ; voir a ce */ \
/* propos 'v $xrs/surfaces.14$I 20021008094407'). */ \
/* */ \
/* La translation a ete introduite le 20040330113728 afin de permettre, par sa variation */ \
/* (0, 1, 2,...), de faire glisser la grille d'echantillonnage sur la surface... */
# define DEFINITION_DE__XY__de_projection__ET_DEFINITION_DE__echantillonnage_courant_de_uv \
/* Introduit le 20221221141412... */ \
DEFV(Int,INIT(Y_de_projection,Ymin)); \
/* Pour indexer les trois matrices de projection... */ \
DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v)); \
/* Afin de gerer l'echantillonnage de 'v' (introduit le 20021008095350 ; voir a ce */ \
/* propos 'v $xrs/surfaces.14$I 20021008094407'). */ \
/* */ \
/* La translation a ete introduite le 20040330113728 afin de permettre, par sa variation */ \
/* (0, 1, 2,...), de faire glisser la grille d'echantillonnage sur la surface... */
# define DEFINITION_DE__FDoIn_uv \
FDoIn(u,minimum_de_u_effectif,maximum_de_u_effectif,pas_de_u_effectif) \
/* Passage de 'DoIn(...)' a 'FDoIn(...)' le 20060602134331... */ \
Bblock \
DEFINITION_DE__XY__de_projection__ET_DEFINITION_DE__echantillonnage_courant_de_uv; \
\
FDoIn(v,minimum_de_v_effectif,maximum_de_v_effectif,pas_de_v_effectif) \
/* Passage de 'DoIn(...)' a 'FDoIn(...)' le 20060602134331... */ \
/* */ \
/* ATTENTION : le 20050822162446 j'ai note grace a 'v $xiirs/MOB2.11' que si les parametres */ \
/* du 'DoIn(...)' precedent (de meme evidemment que celui qui le precede...) utilisait des */ \
/* valeurs du type : */ \
/* */ \
/* mv=0 */ \
/* Mv=1 */ \
/* pv=0.01 */ \
/* */ \
/* ou 'pv' est l'inverse d'une puissance de 10, alors la borne superieure du 'DoIn(...)' */ \
/* n'est jamais atteinte. Il est donc suggere d'utiliser dans ce cas des inverses de */ \
/* puissance de 2. Grace a 'v $Dbugs/APC$D/LinuxDebian$D/GCC$D/boucle10.01$c', ce */ \
/* phenomene peut etre etudie... */ \
Bblock
# define DEFINITION_DE__EFDoIn_uv \
INCR(echantillonnage_courant_de_v,I); \
/* Gestion de l'echantillonnage de 'v'. */ \
INCR(Y_de_projection,PasY); \
/* Gestion de l'indexation des matrices de projection... */ \
Eblock \
EFDoI \
\
INCR(echantillonnage_courant_de_u,I); \
/* Gestion de l'echantillonnage de 'u'. */ \
INCR(X_de_projection,PasX); \
/* Gestion de l'indexation des matrices de projection... */ \
Eblock \
EFDoI
#Eifdef PERMUTER_L_ORDRE_DE_PARCOURS_DES_COORDONNEES_u_v
-define GENERATION_DU_POINT_uv_COURANT(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \
-_-_-_- /* Procedure introduite le 20221221111016... */ \
-_-_-_- Bblock \
-_-_-_- begin_nouveau_block \
-_-_-_- Bblock \
-_-_-_- begin_nouveau_block \
-_-_-_- Bblock \
-_-_-_- /* Je note le 20221222080846 que cette suite de 'Bblock's est destinee a ne pas changer */ \
-_-_-_- /* la tabulation de ce qui suit... */ \
-_-_-_- DEFV(Float,INIT(u_effectif \
-_-_-_- ,COND(IL_NE_FAUT_PAS(transformer_u_v) \
-_-_-_- ,u \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Coordonnee_U \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,transformer_u_v_periodiser_u \
-_-_-_- ,transformer_u_v_periodiser_v \
-_-_-_- ,transformer_u_v_symetriser_u \
-_-_-_- ,transformer_u_v_symetriser_v \
-_-_-_- ,transformer_u_v_prolonger_u \
-_-_-_- ,transformer_u_v_prolonger_v \
-_-_-_- ,transformer_u_v_niveau_hors_image \
-_-_-_- ,image_Coordonnee_U__interpoler \
-_-_-_- ,image_Coordonnee_U__use_interpolation_lineaire \
-_-_-_- ,image_Coordonnee_U__eviter__discontinuites \
-_-_-_- ,image_Coordonnee_U__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* La matrice (ou "image") definissant la transformation de la coordonnee 'u', pour etre */ \
-_-_-_- /* neutre doit avoir une structure similaire a 'v $xiio/MIRE', soit : */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* | | | | | | | | | | */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* Je note le 20060531104200 (avec un peu de retard que les {u,v} effectifs ne peuvent */ \
-_-_-_- /* etre evalues que lorsque les {u,v} "de base" sont connus, c'est-a-dire a l'interieur de */ \
-_-_-_- /* toutes les boucles 'DoIn(...)' imbriquees, d'ou de plus l'introduction des 'FDoIn(...)' */ \
-_-_-_- /* le 20060602134331 par precaution... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20060601121716 je note qu'il faut etre tres prudent quant aux eventuelles */ \
-_-_-_- /* discontinuites dans l'image ('v $xiipf/fonction.2$FON 20060601101800')... */ \
-_-_-_- DEFV(Float,INIT(u_effectif_translate,FLOT__UNDEF)); \
-_-_-_- /* Introduit le 20091102170618... */ \
-_-_-_- DEFV(Float,INIT(d_u_effectif,d_u)); \
-_-_-_- /* Definition de la differentielle de la coordonnee 'u' effective (introduite le */ \
-_-_-_- /* 20060117130150). */ \
-_-_-_- DEFV(Float,INIT(v_effectif \
-_-_-_- ,COND(IL_NE_FAUT_PAS(transformer_u_v) \
-_-_-_- ,v \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Coordonnee_V \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,transformer_u_v_periodiser_u \
-_-_-_- ,transformer_u_v_periodiser_v \
-_-_-_- ,transformer_u_v_symetriser_u \
-_-_-_- ,transformer_u_v_symetriser_v \
-_-_-_- ,transformer_u_v_prolonger_u \
-_-_-_- ,transformer_u_v_prolonger_v \
-_-_-_- ,transformer_u_v_niveau_hors_image \
-_-_-_- ,image_Coordonnee_V__interpoler \
-_-_-_- ,image_Coordonnee_V__use_interpolation_lineaire \
-_-_-_- ,image_Coordonnee_V__eviter__discontinuites \
-_-_-_- ,image_Coordonnee_V__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* La matrice (ou "image") definissant la transformation de la coordonnee 'v', pour etre */ \
-_-_-_- /* neutre doit avoir une structure similaire a 'v $xiio/MIRE' transposee, soit : */ \
-_-_-_- /* */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* ___________________ */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20060601121716 je note qu'il faut etre tres prudent quant aux eventuelles */ \
-_-_-_- /* discontinuites dans l'image ('v $xiipf/fonction.2$FON 20060601101800')... */ \
-_-_-_- DEFV(Float,INIT(v_effectif_translate,FLOT__UNDEF)); \
-_-_-_- /* Introduit le 20091102170618... */ \
-_-_-_- DEFV(Float,INIT(d_v_effectif,d_v)); \
-_-_-_- /* Definition de la differentielle de la coordonnee 'v' effective (introduite le */ \
-_-_-_- /* 20060117130150). */ \
-_-_-_- \
-_-_-_- EGAL(u_effectif \
-_-_-_- ,COND(IL_NE_FAUT_PAS(gestion_torique_de_u) \
-_-_-_- ,NEUT(u_effectif) \
-_-_-_- ,MODF(u_effectif,minimum_de_u_effectif,maximum_de_u_effectif) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(v_effectif \
-_-_-_- ,COND(IL_NE_FAUT_PAS(gestion_torique_de_v) \
-_-_-_- ,NEUT(v_effectif) \
-_-_-_- ,MODF(v_effectif,minimum_de_v_effectif,maximum_de_v_effectif) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* La gestion "torique" des coordonnees {u,v} a ete introduite le 20060601133040... */ \
-_-_-_- \
-_-_-_- Test(IFET(IFET(IFINff(u_effectif,minimum_de_u_effectif,maximum_de_u_effectif) \
-_-_-_- ,IFINff(v_effectif,minimum_de_v_effectif,maximum_de_v_effectif) \
-_-_-_- ) \
-_-_-_- /* Ce test d'inclusion a ete introduit le 20060529155547 car il manquait... */ \
-_-_-_- ,IFOU(IL_NE_FAUT_PAS(trouer_u_v) \
-_-_-_- ,IFET(IL_FAUT(trouer_u_v) \
-_-_-_- ,EST_VRAI(fLOGI(sgFFload_point_coordonnees_01(image_Trous \
-_-_-_- ,u_NORMALISEE \
-_-_-_- ,v_NORMALISEE \
-_-_-_- ,trouer_u_v_periodiser_u \
-_-_-_- ,trouer_u_v_periodiser_v \
-_-_-_- ,trouer_u_v_symetriser_u \
-_-_-_- ,trouer_u_v_symetriser_v \
-_-_-_- ,trouer_u_v_prolonger_u \
-_-_-_- ,trouer_u_v_prolonger_v \
-_-_-_- ,LA_SURFACE_EST_INTEGRE \
-_-_-_- ,image_Trous__interpoler \
-_-_-_- ,image_Trous__use_interpolation_lineaire \
-_-_-_- ,image_Trous__eviter__discontinuites \
-_-_-_- ,image_Trous__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Le 20060602091942 fut introduit le 'fLOGI(...)' pour eviter des trous parasites lies */ \
-_-_-_- /* a des "rebonds" d'interpolation qui font que ce qui devrait valoir exactement 1 ('VRAI') */ \
-_-_-_- /* peut valoir un tout petit peu moins, d'ou 0 ('FAUX') avec un 'LOGI(...)'... */ \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Bblock \
-_-_-_- /* Ce test a ete introduit le 20060529131510. Via 'IL_FAUT(transformer_u_v)', il permet */ \
-_-_-_- /* de ne visualiser que certains "morceaux" de la surface. Jusqu'au 20060529152510, cela */ \
-_-_-_- /* s'est fait en utilisant {image_Coordonnee_U,image_Coordonnee_V} de la facon suivante : */ \
-_-_-_- /* */ \
-_-_-_- /* u_effectif = u */ \
-_-_-_- /* v_effectif = v */ \
-_-_-_- /* */ \
-_-_-_- /* soit : */ \
-_-_-_- /* */ \
-_-_-_- /* image_Coordonnee_U(u,v) = u (parametre "imageU=") */ \
-_-_-_- /* image_Coordonnee_V(u,v) = v (parametre "imageV=") */ \
-_-_-_- /* */ \
-_-_-_- /* partout ou l'on souhaite visualiser la surface et par exemple : */ \
-_-_-_- /* */ \
-_-_-_- /* u_effectif = INFINI */ \
-_-_-_- /* v_effectif = INFINI */ \
-_-_-_- /* */ \
-_-_-_- /* soit : */ \
-_-_-_- /* */ \
-_-_-_- /* image_Coordonnee_U(u,v) = INFINI (parametre "imageU=") */ \
-_-_-_- /* image_Coordonnee_V(u,v) = INFINI (parametre "imageV=") */ \
-_-_-_- /* */ \
-_-_-_- /* la ou l'on souhaite ne pas la representer ('v $xci/lineaire$K 20060529134923'). On notera */ \
-_-_-_- /* qu'il est essentiel de prendre reellement une valeur tres grande (qui est notee 'INFINI' */ \
-_-_-_- /* ci-dessus) a cause de la fonction 'sgFFload_point_coordonnees_01(...)' utilisee pour */ \
-_-_-_- /* determiner les {u,v} effectifs. En effet, celle-ci fait de l'interpolation et il est */ \
-_-_-_- /* donc essentiel de pouvoir distinguer les "bons" {u,v} a visualiser des autres a ne pas */ \
-_-_-_- /* visualiser, et ce apres le processus d'interpolation... */ \
-_-_-_- /* */ \
-_-_-_- /* Soit par exemple le cas suivant : */ \
-_-_-_- /* */ \
-_-_-_- /* <A VISUALISER> <A NE PAS VISUALISER> */ \
-_-_-_- /* */ \
-_-_-_- /* u : (...) 1.0 <---> 1.1 (...) */ \
-_-_-_- /* | */ \
-_-_-_- /* image_Coordonnee_U(u,v) : (...) 1.0 | 1e100 (...) */ \
-_-_-_- /* | */ \
-_-_-_- /* | */ \
-_-_-_- /* | */ \
-_-_-_- /* | */ \
-_-_-_- /* 'u' flottant d'acces a 'image_Coordonnee_U' */ \
-_-_-_- /* via 'sgFFload_point_coordonnees_01(...)' */ \
-_-_-_- /* */ \
-_-_-_- /* avec : */ \
-_-_-_- /* */ \
-_-_-_- /* u E [0,pi] (cas de 'v $xrs/sphere.11$K' par exemple) */ \
-_-_-_- /* */ \
-_-_-_- /* La difference entre '1.0' et '1e100' est telle que la probabilite que la valeur */ \
-_-_-_- /* resultant de leur interpolation (a partir du 'u' flottant d'acces a 'image_Coordonnee_U') */ \
-_-_-_- /* soit hors de [0,pi] est pratiquement egale a 1. */ \
-_-_-_- /* */ \
-_-_-_- /* On verra a ce propos l'image 'v $xiirs/SPHE.52'... */ \
-_-_-_- /* */ \
-_-_-_- /* Malgre tout, cet alea a conduit le 20060529152510 a introduire 'IFmageA7' dont le role */ \
-_-_-_- /* est specifiquement celui de gerer le trouage... */ \
-_-_-_- DEFV(Float,INIT(equation_d_une_droite_du_plan_uv,FLOT__UNDEF)); \
-_-_-_- /* Definition, meme si elle ne sert pas par la suite) de l'equation d'une droite dans le */ \
-_-_-_- /* plan {u,v}... */ \
-_-_-_- \
-_-_-_- Test(IL_FAUT(tracer_une_droite_du_plan_uv)) \
-_-_-_- /* Test introduit le 20060817180753... */ \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(u_effectif_modulo \
-_-_-_- ,MODF(u_effectif \
-_-_-_- ,minimum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(v_effectif_modulo \
-_-_-_- ,MODF(v_effectif \
-_-_-_- ,minimum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Le 20170131092659 'MODF(...)' a remplace 'MODFcs(...)', c'est beaucoup plus logique... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20170210130509, afin de simplifier le traitement de 'nom_imageA_Droite_uv', les */ \
-_-_-_- /* coordonnees {u_effectif_modulo,v_effectif_modulo} sont calculees ici, meme s'il faut */ \
-_-_-_- /* la 'tracer_une_droite_du_plan_uv_____compatibilite_20170130'... */ \
-_-_-_- \
-_-_-_- Test(IFEQ_chaine(nom_imageA_Droite_uv,NOM_PIPE_Local)) \
-_-_-_- /* Test introduit le 20170210130509... */ \
-_-_-_- Bblock \
-_-_-_- Test(IL_FAUT(tracer_une_droite_du_plan_uv_____compatibilite_20170130)) \
-_-_-_- /* Test introduit le 20170130143806... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(equation_d_une_droite_du_plan_uv \
-_-_-_- ,ADD6(FfMODFcs(MUL2(coefficient_A_d_une_droite_du_plan_uv,u_effectif) \
-_-_-_- ,minimum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ,FfMODFcs(MUL2(coefficient_B_d_une_droite_du_plan_uv,v_effectif) \
-_-_-_- ,minimum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ,coefficient_C_d_une_droite_du_plan_uv \
-_-_-_- ,MUL2(coefficient_F_d_une_droite_du_plan_uv \
-_-_-_- ,EXP2(FfMODFcs(u_effectif \
-_-_-_- ,minimum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ,MUL2(coefficient_G_d_une_droite_du_plan_uv \
-_-_-_- ,MUL2(FfMODFcs(u_effectif \
-_-_-_- ,minimum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ,FfMODFcs(v_effectif \
-_-_-_- ,minimum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ,MUL2(coefficient_H_d_une_droite_du_plan_uv \
-_-_-_- ,EXP2(FfMODFcs(v_effectif \
-_-_-_- ,minimum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Calcul de l'equation d'une droite dans le plan {u,v}... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20071204115817 'FfMODFcs(...)' a remplace 'MODFcs(...)' afin d'alleger le code */ \
-_-_-_- /* genere... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20170124104505, cette droite a ete "generalisee" par l'introduction de {F,G,H}... */ \
-_-_-_- /* L'usage de 'HORNER_2_02(u,v,a22,a21,a20,a12,a11,a10,a02,a01,a00)' avec : */ \
-_-_-_- /* */ \
-_-_-_- /* A = a01 */ \
-_-_-_- /* B = a10 */ \
-_-_-_- /* C = a00 */ \
-_-_-_- /* */ \
-_-_-_- /* est difficile, voire impossible, a cause de l'usage de 'FfMODFcs(...)' ci-dessus... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(equation_d_une_droite_du_plan_uv \
-_-_-_- ,LIN5(coefficient_A_d_une_droite_du_plan_uv \
-_-_-_- ,NEUT(u_effectif_modulo) \
-_-_-_- ,coefficient_B_d_une_droite_du_plan_uv \
-_-_-_- ,NEUT(v_effectif_modulo) \
-_-_-_- ,coefficient_F_d_une_droite_du_plan_uv \
-_-_-_- ,EXP2(u_effectif_modulo) \
-_-_-_- ,coefficient_G_d_une_droite_du_plan_uv \
-_-_-_- ,MUL2(u_effectif_modulo,v_effectif_modulo) \
-_-_-_- ,coefficient_H_d_une_droite_du_plan_uv \
-_-_-_- ,EXP2(v_effectif_modulo) \
-_-_-_- ,coefficient_C_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(equation_d_une_droite_du_plan_uv \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Droite_UV_Definition \
-_-_-_- ,NORM(u_effectif_modulo \
-_-_-_- ,minimum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_u_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ,NORM(v_effectif_modulo \
-_-_-_- ,minimum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ,maximum_de_v_du_domaine_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ,FAUX,FAUX \
-_-_-_- ,FAUX,FAUX \
-_-_-_- ,VRAI,VRAI \
-_-_-_- ,ZERO_D_UNE_DROITE_DU_PLAN_UV \
-_-_-_- ,imageA_Droite_uv__interpoler \
-_-_-_- ,imageA_Droite_uv__use_interpolation_lineaire \
-_-_-_- ,imageA_Droite_uv__eviter__discontinuites \
-_-_-_- ,imageA_Droite_uv__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Ce dispositif introduit le 20170210130509 permet d'initialiser arbitrairement */ \
-_-_-_- /* la droite (qui alors peut ne plus etre une droite...). */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFET(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,IL_FAUT(visualiser_la_droite_tracee_dans_le_plan_uv) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Bblock \
-_-_-_- storeF_point_valide(equation_d_une_droite_du_plan_uv \
-_-_-_- ,image_Droite_UV_Calculee__ \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ); \
-_-_-_- /* La memorisation d'une droite dans le plan {u,v} ne peut se faire que s'il y a projection */ \
-_-_-_- /* de la surface afin de pouvoir beneficier de {X_de_projection,Y_de_projection}... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFOU(IFET(IL_FAUT(visualiser_les_points_du_maillage_uv) \
-_-_-_- ,IFOU(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \
-_-_-_- ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ,IFET(IL_FAUT(tracer_une_droite_du_plan_uv) \
-_-_-_- ,IZEQ_a_peu_pres(equation_d_une_droite_du_plan_uv \
-_-_-_- ,epsilon_de_definition_d_une_droite_du_plan_uv \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Le test sur la droite du plan {u,v} fut introduit le 20060813111731... */ \
-_-_-_- /* */ \
-_-_-_- /* ATTENTION, on notera que l'equation de la droite est a priori : */ \
-_-_-_- /* */ \
-_-_-_- /* A.u + B.v + C = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* (a "epsilon pres"). Afin de prendre en compte le "modulo" (ou "repliement"), l'equation */ \
-_-_-_- /* de la droite est en fait : */ \
-_-_-_- /* */ \
-_-_-_- /* mod(A.u,Um,UM) + mod(B.v,Vm,VM) + C = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* Pour que le "repliement" de la droite ait bien lieu avec les 'modulo's ci-dessus, il */ \
-_-_-_- /* est essentiel que : */ \
-_-_-_- /* */ \
-_-_-_- /* UM - Um */ \
-_-_-_- /* --------- soit un nombre entier divisible par 'A' (si 'A' entier...) */ \
-_-_-_- /* pas_u */ \
-_-_-_- /* */ \
-_-_-_- /* et que : */ \
-_-_-_- /* */ \
-_-_-_- /* VM - Vm */ \
-_-_-_- /* --------- soit un nombre entier divisible par 'B' (si 'B' entier...) */ \
-_-_-_- /* pas_v */ \
-_-_-_- /* */ \
-_-_-_- /* ou 'pas_u' et 'pas_v' designent les pas de parcours des axes 'u' et 'v' respectivement, */ \
-_-_-_- /* ainsi que le montre la figure suivante : */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* v ^ */ \
-_-_-_- /* | */ \
-_-_-_- /* VM |------------------+ */ \
-_-_-_- /* | /. /| */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / ./ | */ \
-_-_-_- /* |..................| ATTENTION : figure correspondant */ \
-_-_-_- /* | /. /| a A=+1 et B=-3/2. Dans le cas */ \
-_-_-_- /* | / . / | A=+2 et B=-3 il y a deux fois */ \
-_-_-_- /* | / . / | plus de rectangles elementaires */ \
-_-_-_- /* | / . / | dans les deux directions... */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / ./ | */ \
-_-_-_- /* |..................| */ \
-_-_-_- /* | /. /| */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / . / | */ \
-_-_-_- /* | / ./ | */ \
-_-_-_- /* Vm |---------------------------------------> */ \
-_-_-_- /* */ \
-_-_-_- /* Um UM u */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* qui montre la droite : */ \
-_-_-_- /* */ \
-_-_-_- /* 2u - 3v = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* repliee, soit avec : */ \
-_-_-_- /* */ \
-_-_-_- /* A = +2 */ \
-_-_-_- /* B = -3 */ \
-_-_-_- /* C = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* qui permet, par exemple, a 'v $xrs/tore.11$K' de visualiser (dessine sur un tore) le */ \
-_-_-_- /* noeud "trefle" ('v $xiirv/KNOT.11.3.1'), a condition de prendre : */ \
-_-_-_- /* */ \
-_-_-_- /* u E [0,4.pi] */ \
-_-_-_- /* v E [0,4.pi] */ \
-_-_-_- /* */ \
-_-_-_- /* Mais, ATTENTION, on notera que la droite en fait calculee est la suivante (que l'on */ \
-_-_-_- /* peut visualiser grace a 'IL_FAUT(visualiser_la_droite_tracee_dans_le_plan_uv)' en */ \
-_-_-_- /* n'oubliant alors pas le 'IL_FAUT(generer_les_trois_projections_de_la_surface)') : */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* v ^ */ \
-_-_-_- /* | */ \
-_-_-_- /* VM |------------------+ */ \
-_-_-_- /* |\ .\ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \| */ \
-_-_-_- /* |..................| ATTENTION : figure correspondant */ \
-_-_-_- /* |\ .\ | a A=+1 et B=-3/2. Dans le cas */ \
-_-_-_- /* | \ . \ | A=+2 et B=-3 il y a deux fois */ \
-_-_-_- /* | \ . \ | plus de rectangles elementaires */ \
-_-_-_- /* | \ . \ | dans les deux directions... */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \| */ \
-_-_-_- /* |..................| */ \
-_-_-_- /* |\ .\ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \ | */ \
-_-_-_- /* | \ . \| */ \
-_-_-_- /* Vm |---------------------------------------> */ \
-_-_-_- /* */ \
-_-_-_- /* Um UM u */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* c'est-a-dire qu'elle subit une symetrie d'axe horizontal. Cela fut compris en */ \
-_-_-_- /* visualisant la droite precedente en mode 'Suh' (afin d'avoir peu de points...). */ \
-_-_-_- /* Le pas en 'u' et 'v' valait alors : */ \
-_-_-_- /* */ \
-_-_-_- /* pas = 0.19635 */ \
-_-_-_- /* */ \
-_-_-_- /* Les points de coordonnees multiples de : */ \
-_-_-_- /* */ \
-_-_-_- /* {3*pas,2*pas} = {0.589049,0.392699} */ \
-_-_-_- /* */ \
-_-_-_- /* devaient donc etre sur la droite puisque : */ \
-_-_-_- /* */ \
-_-_-_- /* (2*0.589049) - (3*0.392699) = 0 (a epsilon pres...). */ \
-_-_-_- /* */ \
-_-_-_- /* Mais en fait ils n'y sont pas a cause des 'MODFcs(...)' ci-dessus. Voici a titre */ \
-_-_-_- /* d'exemple les valeurs calculees ci-dessus pour les deux premiers points qui auraient */ \
-_-_-_- /* du appartenir a la droite : */ \
-_-_-_- /* */ \
-_-_-_- /* u=0.000000 v=0.000000 MODFcs(A.u)=+0.000000 MODFcs(B.v)=+0.000000 equation=0.000000 */ \
-_-_-_- /* u=0.589049 v=0.392699 MODFcs(A.u)=+1.178097 MODFcs(B.v)=-5.105088 equation=-3.926991 */ \
-_-_-_- /* */ \
-_-_-_- /* Ainsi, pour le deuxieme point, les deux produits 'A.u' et 'B.v' valent : */ \
-_-_-_- /* */ \
-_-_-_- /* A.u = +2*0.589049 = +1.178097 */ \
-_-_-_- /* B.v = -3*0.392699 = -1.178097 */ \
-_-_-_- /* */ \
-_-_-_- /* et sont donc egaux en valeur absolue. Mais il en est malheureusement autrement des */ \
-_-_-_- /* valeurs obtenues avec les procedures 'MODFcs(...)' car, en effet, dans le cas du */ \
-_-_-_- /* produit 'B.v', ce dernier est negatif et va donc etre ramene dans [0,2.pi] ; on a */ \
-_-_-_- /* ainsi : */ \
-_-_-_- /* */ \
-_-_-_- /* -(2.pi - 1.178097) = -5.105088 */ \
-_-_-_- /* */ \
-_-_-_- /* d'ou la symetrie annoncee. On notera enfin que ces symetries sont sans consequences */ \
-_-_-_- /* car, en effet, elles preservent les proprietes de la droite "repliee"... */ \
-_-_-_- /* */ \
-_-_-_- /* Autre remarque ; a cause des 'MODFcs(...)' les deux droites : */ \
-_-_-_- /* */ \
-_-_-_- /* A = +2 */ \
-_-_-_- /* B = -3 */ \
-_-_-_- /* C = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* et : */ \
-_-_-_- /* */ \
-_-_-_- /* A = +1 */ \
-_-_-_- /* B = -3/2 */ \
-_-_-_- /* C = 0 */ \
-_-_-_- /* */ \
-_-_-_- /* ne sont pas equivalentes... */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* Le test sur 'visualiser_les_points_du_maillage_uv' a ete introduit le 20060814185659 */ \
-_-_-_- /* afin de permettre de ne tracer que la droite dans le plan {u,v}... */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* On notera le 20170129100240 qu'en toute generalite, la probabilite pour que la droite */ \
-_-_-_- /* dans le plan {u,v} passe par les noeux du maillage en {u,v} de ce plan est en fait assez */ \
-_-_-_- /* faible. Cela marche bien, par exemple, pour 'v $xiirs/SPHE.K1', mais dans beaucoup */ \
-_-_-_- /* d'autres cas, c'est moins evident : ce fut le cas en essayant de tracer cette droite */ \
-_-_-_- /* sur la surface 'v $xiirs/HELI.11' pour laquelle la proportion de points situes sur le */ \
-_-_-_- /* maillage (a "epsilon" pres) est tres faible ; ainsi, par exemple, avec : */ \
-_-_-_- /* */ \
-_-_-_- /* Eduv=0.001 */ \
-_-_-_- /* dpu=4 */ \
-_-_-_- /* dpv=4 */ \
-_-_-_- /* */ \
-_-_-_- /* il y a 198 points sur la droite, pour un total de 834880 points constituants le maillage. */ \
-_-_-_- /* */ \
-_-_-_- /* */ \
-_-_-_- /* On notera le 20170130111451 que si l'on souhaite, par exemple, une droite qui soit la */ \
-_-_-_- /* diagonale principale du domaine [Um,UM]x[Vm,VM], il faut prendre : */ \
-_-_-_- /* */ \
-_-_-_- /* Aduv = (VM)-(Vm))/((UM)-(Um)) */ \
-_-_-_- /* Bduv = -1 */ \
-_-_-_- /* Cduv = Vm */ \
-_-_-_- /* */ \
-_-_-_- Bblock \
-_-_-_- EGAL(u_effectif_translate \
-_-_-_- ,ADD2(u_effectif \
-_-_-_- ,MUL2(facteur_de_la_translation_de_u_effectif_lors_d_un_lister \
-_-_-_- ,SOUS(maximum_de_u_effectif,minimum_de_u_effectif) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(v_effectif_translate \
-_-_-_- ,ADD2(v_effectif \
-_-_-_- ,MUL2(facteur_de_la_translation_de_v_effectif_lors_d_un_lister \
-_-_-_- ,SOUS(maximum_de_v_effectif,minimum_de_v_effectif) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- \
-_-_-_- EGAL(c_est_le_calcul_de__cx__cy__cz,VRAI); \
-_-_-_- EGAL(cx,Fxyz(Fx(u_effectif,v_effectif))); \
-_-_-_- EGAL(cy,Fxyz(Fy(u_effectif,v_effectif))); \
-_-_-_- EGAL(cz,Fxyz(Fz(u_effectif,v_effectif))); \
-_-_-_- EGAL(c_est_le_calcul_de__cx__cy__cz,FAUX); \
-_-_-_- /* Generation du point courant de la surface... */ \
-_-_-_- /* */ \
-_-_-_- /* On notera qu'avant le 20041126090202, le calcul de {cx,cy,cz} figurait explicitement a */ \
-_-_-_- /* l'interieur des differentes 'sequence_de_generation'. Mais avec l'introduction de la */ \
-_-_-_- /* generation eventuelle des trois "projections" d'une surface, il est plus astucieux et */ \
-_-_-_- /* economique de faire cela avant l'appel de 'sequence_de_generation'... */ \
-_-_-_- \
-_-_-_- Test(IFET(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,EST_VRAI(les_trois_projections_de_la_surface_doivent_etre_transformees) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(cx_transformee \
-_-_-_- ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(cx,cy,cz \
-_-_-_- ,ASD1(translation_de_l_origine,dx) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(cy_transformee \
-_-_-_- ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(cx,cy,cz \
-_-_-_- ,ASD1(translation_de_l_origine,dy) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(cz_transformee \
-_-_-_- ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(cx,cy,cz \
-_-_-_- ,ASD1(translation_de_l_origine,dz) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- \
-_-_-_- EGAL(cx,cx_transformee); \
-_-_-_- EGAL(cy,cy_transformee); \
-_-_-_- EGAL(cz,cz_transformee); \
-_-_-_- /* Dispositif introduit le 20090606103424 qui permet donc de transformer les projections */ \
-_-_-_- /* via les 'ROTATION_O?'s et 'TRANSLATION_O?'s... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFET(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,EST_VRAI(les_trois_projections_de_la_surface_sont_en_fait_celles_de_la_texture) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(coordonnee_X_texture,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(coordonnee_Y_texture,FLOT__UNDEF)); \
-_-_-_- /* Coordonnees {X,Y} dans [0,1] d'acces a la texture (introduites le 20050820082930...). */ \
-_-_-_- DEFV(Float,INIT(texture_x,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_y,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_z,FLOT__UNDEF)); \
-_-_-_- /* Definition des trois textures. */ \
-_-_-_- \
-_-_-_- Test(EST_VRAI(les_trois_projections_de_la_texture_sont_mappees_sur_la_surface)) \
-_-_-_- Bblock \
-_-_-_- EGAL(coordonnee_X_texture,Projection_OX(cx,cy,cz)); \
-_-_-_- EGAL(coordonnee_Y_texture,Projection_OY(cx,cy,cz)); \
-_-_-_- /* Cas ou ce sont les distorsions de la texture mappee qui vont etre generees en tant */ \
-_-_-_- /* que "projection de la surface"... */ \
-_-_-_- /* */ \
-_-_-_- /* Pour resumer, soit donc {u,v} les coordonnees curvilignes courantes. Les coordonnees */ \
-_-_-_- /* tridimensionnelles {cx,cy,cz} sont donc : */ \
-_-_-_- /* */ \
-_-_-_- /* cx = F (u,v) */ \
-_-_-_- /* x */ \
-_-_-_- /* */ \
-_-_-_- /* cy = F (u,v) */ \
-_-_-_- /* y */ \
-_-_-_- /* */ \
-_-_-_- /* cz = F (u,v) */ \
-_-_-_- /* z */ \
-_-_-_- /* */ \
-_-_-_- /* Par projection, les coordonnees bidimensionnelles {px,py} sont alors : */ \
-_-_-_- /* */ \
-_-_-_- /* px = Projection_OX(cx,cy,cz) */ \
-_-_-_- /* py = Projection_OY(cx,cy,cz) */ \
-_-_-_- /* */ \
-_-_-_- /* Le point {u,v} de la projection sera alors marque par le niveau au point {px,py} de la */ \
-_-_-_- /* texture : */ \
-_-_-_- /* */ \
-_-_-_- /* PROJECTION(u,v) = TEXTURE(px,py) */ \
-_-_-_- /* */ \
-_-_-_- /* dans le cas 'EST_VRAI(les_trois_projections_de_la_texture_sont_mappees_sur_la_surface)'). */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(coordonnee_X_texture,cx); \
-_-_-_- EGAL(coordonnee_Y_texture,cy); \
-_-_-_- /* Cas ou c'est la texture utilisee qui va etre generee en tant que "projection de la */ \
-_-_-_- /* surface" (ceci a ete introduit le 20050820082930...). */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- EGAL(texture_x \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_R \
-_-_-_- ,coordonnee_X_texture \
-_-_-_- ,coordonnee_Y_texture \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_R__interpoler \
-_-_-_- ,image_Texture_R__use_interpolation_lineaire \
-_-_-_- ,image_Texture_R__eviter__discontinuites \
-_-_-_- ,image_Texture_R__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_y \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_V \
-_-_-_- ,coordonnee_X_texture \
-_-_-_- ,coordonnee_Y_texture \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_V__interpoler \
-_-_-_- ,image_Texture_V__use_interpolation_lineaire \
-_-_-_- ,image_Texture_V__eviter__discontinuites \
-_-_-_- ,image_Texture_V__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(texture_z \
-_-_-_- ,sgFFload_point_coordonnees_01(image_Texture_B \
-_-_-_- ,coordonnee_X_texture \
-_-_-_- ,coordonnee_Y_texture \
-_-_-_- ,textures_periodiser_X,textures_periodiser_Y \
-_-_-_- ,textures_symetriser_X,textures_symetriser_Y \
-_-_-_- ,textures_prolonger_X,textures_prolonger_Y \
-_-_-_- ,textures_niveau_hors_image \
-_-_-_- ,image_Texture_B__interpoler \
-_-_-_- ,image_Texture_B__use_interpolation_lineaire \
-_-_-_- ,image_Texture_B__eviter__discontinuites \
-_-_-_- ,image_Texture_B__epsilon_discontinuites \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- \
-_-_-_- EGAL(cx,texture_x); \
-_-_-_- EGAL(cy,texture_y); \
-_-_-_- EGAL(cz,texture_z); \
-_-_-_- /* Et on modifie {cx,cy,cz} pour simplifier les choses... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut generer les trois projections (introduit le 20041126090603) : */ \
-_-_-_- Bblock \
-_-_-_- storeF_point_valide(cx \
-_-_-_- ,Projection_de_Fx \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ); \
-_-_-_- storeF_point_valide(cy \
-_-_-_- ,Projection_de_Fy \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ); \
-_-_-_- storeF_point_valide(cz \
-_-_-_- ,Projection_de_Fz \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ); \
-_-_-_- /* Generation des trois projections d'une surface tel que cela est defini et exploite */ \
-_-_-_- /* dans 'v $xrs/project2D.11$K P.R.O.J.E.C.T.O.R'. Ceci a ete introduit le 20041125111850. */ \
-_-_-_- /* */ \
-_-_-_- /* On notera que pour que cela ait un interet, il faut que : */ \
-_-_-_- /* */ \
-_-_-_- /* diviseur_du_pas_de_u = 1 (dpu=1) */ \
-_-_-_- /* diviseur_du_pas_de_v = 1 (dpv=1) */ \
-_-_-_- /* */ \
-_-_-_- /* maximum_de_u - minimum_de_u */ \
-_-_-_- /* pas_de_u = ----------------------------- */ \
-_-_-_- /* dimX */ \
-_-_-_- /* */ \
-_-_-_- /* maximum_de_v - minimum_de_v */ \
-_-_-_- /* pas_de_v = ----------------------------- */ \
-_-_-_- /* dimY */ \
-_-_-_- /* */ \
-_-_-_- /* afin de bien "remplir" les matrices {Proj_Fx,Proj_Fy,Proj_Fz}. */ \
-_-_-_- /* */ \
-_-_-_- /* Les 'storeF_point(...)'s ont ete remplaces par des 'storeF_point_valide(...)'s le */ \
-_-_-_- /* 20050114215322 pour des raisons de prudence... */ \
-_-_-_- /* */ \
-_-_-_- /* On notera le 20050202174415 que, par exemple, dans le cas de 'v $xrs/sphere.11$K', */ \
-_-_-_- /* il faudra utiliser : */ \
-_-_-_- /* */ \
-_-_-_- /* Mu=6.283185307179586 ($dpi) */ \
-_-_-_- /* PARAMETRE_R=1 */ \
-_-_-_- /* */ \
-_-_-_- /* si l'on souhaite reinjecter les trois champs "standard=FAUX" dans 'v $xrs/project2D.11$K' */ \
-_-_-_- /* et que n'apparaissent pas des artefacts ; dans ce dernier programme, il faudra alors */ \
-_-_-_- /* utiliser : */ \
-_-_-_- /* */ \
-_-_-_- /* mu=0.0 Mu=0.5 */ \
-_-_-_- /* mv=0.0 Mv=1.0 */ \
-_-_-_- /* */ \
-_-_-_- /* afin de respecter les symetries... */ \
-_-_-_- /* */ \
-_-_-_- /* L'utilisation des coordonnees entieres {X_de_projection,Y_de_projection} a ete introduite */ \
-_-_-_- /* le 20050908130630 pour eviter les "trous" dans les matrices de projection... */ \
-_-_-_- \
-_-_-_- storeI_point_valide(ADD2(loadI_point(validation_de_la_projection \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ) \
-_-_-_- ,I \
-_-_-_- ) \
-_-_-_- ,validation_de_la_projection \
-_-_-_- ,X_de_projection \
-_-_-_- ,Y_de_projection \
-_-_-_- ); \
-_-_-_- /* Marquage de tous les points {u,v} possibles... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- /* Cas ou il faut visualiser la surface : */ \
-_-_-_- BLOC(sequence_de_generation); \
-_-_-_- /* Generation specifique de l'image de la surface pour le point courant {u,v}. */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- end_nouveau_block \
-_-_-_- Eblock \
-_-_-_- end_nouveau_block \
-_-_-_- Eblock
/* Generation du point courant {u,v} introduit sous cette forme le 20221221111016... */
#ifdef NE_PAS_PERMETTRE_LA_DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V
/* Ceci fut introduit le 20221224170113 pour les programmes : */
/* */
/* $xrq/Hspherik.11$K */
/* $xrq/Hspherik.21$K */
/* $xrq/hydrogene.21$K */
/* $xrq/hydrogene.51$K */
/* */
/* car, en effet, il manquait beaucoup de choses dans le cas ou la procedure */
/* 'DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V(...)' etait activee... */
- define DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \
-_-_-_- /* Mis sous cette forme le 20221224170113... */ \
-_-_-_- Bblock \
-_-_-_- Eblock
#Aifdef NE_PAS_PERMETTRE_LA_DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V
- define index_definition_arbitraire \
-_-_-_- index_de_definition_arbitraire_des_coordonnees_u_v
/* Afin de raccourcir certaines des lignes qui suivent... */
/* */
/* Le 20240519095641, le symbole 'index_de_definition_arbitraire' a ete remplace par */
/* 'index_definition_arbitraire' par compatibilite avec les autres fichiers : */
/* */
/* 'v $xrs/volumes.12.I index_definition_arbitraire', */
/* 'v $xrs/hyper_volumes.12.I index_definition_arbitraire', */
/* 'v $xrs/hyper_hyper_volumes.12.I index_definition_arbitraire'. */
/* */
- define DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \
-_-_-_- /* Mis sous cette forme le 20221224170113... */ \
-_-_-_- Bblock \
-_-_-_- begin_nouveau_block \
-_-_-_- Bblock \
-_-_-_- /* Je note le 20240517125211 que cette suite de 'Bblock's est destinee a ne pas changer */ \
-_-_-_- /* la tabulation de ce qui suit... */ \
-_-_-_- DEFINITION_DE__XY__de_projection; \
-_-_-_- DEFINITION_DE__echantillonnage_courant_de_uv; \
-_-_-_- DEFINITION_DE__XY__de_projection__ET_DEFINITION_DE__echantillonnage_courant_de_uv; \
-_-_-_- /* Ne servent qu'a permettre 'GENERATION_DU_POINT_uv_COURANT(...)' ci-apres... */ \
-_-_-_- \
-_-_-_- DEFV(Logical,INIT(recuperer_les_coordonnees_u_v,VRAI)); \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Test introduit le 20221222080846... */ \
-_-_-_- Bblock \
-_-_-_- PRINT_ATTENTION("pas de projection de la surface lorsque les coordonnees {u,v} sont arbitraires"); \
-_-_-_- EGAL(generer_les_trois_projections_de_la_surface,FAUX); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Tant(IL_FAUT(recuperer_les_coordonnees_u_v)) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(u,ELEMENT_DU_FICHIER_COORDONNEES_u(index_definition_arbitraire))); \
-_-_-_- DEFV(Float,INIT(v,ELEMENT_DU_FICHIER_COORDONNEES_v(index_definition_arbitraire))); \
-_-_-_- \
-_-_-_- Test(IFET(IFNE(u,separateur_de_definition_arbitraire_des_coordonnees_u_v) \
-_-_-_- ,IFNE(v,separateur_de_definition_arbitraire_des_coordonnees_u_v) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Test introduit le 20230217093513... */ \
-_-_-_- Bblock \
-_-_-_- Test(I3ET(IFNE_chaine(fichier_des_coordonnees_ROUGE,NOM_PIPE_Local) \
-_-_-_- ,IFNE_chaine(fichier_des_coordonnees_VERTE,NOM_PIPE_Local) \
-_-_-_- ,IFNE_chaine(fichier_des_coordonnees_BLEUE,NOM_PIPE_Local) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Possibilite introduite le 20230125094726... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(differentielle_ROUGE \
-_-_-_- ,ELEMENT_DU_FICHIER_COORDONNEES_ROUGE(index_definition_arbitraire) \
-_-_-_- ); \
-_-_-_- EGAL(differentielle_VERTE \
-_-_-_- ,ELEMENT_DU_FICHIER_COORDONNEES_VERTE(index_definition_arbitraire) \
-_-_-_- ); \
-_-_-_- EGAL(differentielle_BLEUE \
-_-_-_- ,ELEMENT_DU_FICHIER_COORDONNEES_BLEUE(index_definition_arbitraire) \
-_-_-_- ); \
-_-_-_- /* Les initialisations de 'GENERATION_D_UNE_IMAGE_DU_VOLUME_AVEC_DIFFERENCES____(...)' */ \
-_-_-_- /* sont donc ici "oubliees"... */ \
-_-_-_- \
-_-_-_- EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,VRAI); \
-_-_-_- /* Afin de pouvoir definir {differentielle_x,differentielle_y,differentielle_z} */ \
-_-_-_- /* dans 'GENERATION_D_UNE_IMAGE_DU_VOLUME_AVEC_DIFFERENCES____(...)' */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFNE_chaine(fichier_des_coordonnees_RAYON,NOM_PIPE_Local)) \
-_-_-_- Bblock \
-_-_-_- EGAL(rayon_de_visualisation \
-_-_-_- ,ELEMENT_DU_FICHIER_COORDONNEES_RAYON(index_definition_arbitraire) \
-_-_-_- ); \
-_-_-_- /* Introduit le 20240517140948... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFNE_chaine(fichier_des_coordonnees_MASSE,NOM_PIPE_Local)) \
-_-_-_- Bblock \
-_-_-_- EGAL(masse_de_la_sphere_courante \
-_-_-_- ,ELEMENT_DU_FICHIER_COORDONNEES_MASSE(index_definition_arbitraire) \
-_-_-_- ); \
-_-_-_- /* Introduit le 20240519090955... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- GENERATION_DU_POINT_uv_COURANT(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(recuperer_les_coordonnees_u_v,FAUX); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- INCR(index_definition_arbitraire,pas_de_parcours_d_un_fichier); \
-_-_-_- \
-_-_-_- Test(IFGT(index_definition_arbitraire,DERNIER_ELEMENT_D_UN_FICHIER)) \
-_-_-_- Bblock \
-_-_-_- EGAL(index_definition_arbitraire,PREMIER_ELEMENT_D_UN_FICHIER); \
-_-_-_- EGAL(recuperer_les_coordonnees_u_v,FAUX); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ETan \
-_-_-_- Eblock \
-_-_-_- end_nouveau_block \
-_-_-_- Eblock
#Eifdef NE_PAS_PERMETTRE_LA_DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V
-define gGENERATION_D_UNE_IMAGE_DE_LA_SURFACE(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \
-_-_-_- Bblock \
-_-_-_- BDEFV(imageI,validation_de_la_projection); \
-_-_-_- /* Dispositif de validation de la projection introduit le 20050908115636 et mis ici */ \
-_-_-_- /* (et donc genere meme s'il n'y a pas de projection) le 20050909135931 afin de simplifier */ \
-_-_-_- /* et d'integrer le code de validation de la projection au calcul de celle-ci... */ \
-_-_-_- DEFINITION_DE__XY__de_projection; \
-_-_-_- /* Pour indexer les trois matrices de projection... */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(differentielle_ROUGE,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_VERTE,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_BLEUE,FLOT__UNDEF)); \
-_-_-_- DEFV(Logical,INIT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,FAUX)); \
-_-_-_- /* Introduit le 20230124142028 car, en effet, les trois differentielles utiles */ \
-_-_-_- /* {differentielle_x,differentielle_y,differentielle_z} n'existent pas ici, etant */ \
-_-_-_- /* definies localement ulterieurement... */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(minimum_de_u_effectif \
-_-_-_- ,COND(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,MINIMUM_DE_u_LORS_D_UNE_PROJECTION \
-_-_-_- ,minimum_de_u \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(maximum_de_u_effectif \
-_-_-_- ,ADD2(COND(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,MAXIMUM_DE_u_LORS_D_UNE_PROJECTION \
-_-_-_- ,maximum_de_u \
-_-_-_- ) \
-_-_-_- ,COND(IL_FAUT(majoration_du_maximum_des_coordonnees_u_v_____compatibilite_20160414) \
-_-_-_- ,FZERO \
-_-_-_- ,epsilon_de_majoration_du_maximum_des_coordonnees_u_v \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(minimum_de_v_effectif \
-_-_-_- ,COND(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,MINIMUM_DE_v_LORS_D_UNE_PROJECTION \
-_-_-_- ,minimum_de_v \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- DEFV(Float,INIT(maximum_de_v_effectif \
-_-_-_- ,ADD2(COND(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,MAXIMUM_DE_v_LORS_D_UNE_PROJECTION \
-_-_-_- ,maximum_de_v \
-_-_-_- ) \
-_-_-_- ,COND(IL_FAUT(majoration_du_maximum_des_coordonnees_u_v_____compatibilite_20160414) \
-_-_-_- ,FZERO \
-_-_-_- ,epsilon_de_majoration_du_maximum_des_coordonnees_u_v \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Ceci a ete introduit le 20050908130630 apres avoir note, lors de la generation de */ \
-_-_-_- /* l'image 'v $xiirs/PROJ.81', que la balayage en {u,v} destine a generer les trois */ \
-_-_-_- /* matrices de projection {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} laissait */ \
-_-_-_- /* des "trous" sous la forme d'une ligne (u=1) et une colonne (v=1) non atteinte. */ \
-_-_-_- /* La solution semble etre d'augmenter dans ce cas les maxima de 'u' et de 'v' et d'indexer */ \
-_-_-_- /* les trois matrices de projection en entier {X,Y}... */ \
-_-_-_- /* */ \
-_-_-_- /* 'minimum_de_u_effectif' et 'minimum_de_v_effectif' ont ete introduits le 20060306161232 */ \
-_-_-_- /* pour simplifier 'forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface'... */ \
-_-_-_- /* */ \
-_-_-_- /* La modification du 20160414102502 vient de l'observation que les 'FDoIn(...)' concernant */ \
-_-_-_- /* {u,v} qui vont suivre n'atteignent pas toujours le maximum. Ainsi, par exemple : */ \
-_-_-_- /* */ \
-_-_-_- /* FDoIn(uv,-0.5,+0.5,0.050) ==> 'uv' atteint +0.5 */ \
-_-_-_- /* */ \
-_-_-_- /* alors que : */ \
-_-_-_- /* */ \
-_-_-_- /* FDoIn(uv,-0.5,+0.5,0.025) ==> 'uv' atteint +0.475000 */ \
-_-_-_- /* */ \
-_-_-_- /* (voir a ce propos 'v $xtc/test_for_flottant.01$c'). */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20160414145616 fut introduit l'epsilon. On notera au passage qu'il est different de */ \
-_-_-_- /* de celui de 'v $xrs/volumes.14$I mgEPSILON'... */ \
-_-_-_- DEFV(Float,INIT(pas_de_u_effectif,DIVI(pas_de_u,diviseur_du_pas_de_u))); \
-_-_-_- DEFV(Float,INIT(pas_de_v_effectif,DIVI(pas_de_v,diviseur_du_pas_de_v))); \
-_-_-_- /* Afin faciliter l'utilisation de l'echantillonnage, facilite introduite le 20021009100745. */ \
-_-_-_- \
-_-_-_- DEFINITION_DE__echantillonnage_courant_de_uv; \
-_-_-_- /* Afin de gerer l'echantillonnage de 'u' (introduit le 20021008095350 ; voir a ce */ \
-_-_-_- /* propos 'v $xrs/surfaces.14$I 20021008094407'). */ \
-_-_-_- /* */ \
-_-_-_- /* La translation a ete introduite le 20040330113728 afin de permettre, par sa variation */ \
-_-_-_- /* (0, 1, 2,...), de faire glisser la grille d'echantillonnage sur la surface... */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(pas_de_u_de_differentiation,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(pas_de_v_de_differentiation,FLOT__UNDEF)); \
-_-_-_- EGAL(pas_de_u_de_differentiation \
-_-_-_- ,DIVI(COND(EST_VRAI(le_pas_de_u_de_differentiation_est_homothetique),pas_de_u_effectif,pas_de_u) \
-_-_-_- ,diviseur_de_differentiation_de_u \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(pas_de_v_de_differentiation \
-_-_-_- ,DIVI(COND(EST_VRAI(le_pas_de_v_de_differentiation_est_homothetique),pas_de_v_effectif,pas_de_v) \
-_-_-_- ,diviseur_de_differentiation_de_v \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Afin de faire une differentiation approchee (introduit le 20041107145321). On notera que */ \
-_-_-_- /* cela est definie systematiquement alors que ce n'est evidemment utile que dans la */ \
-_-_-_- /* procedure 'GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENCES____(...)'. */ \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut generer les trois projections (introduit le 20050909135931) : */ \
-_-_-_- Bblock \
-_-_-_- begin_image \
-_-_-_- Bblock \
-_-_-_- storeI_point(ZERO,validation_de_la_projection,X,Y); \
-_-_-_- /* A priori aucun point ne va etre atteint ci-apres... */ \
-_-_-_- Eblock \
-_-_-_- end_image \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(tracer_une_droite_du_plan_uv)) \
-_-_-_- /* Test introduit le 20060817180753 et simplifie le 20170210154046... */ \
-_-_-_- Bblock \
-_-_-_- ACCES_AUX_IMAGES_FLOTTANTES(image_Droite_UV_Definition,nom_imageA_Droite_uv,ZERO_D_UNE_DROITE_DU_PLAN_UV); \
-_-_-_- /* Initialisation eventuelle et arbitraire de la droite (introduite le 20170210130509)... */ \
-_-_-_- /* Par defaut, si l'image n'existe pas, il y a compatibilite anterirure... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(I3ET(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,IL_FAUT(tracer_une_droite_du_plan_uv) \
-_-_-_- ,IL_FAUT(visualiser_la_droite_tracee_dans_le_plan_uv) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Test introduit le 20060817180753... */ \
-_-_-_- Bblock \
-_-_-_- CALi(IFinitialisation(image_Droite_UV_Calculee__,ZERO_D_UNE_DROITE_DU_PLAN_UV)); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(definir_arbitrairement_les_coordonnees_u_v)) \
-_-_-_- /* Possibilite introduite le 20221221112338... */ \
-_-_-_- Bblock \
-_-_-_- DEFINITION_ARBITRAIRE_DES_COORDONNEES_U_ET_V(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- DEFINITION_DE__FDoIn_uv \
-_-_-_- Bblock \
-_-_-_- /* Introduit le 20221221102504 pour de simples raisons "esthetiques"... */ \
-_-_-_- GENERATION_DU_POINT_uv_COURANT(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation); \
-_-_-_- /* Introduit sous cette forme le 20221221111016... */ \
-_-_-_- Eblock \
-_-_-_- DEFINITION_DE__EFDoIn_uv \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut generer les trois projections (introduit le 20050909135931) : */ \
-_-_-_- Bblock \
-_-_-_- begin_image \
-_-_-_- Bblock \
-_-_-_- Test(IZEQ(loadI_point(validation_de_la_projection,X,Y))) \
-_-_-_- Bblock \
-_-_-_- PRINT_ERREUR("un point de la projection n'est pas atteint"); \
-_-_-_- CAL1(Prer2("il s'agit du point de coordonnees {u,v}={%f,%f}\n" \
-_-_-_- ,_____cNORMALISE_OX(X) \
-_-_-_- ,_____cNORMALISE_OY(Y) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- end_image \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- EDEFV(imageI,validation_de_la_projection); \
-_-_-_- /* Dispositif de validation de la projection introduit le 20050908115636... */ \
-_-_-_- Eblock
/* Calcul et visualisation generale de la surface pour un instant donne. */
-define LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_DES_POINTS \
-_-_-_- Bblock \
-_-_-_- Test(IFET(IL_FAUT(lister_la_liste_des_points) \
-_-_-_- ,IL_FAUT(lister_les_coordonnees_u_v_des_points) \
-_-_-_- /* Ceci fut introduit le 20060410110714 car, en effet, a de nombreux endroits on teste */ \
-_-_-_- /* "^periode=" en sortie d'un programme de '$xrs' ('v $xiirv/$Fnota periode='). Il faut */ \
-_-_-_- /* que l'edition de {u,v} soit facultative et inhibee par defaut, puisque {u,v} sont */ \
-_-_-_- /* edites avant "periode=" pour la raison evoquee dans le commentaire suivant... */ \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Bblock \
-_-_-_- Test(IFET(IZGT(rayon_de_visualisation) \
-_-_-_- ,IFOU(EST_VRAI(les_trois_les_differentielles_peuvent_etre_nulles) \
-_-_-_- ,IFET(EST_FAUX(les_trois_les_differentielles_peuvent_etre_nulles) \
-_-_-_- ,IFOU(IL_NE_FAUT_PAS(renormaliser_arbitrairement_derivees) \
-_-_-_- ,IFET(IL_FAUT(renormaliser_arbitrairement_derivees) \
-_-_-_- ,I3OU(IZNE(dcx) \
-_-_-_- ,IZNE(dcy) \
-_-_-_- ,IZNE(dcz) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Ce test est identique a celui de 'v $xrv/champs_5.26$I 20091102125100' et a ete introduit */ \
-_-_-_- /* le 20091102123057 de facon a ne lister {u,v} que si l'on est bien dans les conditions */ \
-_-_-_- /* de listage des autres donnees type {X,Y,Z}... */ \
-_-_-_- Bblock \
-_-_-_- CAL2(Prin2(" U=%+.^^^ V=%+.^^^ " \
-_-_-_- ,u_effectif_translate \
-_-_-_- ,v_effectif_translate \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Ceci fut introduit le 20060410103842 afin de permettre de tracer les surfaces via */ \
-_-_-_- /* 'v $xrv/particule.10$K equidistance=' qui permet de garantir l'equidistance des */ \
-_-_-_- /* points sur une chaine de connexion contrairement a ce qui est fait ici pour la */ \
-_-_-_- /* gestion des coordonnees {u,v} qui sont echantillonnees regulierement dans l'espace */ \
-_-_-_- /* [u,v] et non pas dans l'espace physique [X,Y,Z]. On notera que la logique voudrait que */ \
-_-_-_- /* cette sequence soit appelee apres l'appel a 'memorisation_1_point_06(...)' mais cela est */ \
-_-_-_- /* impossible a cause de 'v $xrv/champs_5.11$I LISTER_LA_LISTE_DES_COULEURS_DES_POINTS' */ \
-_-_-_- /* qui emet un 'K_LF' a la fin ; la sortie de "u=... v=..." aurait donc lieu sur la ligne */ \
-_-_-_- /* suivante... */ \
-_-_-_- /* */ \
-_-_-_- /* Malheureusement l'usage de 'v $xrv/particule.10$K equidistance=' ne disposera pas les */ \
-_-_-_- /* points intermediaires des chaines de connexion selon les equations de la surface, mais */ \
-_-_-_- /* selon le schema d'interpolation utilise. L'apparence de la surface ne sera donc en */ \
-_-_-_- /* general pas correcte (phenomene decouvert le 20060410151148)... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20090619091246, un espace fut introduit devant l'edition de "U=" afin d'homogeniser */ \
-_-_-_- /* le traitement des listes ainsi editees ('v $xiirs/.CAYA.E1.1.$U :U="'), l'extraction */ \
-_-_-_- /* de la coordonnee 'U' se faisant alors comme pour 'V', 'X', 'Y', 'Z',... et donc en */ \
-_-_-_- /* testant un espace devant et un "=" derriere... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20091123123454, le format "^^g" est passe a "^^^" pour plus de souplesse... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock
/* Listage des coordonnees {u,v} des points introduit le 20060410105510... */
-define GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_SANS_DIFFERENTIATION(Fx,Fy,Fz,calcul_eventuel_point_courant) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(d_u,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(d_v,FLOT__UNDEF)); \
-_-_-_- /* Ces definitions n'ont comme seule utilite que d'eviter des problemes de compilation */ \
-_-_-_- /* suite a la definition de {d_u_effectif,d_v_effectif} le 20060117130150 dans la procedure */ \
-_-_-_- /* 'gGENERATION_D_UNE_IMAGE_DE_LA_SURFACE(...)'... */ \
-_-_-_- \
-_-_-_- gGENERATION_D_UNE_IMAGE_DE_LA_SURFACE \
-_-_-_- (Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_eventuel_point_courant) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- GENERATION_DU_TEXTURAGE_DE_LA_SURFACE(dcx,dcy,dcz); \
-_-_-_- /* Calcul des textures en passant de {mu,Mu}x{mv,Mv} a {Xmin,Xmax}x{Ymin,Ymax}. */ \
-_-_-_- \
-_-_-_- RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; \
-_-_-_- /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */ \
-_-_-_- /* extrema pourraient etre utilises pour la visualisation... */ \
-_-_-_- \
-_-_-_- BLOC(calcul_eventuel_point_courant); \
-_-_-_- /* Calculs eventuels d'informations specifiques au point courant... */ \
-_-_-_- \
-_-_-_- PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES; \
-_-_-_- /* Permutation eventuelle de {cx,cy,cz} et de {dcx,dcy,dcz} (introduit le 20050615083227). */ \
-_-_-_- \
-_-_-_- LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_DES_POINTS; \
-_-_-_- /* Introduit le 20060410105510... */ \
-_-_-_- \
-_-_-_- CALS(memorisation_1_point_06(SOUS(cx,Xcentre_ESPACE) \
-_-_-_- ,SOUS(cy,Ycentre_ESPACE) \
-_-_-_- ,SOUS(cz,Zcentre_ESPACE) \
-_-_-_- ,dcx \
-_-_-_- ,dcy \
-_-_-_- ,dcz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point courant. */ \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Eblock
/* Calcul et visualisation de la surface pour un instant donne sans differentiation. */
-define MEMORISATION_DU_POINT_COURANT_ET_DE_SA_NORMALE_EVENTUELLE(calcul_eventuel_point_courant,calcul_eventuel_derivees_partielles) \
-_-_-_- Bblock \
-_-_-_- /* La possibilite 'prendre_la_valeur_absolue_des_differentielles' introduite le */ \
-_-_-_- /* 20060131120200 a ete transferee vers 'v $xrk/attractor.1C$I 20060201095118' le */ \
-_-_-_- /* 20060201094919 pour en augmenter la portee... */ \
-_-_-_- \
-_-_-_- RECHERCHE_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; \
-_-_-_- /* On notera que cette recherche n'est pas conditionnee par 'editer_les_extrema', car les */ \
-_-_-_- /* extrema pourraient etre utilises pour la visualisation... */ \
-_-_-_- \
-_-_-_- BLOC(calcul_eventuel_point_courant); \
-_-_-_- /* Calculs eventuels d'informations specifiques au point courant... */ \
-_-_-_- \
-_-_-_- Test(IFOU(IL_NE_FAUT_PAS(visualiser_la_normale) \
-_-_-_- ,IFET(IL_FAUT(visualiser_la_normale) \
-_-_-_- ,IFOU(NON_DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \
-_-_-_- ,NON_DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* La visualisation de la normale uniquement aux noeuds du maillage defini par */ \
-_-_-_- /* l'echantillonnage de {u,v} a ete introduit le 20021010120751. */ \
-_-_-_- Bblock \
-_-_-_- PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES; \
-_-_-_- /* Permutation eventuelle de {cx,cy,cz} et de {dcx,dcy,dcz} (introduit le 20050615083227). */ \
-_-_-_- \
-_-_-_- LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_DES_POINTS; \
-_-_-_- /* Introduit le 20060410105510... */ \
-_-_-_- \
-_-_-_- CALS(memorisation_1_point_06(SOUS(cx,Xcentre_ESPACE) \
-_-_-_- ,SOUS(cy,Ycentre_ESPACE) \
-_-_-_- ,SOUS(cz,Zcentre_ESPACE) \
-_-_-_- ,dcx \
-_-_-_- ,dcy \
-_-_-_- ,dcz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point courant. On notera que le coloriage pourrait aussi se faire a */ \
-_-_-_- /* a l'aide des derivees d'ordre superieur, et par exemple : */ \
-_-_-_- /* */ \
-_-_-_- /* EGAL(d2cx,d#d#Fx(u_effectif,v_effectif)); */ \
-_-_-_- /* EGAL(d2cy,d#d#Fy(u_effectif,v_effectif)); */ \
-_-_-_- /* EGAL(d2cz,d#d#Fz(u_effectif,v_effectif)); */ \
-_-_-_- /* */ \
-_-_-_- /* On fera alors attention a la fonction de passage des derivees aux couleurs qui utilise */ \
-_-_-_- /* les parametres du type 'd?min_ESPACE' et 'd?max_ESPACE' ; les valeurs de ces derniers */ \
-_-_-_- /* sont evaluees pour les derivees premieres. Un passage aux derivees d'ordre superieur */ \
-_-_-_- /* impliquerait une modification de ces parametres, ou bien de la dite fonction... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(EnTete_de_sauvegardM ## d_u,d_u_effectif)); \
-_-_-_- DEFV(Float,INIT(EnTete_de_sauvegardM ## d_v,d_v_effectif)); \
-_-_-_- DEFV(Float,INIT(EnTete_de_sauvegardM ## rayon_de_visualisation,rayon_de_visualisation)); \
-_-_-_- /* Sauvegarde de ce que l'on va modifier... */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(dXdu,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(dXdv,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(dYdu,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(dYdv,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(dZdu,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(dZdv,FLOT__UNDEF)); \
-_-_-_- /* Afin de calculer les six derivees partielles... */ \
-_-_-_- DEFV(deltaF_3D,normale); \
-_-_-_- DEFV(Float,INIT(module_normale,FLOT__UNDEF)); \
-_-_-_- /* Normale au point courant et son module... */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(Acx,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Acy,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Acz,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Adcx,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Adcy,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Adcz,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Arayon_de_visualisation,FLOT__UNDEF)); \
-_-_-_- /* Pour sauvegarder les caracteristiques du point 'A'. */ \
-_-_-_- \
-_-_-_- DEFV(Float,INIT(Bcx,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Bcy,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Bcz,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Bdcx,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Bdcy,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Bdcz,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(Brayon_de_visualisation,FLOT__UNDEF)); \
-_-_-_- /* Pour sauvegarder les caracteristiques du point 'B'. */ \
-_-_-_- \
-_-_-_- BLOC(calcul_eventuel_derivees_partielles); \
-_-_-_- /* Calcul des derivees partielles... */ \
-_-_-_- \
-_-_-_- INITIALISATION_ACCROISSEMENT_3D(normale \
-_-_-_- ,PvectX(dXdu,dYdu,dZdu \
-_-_-_- ,dXdv,dYdv,dZdv \
-_-_-_- ) \
-_-_-_- ,PvectY(dXdu,dYdu,dZdu \
-_-_-_- ,dXdv,dYdv,dZdv \
-_-_-_- ) \
-_-_-_- ,PvectZ(dXdu,dYdu,dZdu \
-_-_-_- ,dXdv,dYdv,dZdv \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Calcul de la normale : */ \
-_-_-_- /* */ \
-_-_-_- /* X(N)=(((dY/du)*(dZ/dv))-((dZ/du)*(dY/dv))), */ \
-_-_-_- /* Y(N)=(((dZ/du)*(dX/dv))-((dX/du)*(dZ/dv))), */ \
-_-_-_- /* Z(N)=(((dX/du)*(dY/dv))-((dY/du)*(dX/dv))). */ \
-_-_-_- /* */ \
-_-_-_- gNORMALISATION_ACCROISSEMENT_3D(normale,facteur_de_la_normale); \
-_-_-_- /* Et enfin, normalisation (j'ai introduit 'NORMALISATION_ACCROISSEMENT_3D(...)' le */ \
-_-_-_- /* 20021007135953, c'est-a-dire avec beaucoup de retard ; mais il a fallu pour cela */ \
-_-_-_- /* creer 'gNORMALISATION_ACCROISSEMENT_3D(...)' a cause de 'facteur_de_la_normale'). */ \
-_-_-_- \
-_-_-_- EGAL(Acx,NEUT(cx)); \
-_-_-_- EGAL(Acy,NEUT(cy)); \
-_-_-_- EGAL(Acz,NEUT(cz)); \
-_-_-_- EGAL(Adcx \
-_-_-_- ,NEUT(BAR4(dcx,FZERO,dXdu,niveau_ROUGE_pour_la_normale \
-_-_-_- ,ponderation1_ROUGE_pour_la_normale,ponderation2_ROUGE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Adcy \
-_-_-_- ,NEUT(BAR4(dcy,FZERO,dYdu,niveau_VERTE_pour_la_normale \
-_-_-_- ,ponderation1_VERTE_pour_la_normale,ponderation2_VERTE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Adcz \
-_-_-_- ,NEUT(BAR4(dcz,FZERO,dZdu,niveau_BLEUE_pour_la_normale \
-_-_-_- ,ponderation1_BLEUE_pour_la_normale,ponderation2_BLEUE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Arayon_de_visualisation \
-_-_-_- ,NEUT(rayon_de_visualisation) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point 'A'. On notera le remplacement de 'BARY(...)' par 'BAR2(...)' */ \
-_-_-_- /* le 20060207104301 par symetrie avec l'introduction de 'BAR4(...)' ci-apres... */ \
-_-_-_- /* */ \
-_-_-_- /* Note sur le coloriage : en notant respectivement {p1,p2} les deux ponderations */ \
-_-_-_- /* {ponderation1_?????_pour_la_normale,ponderation2_?????_pour_la_normale}, on a les */ \
-_-_-_- /* quatre cas simples suivants : */ \
-_-_-_- /* */ \
-_-_-_- /* (p1=0,p2=0) : uniformement avec {dcx,dcy,dcz}, */ \
-_-_-_- /* (p1=0,p2=1) : 0, */ \
-_-_-_- /* (p1=1,p2=0) : par interpolation entre {dXdu,dYdu,dZdu} en 'A' et */ \
-_-_-_- /* {dXdv,dYdv,dZdv} en 'B', */ \
-_-_-_- /* (p1=1,p2=1) : uniformement avec les niveaux 'niveau_?????_pour_la_normale'. */ \
-_-_-_- /* */ \
-_-_-_- /* sachant que l'on peut utiliser aussi toutes valeurs intermediaires... */ \
-_-_-_- /* */ \
-_-_-_- /* On notera le 'FZERO' de 'BAR4(...)' destine a faire en sorte que les valeurs par defaut */ \
-_-_-_- /* des valeurs par defaut des ponderations ; en particulier, la compatibilite anterieure */ \
-_-_-_- /* se fait via la valeur '0' ou '1' de 'p1', avec 'p2=0'... */ \
-_-_-_- \
-_-_-_- EGAL(Bcx,ADD2(cx,ASD1(normale,dx))); \
-_-_-_- EGAL(Bcy,ADD2(cy,ASD1(normale,dy))); \
-_-_-_- EGAL(Bcz,ADD2(cz,ASD1(normale,dz))); \
-_-_-_- EGAL(Bdcx \
-_-_-_- ,MUL2(facteur_du_ROUGE_pour_la_normale \
-_-_-_- ,BAR4(dcx,FZERO,dXdv,niveau_ROUGE_pour_la_normale \
-_-_-_- ,ponderation1_ROUGE_pour_la_normale,ponderation2_ROUGE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Bdcy \
-_-_-_- ,MUL2(facteur_du_VERTE_pour_la_normale \
-_-_-_- ,BAR4(dcy,FZERO,dYdv,niveau_VERTE_pour_la_normale \
-_-_-_- ,ponderation1_VERTE_pour_la_normale,ponderation2_VERTE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Bdcz \
-_-_-_- ,MUL2(facteur_du_BLEUE_pour_la_normale \
-_-_-_- ,BAR4(dcz,FZERO,dZdv,niveau_BLEUE_pour_la_normale \
-_-_-_- ,ponderation1_BLEUE_pour_la_normale,ponderation2_BLEUE_pour_la_normale \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(Brayon_de_visualisation \
-_-_-_- ,MUL2(facteur_du_rayon_de_visualisation_pour_la_normale,rayon_de_visualisation) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point 'B'... */ \
-_-_-_- \
-_-_-_- Repe(nombre_absolu_de_points_sur_une_normale) \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(lambda \
-_-_-_- ,ADD2(COORDONNEE_BARYCENTRIQUE_MINIMALE \
-_-_-_- ,SCAL(SOUS(compteur_des_repetitions_du_Repe \
-_-_-_- ,PREMIERE_ITERATION_D_UN_Repe \
-_-_-_- ) \
-_-_-_- ,SOUS(nombre_absolu_de_points_sur_une_normale \
-_-_-_- ,PREMIERE_ITERATION_D_UN_Repe \
-_-_-_- ) \
-_-_-_- ,SOUS(COORDONNEE_BARYCENTRIQUE_MAXIMALE \
-_-_-_- ,COORDONNEE_BARYCENTRIQUE_MINIMALE \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Definition de la coordonnee barycentrique d'interpolation des coordonnees et des */ \
-_-_-_- /* couleurs des points de l'espace. */ \
-_-_-_- \
-_-_-_- EGAL(cx,BARY(Acx,Bcx,lambda)); \
-_-_-_- EGAL(cy,BARY(Acy,Bcy,lambda)); \
-_-_-_- EGAL(cz,BARY(Acz,Bcz,lambda)); \
-_-_-_- /* Recuperation de la position du point courant (cx,cy,cz)... */ \
-_-_-_- EGAL(dcx,BARY(Adcx,Bdcx,lambda)); \
-_-_-_- EGAL(dcy,BARY(Adcy,Bdcy,lambda)); \
-_-_-_- EGAL(dcz,BARY(Adcz,Bdcz,lambda)); \
-_-_-_- /* Forcage arbitraire des derivees (dcx,dcy,dcz) au point courant. */ \
-_-_-_- EGAL(rayon_de_visualisation \
-_-_-_- ,BARY(Arayon_de_visualisation,Brayon_de_visualisation,lambda) \
-_-_-_- ); \
-_-_-_- /* Et calcul du rayon de visualisation... */ \
-_-_-_- \
-_-_-_- PERMUTATION_EVENTUELLE_DES_COORDONNEES_ET_DES_DIFFERENTIELLES; \
-_-_-_- /* Permutation eventuelle de {cx,cy,cz} et de {dcx,dcy,dcz} (introduit le 20050615083227). */ \
-_-_-_- \
-_-_-_- LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_DES_POINTS; \
-_-_-_- /* Introduit le 20060410105510... */ \
-_-_-_- \
-_-_-_- CALS(memorisation_1_point_06(SOUS(cx,Xcentre_ESPACE) \
-_-_-_- ,SOUS(cy,Ycentre_ESPACE) \
-_-_-_- ,SOUS(cz,Zcentre_ESPACE) \
-_-_-_- ,dcx \
-_-_-_- ,dcy \
-_-_-_- ,dcz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point courant de la normale... */ \
-_-_-_- Eblock \
-_-_-_- ERep \
-_-_-_- \
-_-_-_- EGAL(d_u_effectif,EnTete_de_sauvegardM ## d_u); \
-_-_-_- EGAL(d_v_effectif,EnTete_de_sauvegardM ## d_v); \
-_-_-_- EGAL(rayon_de_visualisation,EnTete_de_sauvegardM ## rayon_de_visualisation); \
-_-_-_- /* Et enfin restaurations necessaires... */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock
/* Memorisation du point courant et eventuellement de sa normale. Ceci fut introduit le */
/* 20060130085630 pour 'v $xrs/project2D.11$K VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES' */
/* principalement... */
-define CALCUL_DE_dF_SUR_du____12(fonction) \
-_-_-_- DERIVATION_PARTIELLE(fonction(SOUS(u_effectif,pas_de_u_de_differentiation) \
-_-_-_- ,NEUT(v_effectif) \
-_-_-_- ) \
-_-_-_- ,fonction(ADD2(u_effectif,pas_de_u_de_differentiation) \
-_-_-_- ,NEUT(v_effectif) \
-_-_-_- ) \
-_-_-_- ,DOUB(pas_de_u_de_differentiation) \
-_-_-_- )
-define CALCUL_DE_dF_SUR____dv_12(fonction) \
-_-_-_- DERIVATION_PARTIELLE(fonction(NEUT(u_effectif) \
-_-_-_- ,SOUS(v_effectif,pas_de_v_de_differentiation) \
-_-_-_- ) \
-_-_-_- ,fonction(NEUT(u_effectif) \
-_-_-_- ,ADD2(v_effectif,pas_de_v_de_differentiation) \
-_-_-_- ) \
-_-_-_- ,DOUB(pas_de_v_de_differentiation) \
-_-_-_- )
-define CALCUL_DE_dF_SUR_du_dv_12(fonction) \
-_-_-_- DERIVATION_PARTIELLE(fonction(SOUS(u_effectif,pas_de_u_de_differentiation) \
-_-_-_- ,SOUS(v_effectif,pas_de_v_de_differentiation) \
-_-_-_- ) \
-_-_-_- ,fonction(ADD2(u_effectif,pas_de_u_de_differentiation) \
-_-_-_- ,ADD2(v_effectif,pas_de_v_de_differentiation) \
-_-_-_- ) \
-_-_-_- ,DOUB(GpytF2D(pas_de_u_de_differentiation,pas_de_v_de_differentiation)) \
-_-_-_- )
/* Pour calculer les derivees partielles par differences (introduit le 20041118144531). */
/* */
/* Le 20060130085630 les noms 'DIFFERENTIELLE_DES_FONCTIONS_F_PAR_RAPPORT_A_?_?_12(...)' */
/* ont ete raccourcis en 'CALCUL_DE_dF_SUR_??_??_12(...)' pour des raisons de mise en */
/* page ; on notera au passage que le '12' semble etre lie au nom du present fichier */
/* ('v $xrs/surfaces.12$I')... */
-define GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENCES____(Fx,Fy,Fz,calcul_eventuel_point_courant) \
-_-_-_- Bblock \
-_-_-_- gGENERATION_D_UNE_IMAGE_DE_LA_SURFACE \
-_-_-_- (Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_eventuel_point_courant) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- DEFV(Float,INIT(differentielle_x,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_y,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_z,FLOT__UNDEF)); \
-_-_-_- /* Definition des trois differentielles. */ \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du____12__Fx,CALCUL_DE_dF_SUR_du____12(Fx))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du____12__Fy,CALCUL_DE_dF_SUR_du____12(Fy))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du____12__Fz,CALCUL_DE_dF_SUR_du____12(Fz))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur____dv_12__Fx,CALCUL_DE_dF_SUR____dv_12(Fx))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur____dv_12__Fy,CALCUL_DE_dF_SUR____dv_12(Fy))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur____dv_12__Fz,CALCUL_DE_dF_SUR____dv_12(Fz))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du_dv_12__Fx,CALCUL_DE_dF_SUR_du_dv_12(Fx))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du_dv_12__Fy,CALCUL_DE_dF_SUR_du_dv_12(Fy))); \
-_-_-_- DEFV(Float,INIT(valeur_de_dF_sur_du_dv_12__Fz,CALCUL_DE_dF_SUR_du_dv_12(Fz))); \
-_-_-_- /* Optimisation introduite le 20071204152647 lors des tentatives sur '$LACT18' pour faire */ \
-_-_-_- /* disparaitre le probleme : */ \
-_-_-_- /* */ \
-_-_-_- /* internal compiler error: in add_stack_var_conflict, at cfgexpand.c:264 */ \
-_-_-_- /* */ \
-_-_-_- /* lors de la compilation de 'v $xrs/CalabiYau.21$K'. Et bien oui, c'etait la solution a */ \
-_-_-_- /* ce probleme : il fallait simplifier les expressions generees... */ \
-_-_-_- DEFV(Float,INIT(texture_x,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_y,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_z,FLOT__UNDEF)); \
-_-_-_- /* Definition des trois textures. */ \
-_-_-_- \
-_-_-_- Test(IL_FAUT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE)) \
-_-_-_- /* Possibilite introduite le 20230125094726... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(differentielle_x,differentielle_ROUGE); \
-_-_-_- EGAL(differentielle_y,differentielle_VERTE); \
-_-_-_- EGAL(differentielle_z,differentielle_BLEUE); \
-_-_-_- \
-_-_-_- EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,FAUX); \
-_-_-_- /* Ne sert a rien, mais c'est plus sur... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(differentielle_x \
-_-_-_- ,LIZ14(ponderation_de__u_____dans_dx \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,u \
-_-_-_- ,u_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de__v_____dans_dx \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,v \
-_-_-_- ,v_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de_Fx_____dans_dx,cx \
-_-_-_- ,ponderation_de_Fx_u___dans_dx,valeur_de_dF_sur_du____12__Fx \
-_-_-_- ,ponderation_de_Fx___v_dans_dx,valeur_de_dF_sur____dv_12__Fx \
-_-_-_- ,ponderation_de_Fx_u_v_dans_dx,valeur_de_dF_sur_du_dv_12__Fx \
-_-_-_- ,ponderation_de_Fy_____dans_dx,cy \
-_-_-_- ,ponderation_de_Fy_u___dans_dx,valeur_de_dF_sur_du____12__Fy \
-_-_-_- ,ponderation_de_Fy___v_dans_dx,valeur_de_dF_sur____dv_12__Fy \
-_-_-_- ,ponderation_de_Fy_u_v_dans_dx,valeur_de_dF_sur_du_dv_12__Fy \
-_-_-_- ,ponderation_de_Fz_____dans_dx,cz \
-_-_-_- ,ponderation_de_Fz_u___dans_dx,valeur_de_dF_sur_du____12__Fz \
-_-_-_- ,ponderation_de_Fz___v_dans_dx,valeur_de_dF_sur____dv_12__Fz \
-_-_-_- ,ponderation_de_Fz_u_v_dans_dx,valeur_de_dF_sur_du_dv_12__Fz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(differentielle_y \
-_-_-_- ,LIZ14(ponderation_de__u_____dans_dy \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,u \
-_-_-_- ,u_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de__v_____dans_dy \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,v \
-_-_-_- ,v_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de_Fx_____dans_dy,cx \
-_-_-_- ,ponderation_de_Fx_u___dans_dy,valeur_de_dF_sur_du____12__Fx \
-_-_-_- ,ponderation_de_Fx___v_dans_dy,valeur_de_dF_sur____dv_12__Fx \
-_-_-_- ,ponderation_de_Fx_u_v_dans_dy,valeur_de_dF_sur_du_dv_12__Fx \
-_-_-_- ,ponderation_de_Fy_____dans_dy,cy \
-_-_-_- ,ponderation_de_Fy_u___dans_dy,valeur_de_dF_sur_du____12__Fy \
-_-_-_- ,ponderation_de_Fy___v_dans_dy,valeur_de_dF_sur____dv_12__Fy \
-_-_-_- ,ponderation_de_Fy_u_v_dans_dy,valeur_de_dF_sur_du_dv_12__Fy \
-_-_-_- ,ponderation_de_Fz_____dans_dy,cz \
-_-_-_- ,ponderation_de_Fz_u___dans_dy,valeur_de_dF_sur_du____12__Fz \
-_-_-_- ,ponderation_de_Fz___v_dans_dy,valeur_de_dF_sur____dv_12__Fz \
-_-_-_- ,ponderation_de_Fz_u_v_dans_dy,valeur_de_dF_sur_du_dv_12__Fz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- EGAL(differentielle_z \
-_-_-_- ,LIZ14(ponderation_de__u_____dans_dz \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,u \
-_-_-_- ,u_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de__v_____dans_dz \
-_-_-_- ,COND(IL_FAUT(calcul_des_differentielles_avec_u_v_____compatibilite_2009110217) \
-_-_-_- ,v \
-_-_-_- ,v_effectif_translate \
-_-_-_- ) \
-_-_-_- ,ponderation_de_Fx_____dans_dz,cx \
-_-_-_- ,ponderation_de_Fx_u___dans_dz,valeur_de_dF_sur_du____12__Fx \
-_-_-_- ,ponderation_de_Fx___v_dans_dz,valeur_de_dF_sur____dv_12__Fx \
-_-_-_- ,ponderation_de_Fx_u_v_dans_dz,valeur_de_dF_sur_du_dv_12__Fx \
-_-_-_- ,ponderation_de_Fy_____dans_dz,cy \
-_-_-_- ,ponderation_de_Fy_u___dans_dz,valeur_de_dF_sur_du____12__Fy \
-_-_-_- ,ponderation_de_Fy___v_dans_dz,valeur_de_dF_sur____dv_12__Fy \
-_-_-_- ,ponderation_de_Fy_u_v_dans_dz,valeur_de_dF_sur_du_dv_12__Fy \
-_-_-_- ,ponderation_de_Fz_____dans_dz,cz \
-_-_-_- ,ponderation_de_Fz_u___dans_dz,valeur_de_dF_sur_du____12__Fz \
-_-_-_- ,ponderation_de_Fz___v_dans_dz,valeur_de_dF_sur____dv_12__Fz \
-_-_-_- ,ponderation_de_Fz_u_v_dans_dz,valeur_de_dF_sur_du_dv_12__Fz \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Calcul des differentielles approchees. ATTENTION, le 20041110174426 je note lors de */ \
-_-_-_- /* la mise au point de 'v $xiirs/.PROJ.11.1.$U' que les 'ADD2(...)' et les 'SOUS(...)' */ \
-_-_-_- /* de la 'DERIVATION_PARTIELLE(...)' ci-dessus peuvent faire sortir des domaines de */ \
-_-_-_- /* definition des coordonnees {u,v}. Il faut donc bien faire attention aux problemes */ \
-_-_-_- /* de periodicite et de prolongement dans les cas ou, par exemple, l'une ou l'autre */ \
-_-_-_- /* des fonctions 'F?(...)' est definie via un champ bidimensionnel... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20090606170823 fut pris en compte eventuellement {cx,cy,cz} lors de la mise au point */ \
-_-_-_- /* l'image 'v $xiirs/PROJ.c1'. */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20090724120555 les 'LIO14(...)'s qui ne se justifaient plus (puisque qu'il n'y a plus */ \
-_-_-_- /* de fonctions a evaluer ici...) furent remplaces par des 'LIN14(...)'s... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20091102170618 {u,v} furent remplaces par {u_effectif_translate,v_effectif_translate} */ \
-_-_-_- /* plus logiques... */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- GENERATION_DU_TEXTURAGE_DE_LA_SURFACE(texture_x,texture_y,texture_z); \
-_-_-_- /* Calcul des textures en passant de {mu,Mu}x{mv,Mv} a {Xmin,Xmax}x{Ymin,Ymax}. */ \
-_-_-_- EGAL(dcx,BARY(differentielle_x,texture_x,ponderation_ROUGE_pour_dcx)); \
-_-_-_- EGAL(dcy,BARY(differentielle_y,texture_y,ponderation_VERTE_pour_dcy)); \
-_-_-_- EGAL(dcz,BARY(differentielle_z,texture_z,ponderation_BLEUE_pour_dcz)); \
-_-_-_- /* Calcul des couleurs utiles... */ \
-_-_-_- \
-_-_-_- MEMORISATION_DU_POINT_COURANT_ET_DE_SA_NORMALE_EVENTUELLE(BLOC(calcul_eventuel_point_courant) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- EGAL(dXdu,CALCUL_DE_dF_SUR_du____12(Fx)); \
-_-_-_- EGAL(dYdu,CALCUL_DE_dF_SUR_du____12(Fy)); \
-_-_-_- EGAL(dZdu,CALCUL_DE_dF_SUR_du____12(Fz)); \
-_-_-_- /* Calcul des derivees partielles en 'u'. */ \
-_-_-_- EGAL(dXdv,CALCUL_DE_dF_SUR____dv_12(Fx)); \
-_-_-_- EGAL(dYdv,CALCUL_DE_dF_SUR____dv_12(Fy)); \
-_-_-_- EGAL(dZdv,CALCUL_DE_dF_SUR____dv_12(Fz)); \
-_-_-_- /* Calcul des derivees partielles en 'v'. */ \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point courant et eventuellement de sa normale. Ceci fut introduit le */ \
-_-_-_- /* 20060130085630 pour 'v $xrs/project2D.11$K VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES' */ \
-_-_-_- /* principalement... */ \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Eblock
/* Calcul et visualisation de la surface pour un instant donne avec calcul de differences */
/* finies (soit une approximation de la differentiation...). Cette procedure a ete */
/* introduite le 20041107143046 pour 'v $xrs/project2D.11$K'... */
-define GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENTIATION(Fx,Fy,Fz,calcul_eventuel_point_courant) \
-_-_-_- Bblock \
-_-_-_- gGENERATION_D_UNE_IMAGE_DE_LA_SURFACE \
-_-_-_- (Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_eventuel_point_courant) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- DEFV(Float,INIT(differentielle_x,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_y,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(differentielle_z,FLOT__UNDEF)); \
-_-_-_- /* Definition des trois differentielles. */ \
-_-_-_- DEFV(Float,INIT(texture_x,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_y,FLOT__UNDEF)); \
-_-_-_- DEFV(Float,INIT(texture_z,FLOT__UNDEF)); \
-_-_-_- /* Definition des trois textures. */ \
-_-_-_- \
-_-_-_- Test(IL_FAUT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE)) \
-_-_-_- /* Possibilite introduite le 20230125094726... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(differentielle_x,differentielle_ROUGE); \
-_-_-_- EGAL(differentielle_y,differentielle_VERTE); \
-_-_-_- EGAL(differentielle_z,differentielle_BLEUE); \
-_-_-_- \
-_-_-_- EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,FAUX); \
-_-_-_- /* Ne sert a rien, mais c'est plus sur... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(c_est_le_calcul_de__differentielle_x__differentielle_y__differentielle_z,VRAI); \
-_-_-_- EGAL(differentielle_x,dFxyz(d#Fx(u_effectif,v_effectif))); \
-_-_-_- EGAL(differentielle_y,dFxyz(d#Fy(u_effectif,v_effectif))); \
-_-_-_- EGAL(differentielle_z,dFxyz(d#Fz(u_effectif,v_effectif))); \
-_-_-_- EGAL(c_est_le_calcul_de__differentielle_x__differentielle_y__differentielle_z,FAUX); \
-_-_-_- /* Calcul des differentielles exactes... */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- GENERATION_DU_TEXTURAGE_DE_LA_SURFACE(texture_x,texture_y,texture_z); \
-_-_-_- /* Calcul des textures en passant de {mu,Mu}x{mv,Mv} a {Xmin,Xmax}x{Ymin,Ymax}. */ \
-_-_-_- EGAL(dcx,BARY(differentielle_x,texture_x,ponderation_ROUGE_pour_dcx)); \
-_-_-_- EGAL(dcy,BARY(differentielle_y,texture_y,ponderation_VERTE_pour_dcy)); \
-_-_-_- EGAL(dcz,BARY(differentielle_z,texture_z,ponderation_BLEUE_pour_dcz)); \
-_-_-_- /* Calcul des couleurs utiles... */ \
-_-_-_- \
-_-_-_- MEMORISATION_DU_POINT_COURANT_ET_DE_SA_NORMALE_EVENTUELLE(BLOC(calcul_eventuel_point_courant) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- EGAL(d_u_effectif,pas_de_u_effectif); \
-_-_-_- EGAL(d_v_effectif,FZERO); \
-_-_-_- /* Afin de calculer les derivees partielles en 'u'. */ \
-_-_-_- EGAL(c_est_le_calcul_de__dXdu__dYdu__dZdu \
-_-_-_- ,VRAI \
-_-_-_- ); \
-_-_-_- EGAL(dXdu \
-_-_-_- ,dFxyz(d#Fx(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(dYdu \
-_-_-_- ,dFxyz(d#Fy(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(dZdu \
-_-_-_- ,dFxyz(d#Fz(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(c_est_le_calcul_de__dXdu__dYdu__dZdu \
-_-_-_- ,FAUX \
-_-_-_- ); \
-_-_-_- /* Calcul des derivees partielles en 'u'. */ \
-_-_-_- \
-_-_-_- EGAL(d_u_effectif,FZERO); \
-_-_-_- EGAL(d_v_effectif,pas_de_v_effectif); \
-_-_-_- /* Afin de calculer les derivees partielles en 'v'. */ \
-_-_-_- EGAL(c_est_le_calcul_de__dXdv__dYdv__dZdv \
-_-_-_- ,VRAI \
-_-_-_- ); \
-_-_-_- EGAL(dXdv \
-_-_-_- ,dFxyz(d#Fx(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(dYdv \
-_-_-_- ,dFxyz(d#Fy(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(dZdv \
-_-_-_- ,dFxyz(d#Fz(u_effectif,v_effectif)) \
-_-_-_- ); \
-_-_-_- EGAL(c_est_le_calcul_de__dXdv__dYdv__dZdv \
-_-_-_- ,FAUX \
-_-_-_- ); \
-_-_-_- /* Calcul des derivees partielles en 'v'. */ \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ); \
-_-_-_- /* Memorisation du point courant et eventuellement de sa normale. Ceci fut introduit le */ \
-_-_-_- /* 20060130085630 pour 'v $xrs/project2D.11$K VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES' */ \
-_-_-_- /* principalement... */ \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- Eblock
/* Calcul et visualisation de la surface pour un instant donne avec differentiation */
/* formelle. */
-define INITIALISATIONS_COMMUNES_DE_PROJECTION_DE_LA_SURFACE \
-_-_-_- Bblock \
-_-_-_- EGAL(nombre_de_periodes_de_la_simulation,UN); \
-_-_-_- /* Un seul "tour" suffit... */ \
-_-_-_- \
-_-_-_- EGAL(diviseur_du_pas_de_u,FU); \
-_-_-_- EGAL(diviseur_du_pas_de_v,FU); \
-_-_-_- \
-_-_-_- Test(IL_FAUT(forcer_les_extrema_de_u_v_lors_de_la_projection_de_la_surface)) \
-_-_-_- /* Test introduit le 20060306164217... */ \
-_-_-_- Bblock \
-_-_-_- EGAL(pas_de_u,DIVI(SOUS(maximum_de_u,minimum_de_u),FLOT(dimX))); \
-_-_-_- EGAL(pas_de_v,DIVI(SOUS(maximum_de_v,minimum_de_v),FLOT(dimY))); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EGAL(pas_de_u,DIVI(SOUS(sauvegarde_de_maximum_de_u,sauvegarde_de_minimum_de_u),FLOT(dimX))); \
-_-_-_- EGAL(pas_de_v,DIVI(SOUS(sauvegarde_de_maximum_de_v,sauvegarde_de_minimum_de_v),FLOT(dimY))); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- EGAL(echantillonnage_de_u,UN); \
-_-_-_- EGAL(echantillonnage_de_v,UN); \
-_-_-_- EGAL(translation_de_l_echantillonnage_de_u,ZERO); \
-_-_-_- EGAL(translation_de_l_echantillonnage_de_v,ZERO); \
-_-_-_- /* Generation des trois projections d'une surface tel que cela est defini et exploite */ \
-_-_-_- /* dans 'v $xrs/project2D.11$K P.R.O.J.E.C.T.O.R'. Ceci a ete introduit le 20041125111850. */ \
-_-_-_- /* */ \
-_-_-_- /* On notera que pour que cela ait un interet, il faut que : */ \
-_-_-_- /* */ \
-_-_-_- /* diviseur_du_pas_de_u = 1 (dpu=1) */ \
-_-_-_- /* diviseur_du_pas_de_v = 1 (dpv=1) */ \
-_-_-_- /* */ \
-_-_-_- /* maximum_de_u - minimum_de_u */ \
-_-_-_- /* pas_de_u = ----------------------------- */ \
-_-_-_- /* dimX */ \
-_-_-_- /* */ \
-_-_-_- /* maximum_de_v - minimum_de_v */ \
-_-_-_- /* pas_de_v = ----------------------------- */ \
-_-_-_- /* dimY */ \
-_-_-_- /* */ \
-_-_-_- /* afin de bien "remplir" les matrices {Proj_Fx,Proj_Fy,Proj_Fz}. */ \
-_-_-_- /* */ \
-_-_-_- /* La reinitialisation de l'echantillonnage de la surface a ete introduit le 20050114214615 */ \
-_-_-_- /* car cela manquait effectivement... */ \
-_-_-_- Eblock
/* Initialisations communes a toutes les surfaces destinees a permettre la reinjection des */
/* trois pseudo-projections {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans */
/* 'v $xrs/project2D.11$K' (introduit sous forme de procedure le 20050203085348...). */
-define INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE(initialisations) \
-_-_-_- Bblock \
-_-_-_- Test(IL_FAUT(faire_les_initialisations_specifiques_de_projection_de_la_surface)) \
-_-_-_- /* Ce test fut introduit le 20060502142542 pour 'v $xrs/project2D.01$Z initialisations'... */ \
-_-_-_- Bblock \
-_-_-_- BLOC(initialisations;); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock
/* Initialisations specifiques a cette surface destinees a permettre la reinjection des */
/* trois pseudo-projections {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans */
/* 'v $xrs/project2D.11$K' (introduit le 20050203103821)... */
-define NOM_PROJECTION(nom_imageProjectionFxyz,postfixe) \
-_-_-_- COND(IFEQ_chaine(nom_imageProjection,NOM_PIPE_Local) \
-_-_-_- ,nom_imageProjectionFxyz \
-_-_-_- ,chain_Aconcaten2_sauf_nom_pipe(nom_imageProjection \
-_-_-_- ,postfixe \
-_-_-_- ) \
-_-_-_- )
-define VISUALISATION_GENERALE_DE_LA_SURFACE(calcul_des_parametres,calcul_de_la_surface,Fx,Fy,Fz,Pxyz) \
-_-_-_- /* L'argument 'Pxyz' a ete introduit le 20050203103821... */ \
-_-_-_- Bblock \
-_-_-_- DEFV(Float,INIT(sauvegarde_de_minimum_de_u,minimum_de_u)); \
-_-_-_- DEFV(Float,INIT(sauvegarde_de_maximum_de_u,maximum_de_u)); \
-_-_-_- DEFV(Float,INIT(sauvegarde_de_minimum_de_v,minimum_de_v)); \
-_-_-_- DEFV(Float,INIT(sauvegarde_de_maximum_de_v,maximum_de_v)); \
-_-_-_- /* Introduit le 20060306161232 pour etre capable, au cas ou la projection de la surface */ \
-_-_-_- /* est demandee, d'utiliser les extrema de {u,v} introduit comme parametres et non pas les */ \
-_-_-_- /* extrema qui, par defaut, sont forces par la procedure 'Pxyz'. Historiquement, cela fut */ \
-_-_-_- /* introduit pour 'v $xrs/sphere.11$K' et l'image 'v $xiirs/PROJ.C1'... */ \
-_-_-_- BDEFV(imageF,Projection_de_Fx); \
-_-_-_- BDEFV(imageF,Projection_de_Fy); \
-_-_-_- BDEFV(imageF,Projection_de_Fz); \
-_-_-_- /* On notera que pour des raisons de simplicite, il faut definir les trois projections de */ \
-_-_-_- /* la surface meme si 'IL_NE_FAUT_PAS(generer_les_trois_projections_de_la_surface)'... */ \
-_-_-_- \
-_-_-_- Test(IFET(IL_FAUT(visualiser_la_droite_tracee_dans_le_plan_uv) \
-_-_-_- ,IL_NE_FAUT_PAS(generer_les_trois_projections_de_la_surface) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Test introduit le 20170125154159 et deplace ici le 20170125155212... */ \
-_-_-_- Bblock \
-_-_-_- PRINT_ATTENTION("pas de visualisation de la droite du plan {u,v} en l'absence de projection de la surface"); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(transformer_u_v)) \
-_-_-_- Bblock \
-_-_-_- ACCES_AUX_IMAGES_FLOTTANTES(image_Coordonnee_U,nom_transformation_u,transformer_u_v_niveau_hors_image); \
-_-_-_- ACCES_AUX_IMAGES_FLOTTANTES(image_Coordonnee_V,nom_transformation_v,transformer_u_v_niveau_hors_image); \
-_-_-_- /* Chargement eventuel des transformations de {u,v} (introduit le 20060117134939...). */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(trouer_u_v)) \
-_-_-_- Bblock \
-_-_-_- ACCES_AUX_IMAGES_FLOTTANTES(image_Trous,nom_trouage_u_v,LA_SURFACE_EST_INTEGRE); \
-_-_-_- /* Chargement eventuel du "trouage" de {u,v} (introduit le 20060529141942...) tel que par */ \
-_-_-_- /* defaut il n'y ait pas de trous... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFOU(IL_NE_FAUT_PAS(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,IFET(IL_FAUT(generer_les_trois_projections_de_la_surface) \
-_-_-_- ,EST_VRAI(les_trois_projections_de_la_surface_sont_en_fait_celles_de_la_texture) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Ce test a ete introduit le 20050713150047... */ \
-_-_-_- Bblock \
-_-_-_- ACCES_AUX_IMAGES(image_Texture_R,nom_textureR); \
-_-_-_- ACCES_AUX_IMAGES(image_Texture_V,nom_textureV); \
-_-_-_- ACCES_AUX_IMAGES(image_Texture_B,nom_textureB); \
-_-_-_- /* Chargement eventuel des textures utiles... */ \
-_-_-_- /* */ \
-_-_-_- /* Le passage de {ImageA1,ImageA2,ImageA3} a {IFmageA1,IFmageA2,IFmageA3} a eu lieu */ \
-_-_-_- /* le 20050715182842. Je note le 20071021094138 que c'est certainement cette modification */ \
-_-_-_- /* qui est responsable de la difference qui existe entre 'v $xiirs/CAYA.61.0129' et */ \
-_-_-_- /* 'v $xiirs/CAYA.A1.0129' par exemple, les differences de couleur venant fort probablement */ \
-_-_-_- /* de differences de textures ('v $xiirs/$Fnota 20071020113639')... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut generer les trois projections (introduit le 20041126091042) : */ \
-_-_-_- Bblock \
-_-_-_- /* ATTENTION ; jusqu'au 20050628155918, l'ordre des deux initialisations suivantes etaient */ \
-_-_-_- /* etait l'inverse par erreur. 'INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE' */ \
-_-_-_- /* peut en effet modifier des parametres qui sont exploites (par exemple 'maximum_de_v') */ \
-_-_-_- /* par 'INITIALISATIONS_COMMUNES_DE_PROJECTION_DE_LA_SURFACE', d'ou l'ordre logique qui */ \
-_-_-_- /* suit... */ \
-_-_-_- INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE(Pxyz); \
-_-_-_- /* Introduit le 20050203085348 pour permettre la reinjection des trois pseudo-projections */ \
-_-_-_- /* {Projection_de_Fx,Projection_de_Fy,Projection_de_Fz} dans 'v $xrs/project2D.11$K' en */ \
-_-_-_- /* minimisant les adaptations utiles... */ \
-_-_-_- \
-_-_-_- INITIALISATIONS_COMMUNES_DE_PROJECTION_DE_LA_SURFACE; \
-_-_-_- /* Mise sous forme d'une procedure le 20050203085348 par symetrie avec ce qui fut introduit */ \
-_-_-_- /* a cette date avec 'INITIALISATIONS_SPECIFIQUES_DE_PROJECTION_DE_LA_SURFACE'... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- ACCES_AUX_IMAGES_FLOTTANTES(image_Rayon,nom_rayon,rayon_de_visualisation); \
-_-_-_- /* Chargement eventuel du champ rayon (introduit le 20041229174601)... */ \
-_-_-_- /* */ \
-_-_-_- /* On notera le passage de 'IFmageA1' a 'IFmageA4' le 20050715180458 dans le but de faire */ \
-_-_-_- /* des textures des images de type 'Float' {IFmageA1,IFmageA2,IFmageA3} si necessaire... */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- RE_INITIALISATION_DE_L_HORLOGE; \
-_-_-_- /* Depuis que le 19990512152305 a ete mis en place un : */ \
-_-_-_- /* */ \
-_-_-_- /* INCREMENTATION_DE_L_HORLOGE(dct); */ \
-_-_-_- /* */ \
-_-_-_- /* apres chaque image, l'initialisation de l'horloge ne doit plus etre faite pour chaque */ \
-_-_-_- /* image, mais une seul fois, au tout debut... */ \
-_-_-_- \
-_-_-_- Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation) \
-_-_-_- /* Le 20090408092756, j'ai voulu introduire ici 'KompParallele(...)' a la place de ce */ \
-_-_-_- /* 'Komp(...)'. En fait c'est plus delicat que prevu et ce en particulier a cause de la */ \
-_-_-_- /* variable 'numero_de_la_periode_courante' qui, via 'PASSAGE_A_L_IMAGE_SUIVANTE', est */ \
-_-_-_- /* incrementee. Elle est differente de 'numero_de_la_periode_courante_de_la_simulation', */ \
-_-_-_- /* malheureusement, et n'est donc pas geree de facon parallele comme le serait */ \
-_-_-_- /* 'numero_de_la_periode_courante_de_la_simulation' dans 'KompParallele(...)'... */ \
-_-_-_- Bblock \
-_-_-_- INITIALISATIONS_RELATIVES_A_CHAQUE_NOUVELLE_IMAGE(numero_de_la_periode_courante); \
-_-_-_- /* Initialisations necessaires avant le calcul et la generation de chaque nouvelle image. */ \
-_-_-_- \
-_-_-_- BLOC(calcul_des_parametres); \
-_-_-_- /* Calcul des parametres evoluant au cours de la simulation... */ \
-_-_-_- \
-_-_-_- BLOC(calcul_de_la_surface); \
-_-_-_- /* Calcul de la surface proprement dit... */ \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;)); \
-_-_-_- /* Generation de l'image courante... */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- INCREMENTATION_DE_L_HORLOGE(dct); \
-_-_-_- /* Simulation d'un temps arbitraire (introduit le 19990512094356). */ \
-_-_-_- Eblock \
-_-_-_- EKom \
-_-_-_- \
-_-_-_- Test(IL_FAUT(generer_les_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut generer les trois projections (introduit le 20041126091042) : */ \
-_-_-_- Bblock \
-_-_-_- Test(EST_VRAI(les_trois_projections_de_la_surface_sont_des_images_standards)) \
-_-_-_- /* Cas ou les trois projections sont "standards" (introduit le 20050115113048) : */ \
-_-_-_- Bblock \
-_-_-_- Test(IL_FAUT(conserver_le_zero_des_trois_projections_de_la_surface)) \
-_-_-_- /* Cas ou il faut conserver le zero des trois projections (introduit le 20050115115200) : */ \
-_-_-_- Bblock \
-_-_-_- CALS(Ifloat_std_avec_le_vrai_zero_et_renormalisation(Image_ROUGE,Projection_de_Fx)); \
-_-_-_- CALS(Ifloat_std_avec_le_vrai_zero_et_renormalisation(Image_VERTE,Projection_de_Fy)); \
-_-_-_- CALS(Ifloat_std_avec_le_vrai_zero_et_renormalisation(Image_BLEUE,Projection_de_Fz)); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- CALS(Ifloat_std_avec_renormalisation(Image_ROUGE,Projection_de_Fx)); \
-_-_-_- CALS(Ifloat_std_avec_renormalisation(Image_VERTE,Projection_de_Fy)); \
-_-_-_- CALS(Ifloat_std_avec_renormalisation(Image_BLEUE,Projection_de_Fz)); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- CALi(Iupdate_image(NOM_PROJECTION(nom_imageProjectionFx,c_COORD_X),Image_ROUGE)); \
-_-_-_- CALi(Iupdate_image(NOM_PROJECTION(nom_imageProjectionFy,c_COORD_Y),Image_VERTE)); \
-_-_-_- CALi(Iupdate_image(NOM_PROJECTION(nom_imageProjectionFz,c_COORD_Z),Image_BLEUE)); \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- /* Cas ou les trois projections sont non "standards" : */ \
-_-_-_- CALi(IupdateF_image(NOM_PROJECTION(nom_imageProjectionFx,c_COORD_X),Projection_de_Fx)); \
-_-_-_- CALi(IupdateF_image(NOM_PROJECTION(nom_imageProjectionFy,c_COORD_Y),Projection_de_Fy)); \
-_-_-_- CALi(IupdateF_image(NOM_PROJECTION(nom_imageProjectionFz,c_COORD_Z),Projection_de_Fz)); \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- Test(IFET(IL_FAUT(tracer_une_droite_du_plan_uv) \
-_-_-_- ,IL_FAUT(visualiser_la_droite_tracee_dans_le_plan_uv) \
-_-_-_- ) \
-_-_-_- ) \
-_-_-_- /* Test introduit le 20060817180753... */ \
-_-_-_- Bblock \
-_-_-_- CALi(IupdateF_image(nom_imageR_Droite_uv,image_Droite_UV_Calculee__)); \
-_-_-_- /* Memorisation de la droite dans le plan {u,v}... */ \
-_-_-_- /* */ \
-_-_-_- /* Le 20170210130509, 'nom_imageDroite_uv' a ete remplace par 'nom_imageR_Droite_uv' suite */ \
-_-_-_- /* a l'introduction de 'nom_imageA_Droite_uv' a cette date... */ \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- Eblock \
-_-_-_- ATes \
-_-_-_- Bblock \
-_-_-_- EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; \
-_-_-_- /* Edition facultative des extrema des coordonnees. */ \
-_-_-_- Eblock \
-_-_-_- ETes \
-_-_-_- \
-_-_-_- EDEFV(imageF,Projection_de_Fz); \
-_-_-_- EDEFV(imageF,Projection_de_Fy); \
-_-_-_- EDEFV(imageF,Projection_de_Fx); \
-_-_-_- /* On notera que pour des raisons de simplicite, il faut definir les trois projections de */ \
-_-_-_- /* la surface meme si 'IL_NE_FAUT_PAS(generer_les_trois_projections_de_la_surface)'... */ \
-_-_-_- Eblock
/* Calcul et visualisation de la surface avec evolution temporelle... */
-define VISUALISATION_DE_LA_SURFACE_SANS_DIFFERENTIATION(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc) \
-_-_-_- /* L'argument 'Pxyz' a ete introduit le 20050203103821... */ \
-_-_-_- /* jusqu'au 20010525121332 'calcul_pc' s'appelait 'calcul_eventuel_point_courant' et son */ \
-_-_-_- /* nom a ete reduit a cause de la longueur de la ligne qui le reference ci-apres... */ \
-_-_-_- Bblock \
-_-_-_- VISUALISATION_GENERALE_DE_LA_SURFACE(BLOC(calcul_des_parametres) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_SANS_DIFFERENTIATION(Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_pc) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ,Fx,Fy,Fz \
-_-_-_- ,Pxyz \
-_-_-_- ); \
-_-_-_- Eblock
/* Calcul sans differentiation et visualisation de la surface avec evolution temporelle... */
-define VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENCES____(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc) \
-_-_-_- /* L'argument 'Pxyz' a ete introduit le 20050203103821... */ \
-_-_-_- /* jusqu'au 20010525121332 'calcul_pc' s'appelait 'calcul_eventuel_point_courant' et son */ \
-_-_-_- /* nom a ete reduit a cause de la longueur de la ligne qui le reference ci-apres... */ \
-_-_-_- Bblock \
-_-_-_- VISUALISATION_GENERALE_DE_LA_SURFACE(BLOC(calcul_des_parametres) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENCES____(Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_pc) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ,Fx,Fy,Fz \
-_-_-_- ,Pxyz \
-_-_-_- ); \
-_-_-_- Eblock
/* Calcul avec evaluation de differences finies (une approximation de la differentiation) */
/* et visualisation de la surface avec evolution temporelle. Cette procedure a ete */
/* introduite le 20041107143046 pour 'v $xrs/project2D.11$K'... */
-define VISUALISATION_DE_LA_SURFACE_AVEC_DIFFERENTIATION(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc) \
-_-_-_- /* L'argument 'Pxyz' a ete introduit le 20050203103821... */ \
-_-_-_- /* jusqu'au 20010525121332 'calcul_pc' s'appelait 'calcul_eventuel_point_courant' et son */ \
-_-_-_- /* nom a ete reduit a cause de la longueur de la ligne qui le reference ci-apres... */ \
-_-_-_- Bblock \
-_-_-_- VISUALISATION_GENERALE_DE_LA_SURFACE(BLOC(calcul_des_parametres) \
-_-_-_- ,BLOC(Bblock \
-_-_-_- GENERATION_D_UNE_IMAGE_DE_LA_SURFACE_AVEC_DIFFERENTIATION(Fx,Fy,Fz \
-_-_-_- ,BLOC(calcul_pc) \
-_-_-_- ); \
-_-_-_- Eblock \
-_-_-_- ) \
-_-_-_- ,Fx,Fy,Fz \
-_-_-_- ,Pxyz \
-_-_-_- ); \
-_-_-_- Eblock
/* Calcul avec differentiation et visualisation de la surface avec evolution temporelle... */