#######################################################################################################################################
#                                                                                                                                     #
#         T R A C E   D ' U N   N O E U D   S U R   U N E   S U R F A C E   D O N N E E                                               #
#         A V E C   R U B A N   D E   M O B I U S  :                                                                                  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xiirv/.KNOT.61.1.$U' :                                                                                          #
#                                                                                                                                     #
#                     Jean-Francois COLONNA (LACTAMME, 20120516114142).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

$Z                  setParam            _____Aduv                     +1

$Z                  setParam            _____Bduv                     -1

$Z                  setParam            _____Cduv                     0

$Z                  setParam            _____PasMobius                8

$Z                  setParam            _____NombreTours              2
$Z                                      # Argument introduit le 20120517115551...                                                     #

$Z                  setParam            _____AjustCouleurs            `GetParam $xrv/particule.10$X ajuster_couleurs`
$Z                                      # Argument introduit le 20120518165728 pour 'v $xiirs/BKLN.D5'. Evidemment, lorsqu'il est     #
$Z                                      # utilise, il est conseille de faire :                                                        #
$Z                                      #                                                                                             #
$Z                                      #                   set       _____TranslationRVB=0                                           #
$Z                                      #                                                                                             #

$Z                  setParam            _____AjustCouleursH `GetParam $xrv/particule.10$X ajuster_couleurs_independamment_homothetie`
$Z                                      # Argument introduit le 20120518171011 pour 'v $xiirs/BKLN.D5'.                               #

$Z                  setParam            _____AjustCouleursT `GetParam $xrv/particule.10$X ajuster_couleurs_independamment_translation`
$Z                                      # Argument introduit le 20120518171011 pour 'v $xiirs/BKLN.D5'.                               #

$Z                  setParam            _____TranslationRVB           150
$Z                                      # Argument introduit le 20120516161807. Une meme valeur est choisie pour les trois            #
$Z                                      # composantes car, en effet, le squelette du tore etant en Noir et Blanc, il faut que         #
$Z                                      # ses trois composantes soient translatees de la meme facon...                                #

$Z                  setParam            _____DepthCueing              `GetParam $xrv/particule.10$X ZminimumT`
$Z                                      # Argument introduit le 20120516170254...                                                     #

$Z                  setParam            _____RotationOX               0.0

$Z                  setParam            _____RotationOY               0.0

$Z                  setParam            _____RotationOZ               0.0

$Z                  setParam            _____Points                   32

$Z                  setParam            _____Zoom                     1

$Z                  setParam            _____NombreR                  1

$Z                  setParam            _____Cubique                  FAUX

$Z                  setParam            _____DeriveeX                 0

$Z                  setParam            _____DeriveeY                 0

$Z                  setParam            _____DeriveeZ                 0

$Z                  setParam            _____ParticulePara1           "$K_VIDE"

$Z                  set       N_Au_CaRrE=VRAI
$Z                                      # Pour simplifier l'acceleration temporaires du processus lors de tests de mise au point      #
$Z                                      # des parametres...                                                                           #

$Z                  if        ($?_____SurfaceA == $EXIST) then

$Z                            set       SurfaceEffective=$_____SurfaceA

$Z                            if        (! -e $SurfaceEffective) then
$Z                                      set       SurfaceEffective=$xrs/$SurfaceEffective

$Z                                      if        (! -e $SurfaceEffective) then
$Z                                                set       SurfaceEffective=$SurfaceEffective$X
$Z                                      else
$Z                                      endif
$Z                            else
$Z                            endif

$Z                  setParam            _____Pu                       0.5

$Z                  setParam            _____Pv                       0.5

$Z                  setParam            _____SurfaceParam1            "$K_VIDE"

$Z                  setParam            _____SurfaceParam2            "$K_VIDE"

$Z                  setParam            _____SurfaceParam12           "$K_VIDE"

