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