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



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.