$Z                  setParam            _____RVB0                     -0.2
$Z                                      # Valeur du niveau de gris normalise a donner au squelette du tore. La valeur negative est    #
$Z                                      # justifiee par le fait que les niveaux de couleur du noeud et du Ruban de Mobsuis seront     #
$Z                                      # dans :                                                                                      #
$Z                                      #                                                                                             #
$Z                                      #                   ROUGE E [-348,+348]                                                       #
$Z                                      #                   VERTE E [-262,+382]                                                       #
$Z                                      #                   BLEUE E [-127,+127]                                                       #
$Z                                      #                                                                                             #

$Z                  setParam            _____RayonSurface             0.015

$Z                  setParam            _____RayonDroite              0.050

$Z                  setParam            _____RapportRayon             2
$Z                                      # Argument introduit le 20120518180723...                                                     #

$Z                            FileTmpB            FiLeTmP_TORE

$Z                            $SurfaceEffective                                                                                         \
$Z                                                np=1                                                                                  \
$Z                                                pu=$_____Pu pv=$_____Pv                                                               \
$Z                                                eu=40       ev=40                                                                     \
$Z                                                dpu=80      dpv=80                                                                    \
$Z                                                maillage_uv=VRAI droite_uv=FAUX                                                       \
$Z                                                lister_les_points=VRAI lister_les_points_apres=VRAI                                   \
$Z                                                TZliste=0.5                                                                           \
$Z                                                carree=VRAI petit_carre=FAUX                                                          \
$Z                                                RVB=FAUX RVB0=$_____RVB0                                                              \
$Z                                                Lz=1000                                                                               \
$Z                                                rayon_de_visualisation=$_____RayonSurface                                             \
$Z                                                N_AU_CARRE=FAUX                                                                       \
$Z                                                edc=VRAI                                                                              \
$Z                                                extrema_hors=FAUX                                                                     \
$Z                                                $_____SurfaceParam1                                                                   \
$Z                                                $_____SurfaceParam12                                                                  \
$Z                                                R=$xTV/SURFACE.m chiffres=0                                                           \
$Z                                                                                                                      $formatI  |     \
$Z                            $GRE                -v '^ *$'                                                                             \
$Z                                                                                                  >>! $FiLeTmP_TORE.1
$Z                                      # Definition du maillage de la surface...                                                     #

$Z                            $SurfaceEffective                                                                                         \
$Z                                                np=1                                                                                  \
$Z                                                pu=$_____Pu pv=$_____Pv                                                               \
$Z                                                eu=40       ev=40                                                                     \
$Z                                                dpu=80      dpv=80                                                                    \
$Z                                                maillage_uv=FAUX droite_uv=VRAI                                                       \
$Z                                                tracer_une_droite_du_plan_uv_____compatibilite_20170130=VRAI                          \
$Z                                                Aduv=$_____Aduv Bduv=$_____Bduv Cduv=$_____Cduv                                       \
$Z                                                lister_les_points=VRAI lister_les_points_apres=VRAI                                   \
$Z                                                TZliste=0.5                                                                           \
$Z                                                carree=VRAI petit_carre=FAUX                                                          \
$Z                                                RVB=VRAI                                                                              \
$Z                                                Lz=1000                                                                               \
$Z                                                rayon_de_visualisation=$_____RayonDroite                                              \
$Z                                                N_AU_CARRE=FAUX                                                                       \
$Z                                                edc=VRAI                                                                              \
$Z                                                extrema_hors=FAUX                                                                     \
$Z                                                $_____SurfaceParam2                                                                   \
$Z                                                $_____SurfaceParam12                                                                  \
$Z                                                R=$xTV/SURFACE.d chiffres=0                                                           \
$Z                                                                                                                      $formatI  |     \
$Z                            $GRE                -v '^ *$'                                                                             \
$Z                                                                                                  >>! $FiLeTmP_TORE.2
$Z                                      # Definition d'une droite de la surface...                                                    #
$Z                                      #                                                                                             #
$Z                                      # Le 20220518094154, "tracer_une_droite_du_plan_uv_____compatibilite_20170130=VRAI" a ete     #
$Z                                      # introduit car, en effet, il avait ete oublie il y a bien longtemps. Au passage, je crois    #
$Z                                      # que celui qui figure dans le premier appel a '$SurfaceEffective' est inutile, je le         #
$Z                                      # supprime donc...                                                                            #

