#######################################################################################################################################
# #
# I N T E R P O L A T I O N E N T R E D E U X S U R F A C E S #
# P A R L A M E T H O D E D E S P R O J E C T O R S : #
# #
# #
# Author of '$xiirs/.PROJ.91.1.$U' : #
# #
# Jean-Francois Colonna (LACTAMME, 20051004091955). #
# #
#######################################################################################################################################
$Z setParam _____Normalise $EXIST
$Z # Introduit le 20061005132747... #
$Z setParam _____Parametres_1 "$K_VIDE"
$Z # Introduit le 20060616141540... #
$Z setParam _____Normalise_1 $EXIST
$Z # Introduit le 20061005105105... #
$Z setParam _____Parametres_2 "$K_VIDE"
$Z # Introduit le 20060616141540... #
$Z setParam _____Normalise_2 $EXIST
$Z # Introduit le 20061005105105... #
$Z setParam _____Renverser_X_1 `GetParam $xci/interpole.01$X renverser_OX_A1`
$Z # Introduit le 20061005105105... #
$Z setParam _____Renverser_Y_1 `GetParam $xci/interpole.01$X renverser_OY_A1`
$Z # Introduit le 20061005105105... #
$Z setParam _____Renverser_X_2 `GetParam $xci/interpole.01$X renverser_OX_A2`
$Z # Introduit le 20061005105105... #
$Z setParam _____Renverser_Y_2 `GetParam $xci/interpole.01$X renverser_OY_A2`
$Z # Introduit le 20061005105105... #
$Z setParam _____Ppu 0.02
$Z setParam _____Ppv 0.02
$Z setParam _____Peu 20
$Z setParam _____Pev 20
$Z setParam _____Pdpu 40
$Z setParam _____Pdpv 40
$Z setParam _____dxyzFxyz "$K_VIDE"
$Z setParam _____Zoom 0.8
$Z SETParam _____ZoomD 0
$Z # Introduit le 20120712103935 afin de pouvoir interpoler le facteur de zoom (et ce pour #
$Z # 'v $xias/PROJ.v1$R16' initialement...). #
$Z SETParam _____ZoomA 0
$Z # Introduit le 20120712103935 afin de pouvoir interpoler le facteur de zoom (et ce pour #
$Z # 'v $xias/PROJ.v1$R16' initialement...). #
$Z setParam _____RotationX 0
$Z setParam _____RotationY 0
$Z setParam _____RotationZ 0
$Z setParam _____Edv FAUX
$Z # Introduit le 20060926141303 afin de pouvoir disposer de couleurs plus vives... #
$Z setParam _____Rayon 0.012
$Z setParam _____Periodiser_u VRAI
$Z setParam _____Symetriser_u FAUX
$Z setParam _____Prolonger_u FAUX
$Z setParam _____Periodiser_v VRAI
$Z setParam _____Symetriser_v FAUX
$Z setParam _____Prolonger_v FAUX
$Z setParam _____Parametres "$K_VIDE"
$Z # Introduit le 20060616114648... #
#20090609152848____:$Z Pal #
$Z SET SuRfAcE1=$xTV/SURFACE.1
$Z SET SuRfAcE2=$xTV/SURFACE.2
$Z SET SuRfAcE3=$xTV/SURFACE.3
$Z if ($?_____ImageT == $EXIST) then
$Z # Validation introduite le 20090628181717... #
$Z if (($_____ImageT != $SuRfAcE1) && ($_____ImageT != $SuRfAcE2)) then
$Z EROR "La definition de '"'$_____ImageT'"' est mauvaise : \c"
$Z echo "elle ne vaut ni '$SuRfAcE1' ni '$SuRfAcE2', \c"
$Z echo "mais '$_____ImageT'."
$Z else
$Z endif
$Z else
$Z endif
$Z if ($?_____Surface_1 == $EXIST) then
$Z $xrs/project2D.01$Z \
$Z $_____Surface_1 \
$Z $SuRfAcE1 \
$Z "$_____Parametres_1" \
$Z "$K_VIDE" "$K_VIDE" "$K_VIDE" "$K_VIDE" \
$Z $_____Normalise_1
$Z # Projection de la premiere surface argument... #
$Z else
$Z # Si '$_____Surface_1' n'existe pas, on suppose la pre-existence de '$SuRfAcE1'. Ceci #
$Z # fut introduit le 20090609151938 pour 'v $xias/PROJ.c1$R16'... #
$Z endif
$Z if ($?_____Surface_2 == $EXIST) then
$Z $xrs/project2D.01$Z \
$Z $_____Surface_2 \
$Z $SuRfAcE2 \
$Z "$_____Parametres_2" \
$Z "$K_VIDE" "$K_VIDE" "$K_VIDE" "$K_VIDE" \
$Z $_____Normalise_2
$Z # Projection de la deuxieme surface argument... #
$Z else
$Z # Si '$_____Surface_2' n'existe pas, on suppose la pre-existence de '$SuRfAcE2'. Ceci #
$Z # fut introduit le 20090609151938 pour 'v $xias/PROJ.c1$R16'... #
$Z endif
$Z if ((-e $SuRfAcE1$COORD_X) && (-e $SuRfAcE1$COORD_Y) && (-e $SuRfAcE1$COORD_Z)) then
$Z # Test introduit le 20090628145610 afin de permettre des "auto-interpolations" relatives a #
$Z # une seule et unique surface... #
$Z else
$Z $xci/neutre$X \
$Z A=$SuRfAcE2$COORD_X \
$Z standard=FAUX \
$Z R=$SuRfAcE1$COORD_Y \
$Z $formatI
$Z $xci/neutre$X \
$Z A=$SuRfAcE2$COORD_Y \
$Z standard=FAUX \
$Z R=$SuRfAcE1$COORD_Z \
$Z $formatI
$Z $xci/neutre$X \
$Z A=$SuRfAcE2$COORD_Z \
$Z standard=FAUX \
$Z R=$SuRfAcE1$COORD_X \
$Z $formatI
$Z # Ainsi, on va pouvoir interpoler entre composantes differentes : #
$Z # #
$Z # alpha.X + beta.Y --> X #
$Z # alpha.Y + beta.Z --> Y #
$Z # alpha.Z + beta.X --> Z #
$Z # #
$Z endif
$Z if ((-e $SuRfAcE2$COORD_X) && (-e $SuRfAcE2$COORD_Y) && (-e $SuRfAcE2$COORD_Z)) then
$Z # Test introduit le 20090628145610 afin de permettre des "auto-interpolations" relatives a #
$Z # une seule et unique surface... #
$Z else
$Z $xci/neutre$X \
$Z A=$SuRfAcE1$COORD_X \
$Z standard=FAUX \
$Z R=$SuRfAcE2$COORD_Y \
$Z $formatI
$Z $xci/neutre$X \
$Z A=$SuRfAcE1$COORD_Y \
$Z standard=FAUX \
$Z R=$SuRfAcE2$COORD_Z \
$Z $formatI
$Z $xci/neutre$X \
$Z A=$SuRfAcE1$COORD_Z \
$Z standard=FAUX \
$Z R=$SuRfAcE2$COORD_X \
$Z $formatI
$Z # Ainsi, on va pouvoir interpoler entre composantes differentes : #
$Z # #
$Z # alpha.X + beta.Y --> X #
$Z # alpha.Y + beta.Z --> Y #
$Z # alpha.Z + beta.X --> Z #
$Z # #
$Z endif
$Z set Parametres="$K_VIDE"
$Z set Parametres="$Parametres"" np=1"
$Z set Parametres="$Parametres"" brume=FAUX"
$Z set Parametres="$Parametres"" mu=0 Mu=1.0"
$Z set Parametres="$Parametres"" mv=0 Mv=1.0"
$Z set Parametres="$Parametres"" pu=$_____Ppu pv=$_____Ppv"
$Z set Parametres="$Parametres"" eu=$_____Peu ev=$_____Pev"
$Z set Parametres="$Parametres"" dpu=$_____Pdpu dpv=$_____Pdpv"
$Z set Parametres="$Parametres"" Fx_per_u=$_____Periodiser_u Fy_per_u=$_____Periodiser_u Fz_per_u=$_____Periodiser_u"
$Z set Parametres="$Parametres"" Fx_sym_u=$_____Symetriser_u Fy_sym_u=$_____Symetriser_u Fz_sym_u=$_____Symetriser_u"
$Z set Parametres="$Parametres"" Fx_pro_u=$_____Prolonger_u Fy_pro_u=$_____Prolonger_u Fz_pro_u=$_____Prolonger_u"
$Z set Parametres="$Parametres"" Fx_per_v=$_____Periodiser_v Fy_per_v=$_____Periodiser_v Fz_per_v=$_____Periodiser_v"
$Z set Parametres="$Parametres"" Fx_sym_v=$_____Symetriser_v Fy_sym_v=$_____Symetriser_v Fz_sym_v=$_____Symetriser_v"
$Z set Parametres="$Parametres"" Fx_pro_v=$_____Prolonger_v Fy_pro_v=$_____Prolonger_v Fz_pro_v=$_____Prolonger_v"
$Z set Parametres="$Parametres"" bilineaire=VRAI"
$Z set Parametres="$Parametres"" $_____dxyzFxyz"
$Z set Parametres="$Parametres"" ddu=0.01 ddv=0.01"
$Z # On notera le 20120721080855 que les valeurs par defaut et celles qui definissent #
$Z # explicitement 'v $xias/PROJ.x1$R16' : #
$Z # #
$Z # set _____Ppu=0.08 ==> "pu=0.08" #
$Z # set _____Ppv=0.08 ==> "pv=0.08" #
$Z # #
$Z # set _____Pdpu=40 ==> "dpu=40" #
$Z # set _____Pdpv=40 ==> "dpv=40" #
$Z # #
$Z # et : #
$Z # #
$Z # ddu=0.01 ddv=0.01 #
$Z # #
$Z # donnent : #
$Z # #
$Z # pas_de_u_effectif=0.002 = pu/dpu = 0.08/40 #
$Z # pas_de_v_effectif=0.002 = pv/dpv = 0.08/40 #
$Z # #
$Z # pas_de_u_de_differentiation=0.20 = (pu/dpu)/ddu = (0.08/40)/0.01 #
$Z # pas_de_v_de_differentiation=0.20 = (pv/dpv)/ddv = (0.08/40)/0.01 #
$Z # #
$Z # dans 'v $xrs/surfaces.12$I pas_de_._de_differentiation'. Cette valeur 0.20 correspond a #
$Z # 1/5 de l'unite et explique donc les bandes de largeur 1/5 qui apparaissent autour du #
$Z # rectangle de depart de 'v $xias/PROJ.x1$R16'... #
$Z set Parametres="$Parametres"" ZOOM=$_____Zoom"
$Z set Parametres="$Parametres"" ROTATION_OX=$_____RotationX"
$Z set Parametres="$Parametres"" ROTATION_OY=$_____RotationY"
$Z set Parametres="$Parametres"" ROTATION_OZ=$_____RotationZ"
$Z set Parametres="$Parametres"" Lz=100"
$Z set Parametres="$Parametres"" extrema_differentielles_veritables=$_____Edv"
$Z set Parametres="$Parametres"" rayon_de_visualisation=$_____Rayon"
$Z set Parametres="$Parametres"" N_AU_CARRE=VRAI"
$Z set Parametres="$Parametres"" $_____Parametres"
$Z set GrIs_4=`calcul $GRIS_4+1`
$Z # Introduit le 20120706092845. La valeur '$GRIS_4+1' (soit 128) a ete choisi, meme si cela #
$Z # a peu d'importance, par compatibilite avec le fait qu'une image flottante dans [-1,+1] #
$Z # convertie ensuite en "standard=VRAI" a son zero (0.0) associe a la valeur 128... #
$Z SET Premiere=1
$Z SET Derniere=64
#20090609153806____:$Z Pal #
$c #include <stdio.h>
$c
$c #define N0 Premiere
$c #define N Derniere
$c
$c #define Olambda 0.0
$c #define Elambda 1.0
$c
$c #define ZoomD (double)(_____ZoomD)
$c #define ZoomA (double)(_____ZoomA)
$c
$c int main()
$c {
$c int n;
$c
$c for (n=N0 ; n<=N ; n++)
$c {
$c double lambda=((Elambda*(n-N0))+(Olambda*(N-n)))/(N-N0);
$c double Zoom=((ZoomA*(n-N0))+(ZoomD*(N-n)))/(N-N0);
$c
$c printf("eval `$xci/genere$X
$c commande='($xci/interpole.01$X
$c standard=FAUX
$c alpha=%f
$c renverser_OX_A1=$_____Renverser_X_1
$c renverser_OY_A1=$_____Renverser_Y_1
$c A1=$SuRfAcE1%%s
$c beta=%f
$c renverser_OX_A2=$_____Renverser_X_2
$c renverser_OY_A2=$_____Renverser_Y_2
$c A2=$SuRfAcE2%%s
$c R=$SuRfAcE3%%s
$c $formatI)'
$c en_tete=FAUX RVB=VRAI XYZ=VRAI separateur=VRAI`\n"
$c ,1-lambda,lambda
$c );
$c /* Interpolation entre les deux surfaces... */
$c /* */
$c /* Le 20060926134603, je note qu'aux environs de alpha=beta (=0.5), il semblerait qu'il y */
$c /* ait une discontinuite comme on croit le voir, par exemple, sur : */
$c /* */
$c /* $xci/display$X A=$xias/PROJ.T1$COORD_Y$R16 p=$xiP/cercle.35 $formatI */
$c /* */
$c /* ou les 16 images du bas semblent tres differentes des 16 images du haut. En fait, il */
$c /* s'agit d'une "illusion" comme : */
$c /* */
$c /* $xci/display$X A=$xias/PROJ.T1$COORD_Y$R64 p=$xiP/cercle.35 $formatI */
$c /* */
$c /* le montre. Le phenomene vient du fait que la variation semble beaucoup plus rapide sur */
$c /* les deux bandes centrales d'images, ce qui donne l'illusion, lorsque l'on regarde moins */
$c /* d'images (voir '$R16' au lieu de '$R64'), d'une discontinuite. Au passage, cela se voit */
$c /* aussi sur les autres images faisant intervenir 'v $xrs/bKlein.41$K'... */
$c /* */
$c /* Le 20120706183943 fut introduit la possibilite de symetriser les axes 'OX' et/ou 'OY' */
$c /* pour les deux images 'A1' et 'A2' individuellement... */
$c printf("if ($_____Normalise == $EXIST) then\n");
$c printf(" eval `$xci/genere$X
$c commande='($xci/normalise.01$X
$c A=$SuRfAcE3%%s
$c origine=-1 extremite=1
$c R=$SuRfAcE3%%s.%04d
$c $formatI)'
$c en_tete=FAUX RVB=VRAI XYZ=VRAI separateur=VRAI`\n"
$c ,n
$c );
$c printf("else\n");
$c printf(" eval `$xci/genere$X
$c commande='($xci/neutre$X
$c standard=FAUX
$c A=$SuRfAcE3%%s
$c R=$SuRfAcE3%%s.%04d
$c $formatI)'
$c en_tete=FAUX RVB=VRAI XYZ=VRAI separateur=VRAI`\n"
$c ,n
$c );
$c printf("endif\n");
$c printf("$xci/neutre$X
$c A=$SuRfAcE3$COORD_X.%04d
$c standard=FAUX
$c R=$xTV/Fx
$c $formatI\n"
$c ,n
$c );
$c printf("$xci/neutre$X
$c A=$SuRfAcE3$COORD_Y.%04d
$c standard=FAUX
$c R=$xTV/Fy
$c $formatI\n"
$c ,n
$c );
$c printf("$xci/neutre$X
$c A=$SuRfAcE3$COORD_Z.%04d
$c standard=FAUX
$c R=$xTV/Fz
$c $formatI\n"
$c ,n
$c );
$c printf("$xci/acces$X
$c A=$xTV/Fx
$c standard=FAUX
$c zero=FAUX
$c message_extrema=FAUX
$c niveau_extrema_egaux=$GrIs_4
$c R=$_____imagesR1$COORD_X.%04d
$c $formatI\n"
$c ,n
$c );
$c printf("$xci/acces$X
$c A=$xTV/Fy
$c standard=FAUX
$c zero=FAUX
$c message_extrema=FAUX
$c niveau_extrema_egaux=$GrIs_4
$c R=$_____imagesR1$COORD_Y.%04d
$c $formatI\n"
$c ,n
$c );
$c printf("$xci/acces$X
$c A=$xTV/Fz
$c standard=FAUX
$c zero=FAUX
$c message_extrema=FAUX
$c niveau_extrema_egaux=$GrIs_4
$c R=$_____imagesR1$COORD_Z.%04d
$c $formatI\n"
$c ,n
$c );
$c /* Le 20120706092845 furent introduits "message_extrema=" et "niveau_extrema_egaux=", */
$c /* la valeur '$GrIs_4' ayant choisi pour 'v $xias/PROJ.u1$COORD_Z$R16 p=$xiP/cercle.35' */
$c /* afin que le "zero" n'apparaisse par NOIR... */
$c if (Zoom != 0)
$c {
$c printf("set ParametresZ=%c ZOOM=%f%c\n",'"',Zoom,'"');
$c /* Cas ou le facteur de zoom doit etre interpole (introduit le 20120712103935). */
$c }
$c else
$c {
$c printf("set ParametresZ=%c$K_VIDE%c\n",'"','"');
$c /* Cas ou le facteur de zoom ne doit pas etre interpole : on conserve le fonctionnement */
$c /* anterieur au 20120712103935... */
$c }
$c printf("$xrs/project2D.11$X
$c aFx=1.0 Fx=$xTV/Fx
$c aFy=1.0 Fy=$xTV/Fy
$c aFz=1.0 Fz=$xTV/Fz
$c $Parametres
$c $ParametresZ
$c R=$_____imagesR2.%04d
$c chiffres=0
$c $formatI\n"
$c ,n
$c );
$c }
$c }