/*************************************************************************************************************************************/ /* */ /* C A L C U L D E L ' H Y P E R - V O L U M E P R O P R E M E N T D I T : */ /* */ /* */ /* Author of '$xrs/hyper_volumes.12$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20230209180401). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* C A L C U L D E L ' H Y P E R - V O L U M 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(u,minimum_de_u,maximum_de_u) #define v_NORMALISEE \ NORM(v,minimum_de_v,maximum_de_v) #define w_NORMALISEE \ NORM(w,minimum_de_w,maximum_de_w) #define t_NORMALISEE \ NORM(t,minimum_de_t,maximum_de_t) /* Coordonnees {u,v,w,t} dans [0,1]... */ #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. */ #define GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \ Bblock \ begin_nouveau_block \ Bblock \ begin_nouveau_block \ Bblock \ begin_nouveau_block \ Bblock \ /* Cette suite de 'Bblock's est destinee a ne pas changer la tabulation de ce qui suit... */ \ DEFV(Float,INIT(u_effectif,u)); \ DEFV(Float,INIT(d_u_effectif,d_u)); \ \ DEFV(Float,INIT(v_effectif,v)); \ DEFV(Float,INIT(d_v_effectif,d_v)); \ \ DEFV(Float,INIT(w_effectif,w)); \ DEFV(Float,INIT(d_w_effectif,d_w)); \ \ DEFV(Float,INIT(t_effectif,t)); \ DEFV(Float,INIT(d_t_effectif,d_t)); \ \ 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) \ ) \ ); \ EGAL(w_effectif \ ,COND(IL_NE_FAUT_PAS(gestion_torique_de_w) \ ,NEUT(w_effectif) \ ,MODF(w_effectif,minimum_de_w_effectif,maximum_de_w_effectif) \ ) \ ); \ EGAL(t_effectif \ ,COND(IL_NE_FAUT_PAS(gestion_torique_de_t) \ ,NEUT(t_effectif) \ ,MODF(t_effectif,minimum_de_t_effectif,maximum_de_t_effectif) \ ) \ ); \ \ Test(I4ET(IFINff(u_effectif,minimum_de_u_effectif,maximum_de_u_effectif) \ ,IFINff(v_effectif,minimum_de_v_effectif,maximum_de_v_effectif) \ ,IFINff(w_effectif,minimum_de_w_effectif,maximum_de_w_effectif) \ ,IFINff(t_effectif,minimum_de_t_effectif,maximum_de_t_effectif) \ ) \ ) \ Bblock \ Test(I5OU(I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \ ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \ ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w) \ ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t) \ ) \ ,I4ET(NON_DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \ ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \ ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w) \ ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t) \ ) \ ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \ ,NON_DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \ ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w) \ ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t) \ ) \ ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \ ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \ ,NON_DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w) \ ,DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t) \ ) \ ,I4ET(DIVISIBLE(echantillonnage_courant_de_u,echantillonnage_de_u) \ ,DIVISIBLE(echantillonnage_courant_de_v,echantillonnage_de_v) \ ,DIVISIBLE(echantillonnage_courant_de_w,echantillonnage_de_w) \ ,NON_DIVISIBLE(echantillonnage_courant_de_t,echantillonnage_de_t) \ ) \ ) \ ) \ Bblock \ EGAL(cx,Fx(u_effectif,v_effectif,w_effectif,t_effectif)); \ EGAL(cy,Fy(u_effectif,v_effectif,w_effectif,t_effectif)); \ EGAL(cz,Fz(u_effectif,v_effectif,w_effectif,t_effectif)); \ /* Generation du point courant de l'hyper-volume... */ \ \ BLOC(sequence_de_generation); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ end_nouveau_block \ Eblock \ end_nouveau_block \ Eblock \ end_nouveau_block \ Eblock #define index_definition_arbitraire \ index_de_definition_arbitraire_des_coordonnees_u_v_w_t \ /* Afin de raccourcir certaines des lignes qui suivent... */ #define gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME(Fx,Fy,Fz,calcul_eventuel_point_courant,sequence_de_generation) \ Bblock \ 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)); \ \ DEFV(Float,INIT(minimum_de_u_effectif,minimum_de_u)); \ DEFV(Float,INIT(maximum_de_u_effectif,maximum_de_u)); \ DEFV(Float,INIT(minimum_de_v_effectif,minimum_de_v)); \ DEFV(Float,INIT(maximum_de_v_effectif,maximum_de_v)); \ DEFV(Float,INIT(minimum_de_w_effectif,minimum_de_w)); \ DEFV(Float,INIT(maximum_de_w_effectif,maximum_de_w)); \ DEFV(Float,INIT(minimum_de_t_effectif,minimum_de_t)); \ DEFV(Float,INIT(maximum_de_t_effectif,maximum_de_t)); \ \ 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))); \ DEFV(Float,INIT(pas_de_w_effectif,DIVI(pas_de_w,diviseur_du_pas_de_w))); \ DEFV(Float,INIT(pas_de_t_effectif,DIVI(pas_de_t,diviseur_du_pas_de_t))); \ \ DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u)); \ /* Afin de gerer l'echantillonnage de 'u'. */ \ \ DEFV(Float,INIT(pas_u_de_differentiation,FLOT__UNDEF)); \ DEFV(Float,INIT(pas_v_de_differentiation,FLOT__UNDEF)); \ DEFV(Float,INIT(pas_w_de_differentiation,FLOT__UNDEF)); \ DEFV(Float,INIT(pas_t_de_differentiation,FLOT__UNDEF)); \ \ EGAL(pas_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_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 \ ) \ ); \ EGAL(pas_w_de_differentiation \ ,DIVI(COND(EST_VRAI(le_pas_de_w_de_differentiation_est_homothetique),pas_de_w_effectif,pas_de_w) \ ,diviseur_de_differentiation_de_w \ ) \ ); \ EGAL(pas_t_de_differentiation \ ,DIVI(COND(EST_VRAI(le_pas_de_t_de_differentiation_est_homothetique),pas_de_t_effectif,pas_de_t) \ ,diviseur_de_differentiation_de_t \ ) \ ); \ \ Test(IL_FAUT(definir_arbitrairement_les_coordonnees_u_v_w_t)) \ Bblock \ DEFV(Int,INIT(echantillonnage_courant_de_u,translation_de_l_echantillonnage_de_u)); \ DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v)); \ DEFV(Int,INIT(echantillonnage_courant_de_w,translation_de_l_echantillonnage_de_w)); \ DEFV(Int,INIT(echantillonnage_courant_de_t,translation_de_l_echantillonnage_de_t)); \ /* Ne servent qu'a permettre 'GENERATION_DU_POINT_uvwt_COURANT(...)' ci-apres... */ \ \ DEFV(Logical,INIT(recuperer_les_coordonnees_u_v_w_t,VRAI)); \ \ Tant(IL_FAUT(recuperer_les_coordonnees_u_v_w_t)) \ 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))); \ DEFV(Float,INIT(w,ELEMENT_DU_FICHIER_COORDONNEES_w(index_definition_arbitraire))); \ DEFV(Float,INIT(t,ELEMENT_DU_FICHIER_COORDONNEES_t(index_definition_arbitraire))); \ \ Test(I4ET(IFNE(u,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t) \ ,IFNE(v,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t) \ ,IFNE(w,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t) \ ,IFNE(t,separateur_de_definition_arbitraire_des_coordonnees_u_v_w_t) \ ) \ ) \ /* Test introduit le 20230217102703... */ \ 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) \ ) \ ) \ 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_DE_L_HYPER_VOLUME_AVEC_DIFFEREN...(...)' */ \ /* sont donc ici "oubliees"... */ \ \ EGAL(utiliser_les_differentielles_ROUGE_VERTE_BLEUE,VRAI); \ /* Afin de pouvoir definir {differentielle_x,differentielle_y,differentielle_z} */ \ /* dans 'GENER_HYPER_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 20240517140550... */ \ 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 20240519090812... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ \ GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz \ ,calcul_eventuel_point_courant \ ,sequence_de_generation \ ); \ Eblock \ ATes \ Bblock \ EGAL(recuperer_les_coordonnees_u_v_w_t,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_w_t,FAUX); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ETan \ Eblock \ ATes \ Bblock \ FDoIn(u,minimum_de_u_effectif,maximum_de_u_effectif,pas_de_u_effectif) \ Bblock \ DEFV(Int,INIT(echantillonnage_courant_de_v,translation_de_l_echantillonnage_de_v)); \ /* Afin de gerer l'echantillonnage de 'v'. */ \ \ FDoIn(v,minimum_de_v_effectif,maximum_de_v_effectif,pas_de_v_effectif) \ Bblock \ DEFV(Int,INIT(echantillonnage_courant_de_w,translation_de_l_echantillonnage_de_w)); \ /* Afin de gerer l'echantillonnage de 'w'. */ \ \ FDoIn(w,minimum_de_w_effectif,maximum_de_w_effectif,pas_de_w_effectif) \ Bblock \ DEFV(Int,INIT(echantillonnage_courant_de_t,translation_de_l_echantillonnage_de_t)); \ /* Afin de gerer l'echantillonnage de 't'. */ \ \ FDoIn(t,minimum_de_t_effectif,maximum_de_t_effectif,pas_de_t_effectif) \ Bblock \ GENERATION_DU_POINT_uvwt_COURANT(Fx,Fy,Fz \ ,calcul_eventuel_point_courant \ ,sequence_de_generation \ ); \ \ INCR(echantillonnage_courant_de_t,I); \ /* Gestion de l'echantillonnage de 't'. */ \ Eblock \ EFDoI \ \ INCR(echantillonnage_courant_de_w,I); \ /* Gestion de l'echantillonnage de 'w'. */ \ Eblock \ EFDoI \ \ INCR(echantillonnage_courant_de_v,I); \ /* Gestion de l'echantillonnage de 'v'. */ \ Eblock \ EFDoI \ \ INCR(echantillonnage_courant_de_u,I); \ /* Gestion de l'echantillonnage de 'u'. */ \ Eblock \ EFDoI \ Eblock \ ETes \ \ Eblock \ /* Calcul et visualisation generale de l'hyper-volume pour un instant donne. */ #define LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS \ Bblock \ Test(IFET(IL_FAUT(lister_la_liste_des_points) \ ,IL_FAUT(lister_les_coordonnees_u_v_w_t_des_points) \ ) \ ) \ 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) \ ) \ ) \ ) \ ) \ ) \ ) \ ) \ Bblock \ CAL2(Prin4(" U=%+.^^^ V=%+.^^^ W=%+.^^^ T=%+.^^^ " \ ,u_effectif \ ,v_effectif \ ,w_effectif \ ,t_effectif \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Listage des coordonnees {u,v,w,t} des points... */ #define GENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION(Fx,Fy,Fz,calcul_eventuel_point_courant) \ Bblock \ DEFV(Float,INIT(d_u,FLOT__UNDEF)); \ DEFV(Float,INIT(d_v,FLOT__UNDEF)); \ DEFV(Float,INIT(d_w,FLOT__UNDEF)); \ DEFV(Float,INIT(d_t,FLOT__UNDEF)); \ \ gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME \ (Fx,Fy,Fz \ ,calcul_eventuel_point_courant \ ,BLOC(Bblock \ 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; \ \ LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS; \ \ 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 l'hyper-volume pour un instant donne sans differentiation. */ #define GENER_HYPER_VOLUME_AVEC_DIFFERENCES____(Fx,Fy,Fz,calcul_eventuel_point_courant) \ Bblock \ DEFV(Float,INIT(d_u,FLOT__UNDEF)); \ DEFV(Float,INIT(d_v,FLOT__UNDEF)); \ DEFV(Float,INIT(d_w,FLOT__UNDEF)); \ DEFV(Float,INIT(d_t,FLOT__UNDEF)); \ \ gGENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME \ (Fx,Fy,Fz \ ,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. */ \ \ Test(IL_FAUT(utiliser_les_differentielles_ROUGE_VERTE_BLEUE)) \ 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 \ ,DERIVATION_PARTIELLE(Fx(SOUS(u_effectif,MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation)) \ ,SOUS(v_effectif,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation)) \ ,SOUS(w_effectif,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation)) \ ,SOUS(t_effectif,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,Fx(ADD2(u_effectif,MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation)) \ ,ADD2(v_effectif,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation)) \ ,ADD2(w_effectif,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation)) \ ,ADD2(t_effectif,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,DOUB(GpytF4D(MUL2(facteur_x_de_pas_de_u,pas_u_de_differentiation) \ ,MUL2(facteur_x_de_pas_de_v,pas_v_de_differentiation) \ ,MUL2(facteur_x_de_pas_de_w,pas_w_de_differentiation) \ ,MUL2(facteur_x_de_pas_de_t,pas_t_de_differentiation) \ ) \ ) \ ) \ ); \ EGAL(differentielle_y \ ,DERIVATION_PARTIELLE(Fy(SOUS(u_effectif,MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation)) \ ,SOUS(v_effectif,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation)) \ ,SOUS(w_effectif,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation)) \ ,SOUS(t_effectif,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,Fy(ADD2(u_effectif,MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation)) \ ,ADD2(v_effectif,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation)) \ ,ADD2(w_effectif,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation)) \ ,ADD2(t_effectif,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,DOUB(GpytF4D(MUL2(facteur_y_de_pas_de_u,pas_u_de_differentiation) \ ,MUL2(facteur_y_de_pas_de_v,pas_v_de_differentiation) \ ,MUL2(facteur_y_de_pas_de_w,pas_w_de_differentiation) \ ,MUL2(facteur_y_de_pas_de_t,pas_t_de_differentiation) \ ) \ ) \ ) \ ); \ EGAL(differentielle_z \ ,DERIVATION_PARTIELLE(Fz(SOUS(u_effectif,MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation)) \ ,SOUS(v_effectif,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation)) \ ,SOUS(w_effectif,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation)) \ ,SOUS(t_effectif,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,Fz(ADD2(u_effectif,MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation)) \ ,ADD2(v_effectif,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation)) \ ,ADD2(w_effectif,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation)) \ ,ADD2(t_effectif,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation)) \ ) \ ,DOUB(GpytF4D(MUL2(facteur_z_de_pas_de_u,pas_u_de_differentiation) \ ,MUL2(facteur_z_de_pas_de_v,pas_v_de_differentiation) \ ,MUL2(facteur_z_de_pas_de_w,pas_w_de_differentiation) \ ,MUL2(facteur_z_de_pas_de_t,pas_t_de_differentiation) \ ) \ ) \ ) \ ); \ Eblock \ ETes \ \ EGAL(dcx \ ,LIZ10(ponderation_de__x_____dans_dx,cx \ ,ponderation_de__y_____dans_dx,cy \ ,ponderation_de__z_____dans_dx,cz \ ,ponderation_de__u_____dans_dx,u \ ,ponderation_de__v_____dans_dx,v \ ,ponderation_de__w_____dans_dx,w \ ,ponderation_de__t_____dans_dx,t \ ,ponderation_de_dx_____dans_dx,differentielle_x \ ,ponderation_de_dy_____dans_dx,differentielle_y \ ,ponderation_de_dz_____dans_dx,differentielle_z \ ) \ ); \ EGAL(dcy \ ,LIZ10(ponderation_de__x_____dans_dy,cx \ ,ponderation_de__y_____dans_dy,cy \ ,ponderation_de__z_____dans_dy,cz \ ,ponderation_de__u_____dans_dy,u \ ,ponderation_de__v_____dans_dy,v \ ,ponderation_de__w_____dans_dy,w \ ,ponderation_de__t_____dans_dy,t \ ,ponderation_de_dx_____dans_dy,differentielle_x \ ,ponderation_de_dy_____dans_dy,differentielle_y \ ,ponderation_de_dz_____dans_dy,differentielle_z \ ) \ ); \ EGAL(dcz \ ,LIZ10(ponderation_de__x_____dans_dz,cx \ ,ponderation_de__y_____dans_dz,cy \ ,ponderation_de__z_____dans_dz,cz \ ,ponderation_de__u_____dans_dz,u \ ,ponderation_de__v_____dans_dz,v \ ,ponderation_de__w_____dans_dz,w \ ,ponderation_de__t_____dans_dz,t \ ,ponderation_de_dx_____dans_dz,differentielle_x \ ,ponderation_de_dy_____dans_dz,differentielle_y \ ,ponderation_de_dz_____dans_dz,differentielle_z \ ) \ ); \ /* Calcul des couleurs utiles... */ \ \ 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; \ \ LISTER_EVENTUELLEMENT_LES_COORDONNEES_u_v_w_t_DES_POINTS; \ \ 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 l'hyper-volume pour un instant donne avec differentiation */ \ /* numerique. */ #define VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(calcul_des_parametres,calcul_de_l_hyper_volume,Fx,Fy,Fz,Pxyz) \ Bblock \ 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) \ 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_l_hyper_volume); \ /* Calcul de l'hyper-volume proprement dit... */ \ \ GENERATION_D_UNE_IMAGE_ET_PASSAGE_A_LA_SUIVANTE(BLOC(VIDE;)); \ /* Generation de l'image courante... */ \ \ INCREMENTATION_DE_L_HORLOGE(dct); \ Eblock \ EKom \ \ EDITION_DES_EXTREMA_DES_COORDONNEES_ET_DES_DERIVEES; \ /* Edition facultative des extrema des coordonnees. */ \ Eblock \ /* Calcul et visualisation de l'hyper-volume avec evolution temporelle... */ #define VISUALISATION_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc) \ Bblock \ VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(BLOC(calcul_des_parametres) \ ,BLOC(Bblock \ GENERATION_D_UNE_IMAGE_DE_L_HYPER_VOLUME_SANS_DIFFERENTIATION \ (Fx,Fy,Fz \ ,BLOC(calcul_pc) \ ); \ Eblock \ ) \ ,Fx,Fy,Fz \ ,Pxyz \ ); \ Eblock \ /* Calcul sans differentiation et visualisation de l'hyper-volume avec evolution temporelle. */ #define VISUALISATION_DE_L_HYPER_VOLUME_AVEC_DIFFERENCES____(calcul_des_parametres,Fx,Fy,Fz,Pxyz,calcul_pc) \ Bblock \ VISUALISATION_GENERALE_DE_L_HYPER_VOLUME(BLOC(calcul_des_parametres) \ ,BLOC(Bblock \ GENER_HYPER_VOLUME_AVEC_DIFFERENCES____(Fx,Fy,Fz \ ,BLOC(calcul_pc) \ ); \ Eblock \ ) \ ,Fx,Fy,Fz \ ,Pxyz \ ); \ Eblock \ /* Calcul avec differentiation et visualisation de l'hyper-volume avec evolution temporelle. */