####################################################################################################################################### # # # 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 }