$Z                            set       SePaRaTeUr="@"

$Z                            $CA       $FiLeTmP_TORE.1                                                                           |     \
$Z                            $SE       -e 's/^\(.*\)$'"/\1$SePaRaTeUr\1/"                                                        |     \
$Z                            $R        "$SePaRaTeUr" "$K_NL"                                                                           \
$Z                                                                                                  >>! $FiLeTmP_TORE.1.double

$Z                            set       ArGs="ne=0 fichier=="

$Z                            set  MinR=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* ROUGE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z                            set  MinV=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* VERTE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z                            set  MinB=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* BLEUE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs ms=VRAI`
$Z                                      # Notons que les minima ne servent que pour '$EditerRVB'...                                   #

$Z                            set  MaxR=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* ROUGE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`
$Z                            set  MaxV=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* VERTE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`
$Z                            set  MaxB=`$CA $FiLeTmP_TORE.2 | $SE -e 's/^.* BLEUE=\([^ ]*\).*$/\1/' | $xrv/extrema.01$X $ArGs Ms=VRAI`

$Z                            if        ($?EditerRVB == $EXIST) then
$Z                                      # Test introduit le 20120518143837 pour faciliter l'ajustement des deux parametres            #
$Z                                      # '$_____RVB0' et '$_____TranslationRVB'...                                                   #
$Z                                      echo      "MaillageNiveauGris="`calcul $_____RVB0*$BLANC`
$Z                                      saut      1
$Z                                      echo      "RubanMinimum(ROUGE)=$MinR"
$Z                                      echo      "RubanMinimum(VERTE)=$MinV"
$Z                                      echo      "RubanMinimum(BLEUE)=$MinB"
$Z                                      saut      1
$Z                                      echo      "RubanMaximum(ROUGE)=$MaxR"
$Z                                      echo      "RubanMaximum(VERTE)=$MaxV"
$Z                                      echo      "RubanMaximum(BLEUE)=$MaxB"
$Z                            else
$Z                            endif

$Z                            set  MaxRVB=`$xcg/MAX3.01$X a=$MaxR b=$MaxV c=$MaxB`

$Z                            $CA       $FiLeTmP_TORE.2                                                                           |     \
$Z                            $SE       -e 's/^\(.*\)$'"/\1$SePaRaTeUr\1/"                                                        |     \
$Z                            $R        "$SePaRaTeUr" "$K_NL"                                                                     |     \
$Z                            $SE       -e "s/\( ROUGE=\)[^ ]*\( \)/\1$MaxRVB\2/"                                                       \
$Z                                      -e "s/\( VERTE=\)[^ ]*\( \)/\1$MaxRVB\2/"                                                       \
$Z                                      -e "s/\( BLEUE=\)[^ ]*\( \)/\1$MaxRVB\2/"                                                       \
$Z                                                                                                  >>! $FiLeTmP_TORE.2.double
$Z                                      # Ainsi le noeud apparaitra Blanc...                                                          #

$Z                            UnSurN    $FiLeTmP_TORE.2 1 $_____PasMobius $FiLeTmP_TORE.3
$Z                                      # Generation des points extremes des segments composants le Ruban de Mobius.                  #

$Z                            set       NMobius=`$CA $FiLeTmP_TORE.3 | $WCl`
$Z                            @         NMobius = $NMobius / $_____NombreTours
$Z                                      # Le noeud est en fait parcouru deux fois, d'ou la division par 2 afin de ne le parcourir     #
$Z                                      # qu'une seule fois...                                                                        #

$Z                            @         NMobius11 = 1

$Z                            @         PaRiTe = $NMobius % 2

$Z                            if        ($PaRiTe != 0) then
$Z                                      # Test introduit le 20220518112545 lors du recalcul de 'v $xiirv/KNOT.61.5.1' (voir a ce      #
$Z                                      # propos 'v $xiirv/$Fnota 20220518111523'...                                                  #
$Z                                      EROR      "Le parametre $K_DOLLAR""NMobius (=$NMobius) n'est pas divisible par 2."
$Z                            else
$Z                            endif

$Z                            @         NMobius12 = $NMobius / 2
$Z                                      # ATTENTION : a la parite de '$NMobius'...                                                    #

$Z                            @         NMobius21 = $NMobius12 + 1
$Z                            @         NMobius22 = $NMobius

$Z                            listMN    $FiLeTmP_TORE.3 $NMobius11 $NMobius12                                                           \
$Z                                                                                                  >>! $FiLeTmP_TORE.3.1
$Z                            listMN    $FiLeTmP_TORE.3 $NMobius21 $NMobius22                                                           \
$Z                                                                                                  >>! $FiLeTmP_TORE.3.2

$Z                            set       RaYoN=`$CA $FiLeTmP_TORE.3 | $SE -e 's/^.* \(RAYON=[^ ][^ ]*\) .*$/\1/' | $SOR -u`
$Z                            set       RaYoN1=`echo "$RaYoN" | $SE -e 's/^\(.*=\).*$/\1/'`
$Z                            set       RaYoN2=`echo "$RaYoN" | $SE -e 's/^.*=\(.*\)$/\1/'`
$Z                            set       RaYoN2=`calcul $RaYoN2/$_____RapportRayon`

$Z                            $CA       $FiLeTmP_TORE.3.1                                                                         |     \
$Z                            $SE       -e 's/^.*$'"/$SePaRaTeUr/"                                                                      \
$Z                                                                                                  >>! $FiLeTmP_TORE.3.separateur

$Z                            $PAST     $FiLeTmP_TORE.3.1 $FiLeTmP_TORE.3.separateur $FiLeTmP_TORE.3.2                            |     \
$Z                            $R        "$K_TAB" "$K_BLANC"                                                                       |     \
$Z                            $R        "$SePaRaTeUr" "$K_NL"                                                                     |     \
$Z                            $SE       -e "s/ $RaYoN / $RaYoN1$RaYoN2 /"                                                               \
$Z                                                                                                  >>! $FiLeTmP_TORE.3.ruban
$Z                                      # Generation du Ruban de Mobius...                                                            #

$Z                            $CA       $FiLeTmP_TORE.1.double $FiLeTmP_TORE.2.double $FiLeTmP_TORE.3.ruban                             \
$Z                                                                                                  >>! $FiLeTmP_TORE
$Z                                      # Generation de la description du tore, du noeud et du Ruban de Mobius...                     #

$Z                            FileTmpB            FiLeTmP_COORDONNEES
$Z                            FileTmpB            FiLeTmP_COULEURS
$Z                            FileTmpB            FiLeTmP_RAYONS

$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* X=//"                                                                                 \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COORDONNEES$COORD_X
$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* Y=//"                                                                                 \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COORDONNEES$COORD_Y
$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* Z=//"                                                                                 \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COORDONNEES$COORD_Z
$Z                                      # Recuperation des coordonnees {X,Y,Z}.                                                       #

$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* ROUGE=//"                                                                             \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COULEURS$ROUGE
$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* VERTE=//"                                                                             \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COULEURS$VERTE
$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* BLEUE=//"                                                                             \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_COULEURS$BLEUE
$Z                                      # Recuperation des couleurs {ROUGE,VERTE,BLEUE}.                                              #

$Z                            $CA       $FiLeTmP_TORE                                                                             |     \
$Z                            $SE       -e "s/^.* RAYON=//"                                                                             \
$Z                                      -e 's/ .*$//'                                                                                   \
$Z                                                                                                  >>! $FiLeTmP_RAYONS
$Z                                      # Recuperation des rayons.                                                                    #

$Z                            set       NPointsX=`$CA $FiLeTmP_COORDONNEES$COORD_X | $WCl`
$Z                            set       NPointsY=`$CA $FiLeTmP_COORDONNEES$COORD_Y | $WCl`
$Z                            set       NPointsZ=`$CA $FiLeTmP_COORDONNEES$COORD_Z | $WCl`
#20220615104523____:$Z                       set       NPointsXYZ=`$xcg/MAX3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI`    #
$Z                            set       NPointsXYZ=`$xcg/MIN3.01$X x=$NPointsX y=$NPointsY z=$NPointsZ entier=VRAI`

$Z                            if        (-e $_____RotationOY) then
$Z                                      # La possibilite que '$_____RotationOY' soit un fichier fut introduite le 20120611103448      #
$Z                                      # afin de pouvoir generer des stereogrammes en particulier...                                 #
$Z                                      set       NImAgEs=`$CA $_____RotationOY | $WCl`
$Z                                      set       ImAgER=$_____ImageR.
$Z                                      set       ChIfFrEs=4
$Z                            else
$Z                                      set       NImAgEs=1
$Z                                      set       ImAgER=$_____ImageR
$Z                                      set       ChIfFrEs=0
$Z                            endif

$Z                            $xrv/particule.10$X np=$NImAgEs iterations=$NPointsXYZ                                                    \
$Z                                                LISTE_X=$FiLeTmP_COORDONNEES$COORD_X                                                  \
$Z                                                LISTE_Y=$FiLeTmP_COORDONNEES$COORD_Y                                                  \
$Z                                                LISTE_Z=$FiLeTmP_COORDONNEES$COORD_Z                                                  \
$Z                                                LISTE_RAYON=$FiLeTmP_RAYONS                                                           \
$Z                                                LISTE_ROUGE=$FiLeTmP_COULEURS$ROUGE                                                   \
$Z                                                LISTE_VERTE=$FiLeTmP_COULEURS$VERTE                                                   \
$Z                                                LISTE_BLEUE=$FiLeTmP_COULEURS$BLEUE                                                   \
$Z                                                ajuster_couleurs=$_____AjustCouleurs                                                  \
$Z                                                ajuster_couleurs_independamment_homothetie=$_____AjustCouleursH                       \
$Z                                                ajuster_couleurs_independamment_translation=$_____AjustCouleursT                      \
$Z                                                BR=$_____TranslationRVB BV=$_____TranslationRVB BB=$_____TranslationRVB               \
$Z                                                Lz=1000                                                                               \
$Z                                                Zminimum=$_____DepthCueing ZminimumT=$_____DepthCueing                                \
$Z                                                ROTATION_OX=$_____RotationOX                                                          \
$Z                                                ROTATION_OY=$_____RotationOY                                                          \
$Z                                                ROTATION_OZ=$_____RotationOZ                                                          \
$Z                                                ZOOM=$_____Zoom                                                                       \
$Z                                                isoles=FAUX chainer=FAUX                                                              \
$Z                                                ajuster_points=VRAI points=$_____Points nombreR=$_____NombreR                         \
$Z                                                equidistance=VRAI compatibilite_20051230=FAUX                                         \
$Z                                                cubique=$_____Cubique                                                                 \
$Z                                                derivees_automatiques=FAUX                                                            \
$Z                                                LISTE_dX=$_____DeriveeX LISTE_dY=$_____DeriveeY LISTE_dZ=$_____DeriveeZ               \
$Z                                                RVB=VRAI                                                                              \
$Z                                                N_AU_CARRE=$N_Au_CaRrE                                                                \
$Z                                                $_____ParticulePara1                                                                  \
$Z                                                R=$ImAgER                                                                             \
$Z                                                chiffres=$ChIfFrEs                                                                    \
$Z                                                CAL1=FAUX                                                                             \
$Z                                                                                                                      $formatI
$Z                                      # Visualisation du noeud...                                                                   #

$Z                            FileTmpE            FiLeTmP_RAYONS
$Z                            FileTmpE            FiLeTmP_COULEURS
$Z                            FileTmpE            FiLeTmP_COORDONNEES

$Z                            FileTmpE            FiLeTmP_TORE
$Z                  else
$Z                            EROR                "La surface '$_____SurfaceA' n'existe pas."
$Z                  endif



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.